:::: MENU ::::

CentOS5.7にPython2.7.3とTrac1.0をインストールしてMySQL5.5で動かす

いつのまにか 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 dbuser@192.xx.xx.xxx identified by 'dbpass';

アプリサーバでプロジェクト作成
# trac-admin /var/repos/trac/test01 initenv
Project Name [My Project]> テストプロジェクト
Database connection string [sqlite:db/trac.db]>mysql://dbuser:dbpass@192.xx.xx.xxx: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