いつのまにか Trac が 1.0 になっていたので入れてみました。
Trac0.13 がなくなっていたので、たぶん昇格して 1.0 になったんだろう。
サーバ構成
2 台構成で Web/App と DB に分けて構築する。
両方とも CentOS5.7。
Web/App サーバの構築
Apache を yum でインストール
標準のものを入れる(2.4 は別にパフォーマンス別によくないらしいし)
# yum install httpd.x86_64 httpd-devel.x86_64
# cd /etc/httpd/conf/
# cp -a httpd.conf httpd.conf.org
# vi httpd.conf
# cd /etc/httpd/conf.d/
# mv welcome.conf welcome.conf.off
# mv squid.conf squid.conf.off
# mv proxy_ajp.conf proxy_ajp.conf.off
python をソースからインストール
# wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
# tar xvfz Python-2.7.3.tgz
# cd Python-2.7.3
オプション--enable-sharedを付けないとあとでエラーが出る
# ./configure --prefix=/usr/local/python2.7.3 --enable-shared
# make
# make install
共有ライブラリを認識させる
# vi /etc/ld.so.conf.d/python2.7.3.conf
/usr/local/python2.7.3/lib
# ldconfig
# ldconfig -p | grep 'python'
パスを通しておく
# vi ~/.bash_profile
PYTHON_HOME=/usr/local/python2.7.3
PATH=$PYTHON_HOME/bin:$PATH:$HOME/bin
export PYTHON_HOME PATH
export MANPATH="$MANPATH":$PYTHON_HOME/man
# source ~/.bash_profile
# python -V
Python 2.7.3
デフォルトのエンコーディングを UTF-8 に設定
# vi /usr/local/python2.7.3/lib/python2.7/site-packages/sitecustomize.py
import sys
sys.setdefaultencoding('utf-8')
easy_install をインストール
# yum install libxml2-devel.x86_64
# yum install libxslt-devel.x86_64
# yum install freetype-devel.x86_64
# yum install libjpeg-devel.x86_64
# yum install libpng-devel.x86_64
# yum install zlib-devel.x86_64
# yum install expat-devel.x86_64
# wget http://peak.telecommunity.com/dist/ez_setup.py
# /usr/local/python2.7.3/bin/python2.7 ez_setup.py
Pygments をインストール
コードのハイライト表示に使う
# /usr/local/python2.7.3/bin/easy_install Pygments
neon をソースからインストール
--disable-static を付けておかないと.so ファイルが生成されない
# wget http://www.webdav.org/neon/neon-0.29.6.tar.gz
# tar xvfz neon-0.29.6.tar.gz
# cd neon-0.29.6
# ./configure --prefix=/usr/local/neon --with-libxml2 --with-expat --enable-shared --disable-static
# make
# make install
# vi /etc/ld.so.conf.d/neon.conf
/usr/local/neon/lib
# ldconfig
# ldconfig -p | grep neon
pcre をソースからインストール
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.32.tar.gz
# tar xvfz pcre-8.32.tar.gz
# cd pcre-8.32
# ./configure --prefix=/usr/local/pcre
# make
# make install
# ll /usr/local/pcre/lib/
# vi /etc/ld.so.conf.d/pcre.conf
/usr/local/pcre/lib
# ldocnfig
# ldconfig -p | grep pcre
swig をソースからインストール
# wget http://prdownloads.sourceforge.net/swig/swig-2.0.9.tar.gz
# tar xvfz swig-2.0.9.tar.gz
# cd swig-2.0.9
# ./configure --prefix=/usr/local/swig --with-python=/usr/local/python2.7.3/bin/python --with-pcre-prefix=/usr/local/pcre
# make
# make install
# vi /etc/ld.so.conf.d/swig.conf
/usr/local/swig/lib
# ldconfig
# ldconfig -p | grep swig
apr をソースからインストール
apache 標準のだとなんかダメだった
# wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//apr/apr-1.4.6.tar.gz
# tar xvfz apr-1.4.6.tar.gz
# cd apr-1.4.6
# ./configure
# make
# make install
# wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//apr/apr-util-1.5.1.tar.gz
# tar xvfz apr-util-1.5.1.tar.gz
# cd apr-util-1.5.1
# ./configure --with-apr=../apr-1.4.6
# make
# make install
# vi /etc/ld.so.conf.d/apr.conf
/usr/local/apr/lib
# ldconfig
# ldconfig -p | grep apr
subversion を yum からインストール
なんか swig 付きでインストールできなかったので、事前に subversion を yum で入れる
# vi /etc/yum.repos.d/WANdisco-1.7.repo
[WANdisco-dev]
name=WANdisco SVN Repo 1.7
enabled=0
baseurl=http://opensource.wandisco.com/centos/5/devel/RPMS/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-WANdisco
# wget http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco
# rpm --import RPM-GPG-KEY-WANdisco
# yum --enablerepo=WANdisco-dev install subversion.x86_64 subversion-perl.x86_64 subversion-devel.x86_64 mod_dav_svn.x86_64
swig 付きで最初っからインストールすると下記のようなエラーが出た。
結局解決できなかったので謎だ。
collect2: ld returned 1 exit status
make: ### [subversion/libsvn_subr/libsvn_subr-1.la] エラー 1
/usr/bin/ld: cannot find -lsvn_client-1
collect2: ld returned 1 exit status
libtool: install: error: relink `libsvn_swig_py-1.la' with the above command before installing it
subversion を swig 付きでインストール
swig 付きでインストールしないと Trac と連携できない
# wget http://ftp.tsukuba.wide.ad.jp/software/apache/subversion/subversion-1.7.8.tar.gz
# tar xvfz subversion-1.7.8.tar.gz
Subversionのインストールにはsqliteが必要なのでソースを入れておく
# wget http://www.sqlite.org/sqlite-amalgamation-3071502.zip
# unzip sqlite-amalgamation-3071502.zip
# mv sqlite-amalgamation-3071502 subversion-1.7.8/sqlite-amalgamation
# cd subversion-1.7.8
使わないものはwithoutオプションで弾いておく
# ./configure --prefix=/usr/local/subversion --with-apxs=/usr/sbin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-neon=/usr/local/neon --with-swig=/usr/local/swig --with-ssl --without-jdk --without-berkeley-db
# make swig-py
# make install-swig-py
# ln -sfn /usr/local/subversion/lib/svn-python/svn/ /usr/local/python2.7.3/lib/python2.7/site-packages/svn
# ln -sfn /usr/local/subversion/lib/svn-python/libsvn/ /usr/local/python2.7.3/lib/python2.7/site-packages/libsvn
# vi /usr/local/python2.7.3/lib/python2.7/site-packages/svn-python.pth
/usr/local/subversion/lib/svn-python
without オプションを書かなかった場合は、下記のようなエラーがでるが、
berkeley-db は使ってないので、これは無視していい。
You don't seem to have Berkeley DB version 4.0.14 or newer
installed and linked to APR-UTIL. We have created Makefile which will build
Subversion without support for the Berkeley DB back-end. You can find the
latest version of Berkeley DB here:
http://www.oracle.com/technology/software/products/berkeley-db/index.html
Apache の conf を設定
# /etc/httpd/conf.d/subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /svn>
DAV svn
SVNParentPath /var/repos/svn
# Limit write permission to list of valid users.
<LimitExcept GET PROPFIND OPTIONS REPORT>
AuthType Digest
AuthUserFile /var/repos/user/htdigest
AuthName "Trac/Subversion"
Require valid-user
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
</LimitExcept>
</Location>
# htdigest -c /var/repos/user/htdigest "Trac/Subversion" user1
リポジトリの作成
# svnadmin create /var/repos/svn/test01
# chown -R apache:apache /var/repos/svn/test01/
# svn mkdir http://localhost/svn/test01/trunk -m "create trunk"
Trac1.0 日本語版をインストール
いくつかカスタマイズしておく
# wget http://www.i-act.co.jp/project/products/downloads/Trac-1.0.ja1.zip
# unzip Trac-1.0.ja1.zip
# cd Trac-1.0.ja1
外部へのリンクは別タブで開くように設定
# vi trac/wiki/formatter.py
babelをインストールしないと日本語化されないのでインストール
# /usr/local/python2.7.3/bin/easy_install babel
# /usr/local/python2.7.3/bin/python2.7 setup.py install
mod_wsgi をソースからインストール
mod_python は python2.7 に対応していないので
# wget http://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz
# tar xvfz mod_wsgi-3.4.tar.gz
# cd mod_wsgi-3.4
# ./configure --with-apxs=/usr/sbin/apxs --with-python=/usr/local/python2.7.3/bin/python
# make
# make install
Apache の conf を設定
# vi /etc/httpd/conf.d/trac.conf
Alias /trac_common /usr/share/trac/htdocs
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias /trac /var/repos/conf/trac.wsgi
<Location /trac>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Location>
<LocationMatch "/trac/[^/]+/login">
AuthType Digest
AuthUserFile /var/repos/user/htdigest
AuthName "Trac/Subversion"
AuthDigestNonceLifetime 300
Require valid-user
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
</LocationMatch>
wsgi の設定を記述
# vi /var/repos/conf/trac.wsgi
import os
import trac.web.main
os.environ['TRAC_ENV_PARENT_DIR'] = '/var/repos/trac'
os.environ['PYTHON_EGG_CACHE'] = '/var/www/.python-eggs'
application = trac.web.main.dispatch_request
# mkdir /var/www/.python-eggs
# chown -R apache:apache /var/www/.python-eggs
MySQL5.6 のインストール
DB サーバの MySQL5.6 で、Web/App サーバの MySQL が 5.5 以下だと、
trac-admin hotcopy を行うと下記のようなエラーが出てしまう。
TracError: mysqldump が失敗しました: mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064)
これは 5.6 から SET OPTION 構文が廃止になったため。
参考:MySQL clients
大人しく標準の MySQL を消して、DB サーバに入れたものと同じバージョンを入れる。
# yum remove mysql
# cd /usr/local/src/
# rpm -ivh MySQL-client-5.6.10-1.rhel5.x86_64.rpm MySQL-devel-5.6.10-1.rhel5.x86_64.rpm MySQL-shared-5.6.10-1.rhel5.x86_64.rpm MySQL-shared-compat-5.6.10-1.rhel5.x86_64.rpm
# /usr/local/python2.7.3/bin/easy_install MySQL-python
DB サーバの構築
MySQL5.6 のインストール
# cd /usr/local/src/
# wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
# rpm -ivh epel-release-5-4.noarch.rpm
# vi /etc/yum.repos.d/epel.repo
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.10-1.rhel5.x86_64.rpm/from/http://cdn.mysql.com/
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-compat-5.6.10-1.rhel5.x86_64.rpm/from/http://cdn.mysql.com/
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-embedded-5.6.10-1.rhel5.x86_64.rpm/from/http://cdn.mysql.com/
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.10-1.rhel5.x86_64.rpm/from/http://cdn.mysql.com/
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-5.6.10-1.rhel5.x86_64.rpm/from/http://cdn.mysql.com/
# wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.10-1.rhel5.x86_64.rpm/from/http://cdn.mysql.com/
# rpm -ivh MySQL-*
MySQL の設定ファイルを記述
my.cnf は/usr/my.cnf に変わったが、/etc/my.cnf に置いてあっても読んでくれた
# vi /etc/my.cnf
# /etc/init.d/mysql start
# cat /root/.mysql_secret
# The random password set for the root user at Mon Feb 18 09:34:38 2013 (local time): hogehoge
# mysql -u root -phogehoge
rootのパスワードを空に設定
mysql> SET PASSWORD FOR root@localhost=PASSWORD('');
Query OK, 0 rows affected (0.00 sec)
# mysql_secure_installation
Set root password? [Y/n] n
... skipping.
Remove anonymous users? [Y/n] Y
... Success!
Disallow root login remotely? [Y/n] Y
... Success!
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reload privilege tables now? [Y/n] Y
... Success!
# mysql -u root
プロジェクトの作成
Trac の作成
DBサーバでデータベースを作成
# mysql -u root
mysql> create database test01;
mysql> grant all privileges on test01.* to [email protected] identified by 'dbpass';
アプリサーバでプロジェクト作成
# trac-admin /var/repos/trac/test01 initenv
Project Name [My Project]> テストプロジェクト
Database connection string [sqlite:db/trac.db]>mysql://dbuser:[email protected]:3306/test01
# chown -R apache:apache /var/repos/trac/test01/
# vi /var/repos/trac/test01/conf/trac.ini
[components]
tracopt.versioncontrol.svn.* = enabled
[trac]
repository_dir = /var/repos/svn/test01
# trac-admin /var/repos/trac/test01/ permission add user1 TRAC_ADMIN
# trac-admin /var/repos/trac/test01/ repository resync '*'
# /etc/init.d/httpd restart
静的ファイルを Apache 経由で出す
# vi /var/repos/trac/test01/conf/trac.ini
[trac]
htdocs_location = /trac_common
# mkdir /usr/share/trac
# mkdir /usr/share/trac/conf
# mkdir /usr/share/trac/plugins
# mkdir /usr/share/trac/templates
# mkdir /usr/share/trac/htdocs
# cd /usr/share/trac/htdocs
# cp -a /var/www/.python-eggs/Trac-1.0.ja1-py2.7.egg-tmp/trac/htdocs/* ./
# /etc/init.d/httpd restart