Subversion & Trac セットアップ@白箱
白箱に開発環境を・・・ということで、バージョン管理ツールであるSubversion(svn)と、
そのsvnのリポジトリブラウズ機能が強力なTracをセットアップしてみました。
Trac ってなに?という人はこちらが参考になるでしょう。
さて、セットアップは簡単かと思いきや、白箱のせいなのか私のせいなのか、けっこうハマりました。
当初は、問題なく sarge の subversion_1.1.4-2 + trac_0.8.1-3sarge7 + apache2 + mod-python2.3 でいけると考えてましたが、どうにも解決せず、結果的に sarge-backports の subversion_1.4.2dfsg1-2~bpo.1 + trac_0.10.3-1~bpo.1 と、apache2 + fastcgi に落ち着きました。
以下その顛末です。
まずはセオリー通り・・・ が、セグメンテーション違反!
Trac の公式サイトにあった以下のページを参考にセットアップを開始しました。
- TracOnDebianSarge – The Trac Project(English)
※ちなみに参考サイトの最初にTracの最新パッケージのあるapt-lineが書いてありますが、
x86用しかないので、白箱では使えませんでした(GLANTANKはarm)。
Debianおなじみのapt-getでパッケージをインストール
$ sudo apt-get install subversion $ sudo apt-get install trac $ sudo apt-get install libapache2-svn
mod_pythonで動かす予定(だった)なので、こちらもインストール
$ sudo apt-get install libapache2-mod-python2.3
途中でモジュールを有効にするか尋ねられるので、はいと答える。
Apache2 の mod_python モジュールを有効にしますか? <はい>
とりあえず参考サイトに書かれたとおりに進めていきます。
"project"というsvnの新規リポジトリを作成します。
$ sudo mkdir /var/svn $ sudo mkdir /var/svn/project $ sudo mkdir /tmp/project $ sudo mkdir /tmp/project/branches $ sudo mkdir /tmp/project/tags $ sudo mkdir /tmp/project/trunk $ sudo svnadmin create /var/svn/project --fs-type fsfs $ sudo svn import /tmp/project file:///var/svn/project -m "initial import" $ sudo rm -rf /tmp/project
apacheの設定ファイルを編集します。
(私の場合は、"/etc/apache2/sites-available/default"ですが、
編集するファイルは各人の環境により適宜読み替えてください。)
$ sudo vi /etc/apache2/sites-available/default
以下を追加します。
# SVN dir <Location /svn> DAV svn SVNParentPath /var/svn SVNAutoversioning on AuthType Basic AuthName "SVN - Your Project" AuthUserFile /etc/apache2/svn.passwd Require valid-user </Location>
言われたとおりリポジトリ内のファイルとディレクトリのパーミッションを変更し、
オーナー、グループをroot、www-dataとします。
$ sudo find /var/svn/project -type f -exec chmod 660 {} \; $ sudo find /var/svn/project -type d -exec chmod 2770 {} \; $ sudo chown -R root.www-data /var/svn/project
a2enmod コマンドを使って、apache2のdav,dav_fsモジュールを有効にします。(有効でない場合)
$ sudo a2enmod dav $ sudo a2enmod dav_fs
svn用htpasswdを設定します。
$ cd /etc/apache2 $ sudo htpasswd2 -c svn.passwd username (パスワードを設定)
ここまでで、一度apacheを再起動します。
$ sudo /etc/init.d/apache2 restart
Tracのコンテンツ(プロジェクトページ)を作成します。
/varにtracというディレクトリを作成し、さきほどのsvnのリポジトリに対応するプロジェクトページを作成します。
$ sudo mkdir /var/trac $ sudo trac-admin /var/trac/project initenv
途中の質問には以下のように答えます。
Project Name [My Project]> project Path to repository [/var/svn/test]> /var/svn/project Templates directory [/usr/share/trac/templates]>(リターンのみ)
これで通常なら各種コンテンツ用ファイル・ディレクトリが作成され
Congratulations!
と表示されるはずなのですが、私の白箱環境では
セグメンテーション違反
となってしまいました。。_no
sarge-backportsのパッケージを導入して、なんとかセットアップ成功
さて、いろいろと調べてみましたが、さっぱり解決策が見つかりません。
なんせ上のような参考サイトがあるのですから、きっと普通の(白箱じゃない)Debian sarge なら普通に動くのでしょう。。
ただ、svnのバージョンが1.4以上ならこの問題を回避できそう、ということはわかりました。
こりゃ、ソースインストールしかないかな。。と思いかけたそのとき、以下のサイトを発見しました。
というわけで、このサイトでは、tracの日本語版を入れるために、ソースインストールしていますが、
tracのパッケージもbackportsでいけるかも、と思いやってみました。
$ sudo vi /etc/apt/sources.list
以下を追加する
# backports deb http://backports.mithril-linux.org/ sarge-backports main
$ sudo vi /etc/apt/apt.conf
不要かなとも思ったけど、いわれたとおり設定。
APT::Cache-Limit "100000000"; APT::Default-Release "stable";
$ sudo vi /etc/apt/preferences
これも設定。
Package: * Pin: release a=stable Pin-Priority: 100 Package: * Pin: release a=stable-proposed-updates Pin-Priority: -1 Package: * Pin: release a=sarge-backports Pin-Priority: 110 Package: * Pin: release a=testing Pin-Priority: -1 Package: * Pin: release a=testing-proposed-updates Pin-Priority: -1 Package: * Pin: release a=unstable Pin-Priority: -1
$ sudo apt-get update
backportsのパッケージをインストールする前に、念のためstableのパッケージをremoveしておきます。
$ sudo apt-get --purge remove subversion $ sudo apt-get --purge remove trac
backportsのパッケージをインストールします。
パッケージ名のあとに明示的に /sarge-backports を指定しないとstableのパッケージになってしまうので注意。
$ sudo apt-get install subversion/sarge-backports libsvn0/sarge-backports libapache2-svn/sarge-backports
その他関連するパッケージもインストールします。
$ sudo apt-get install \ libapache2-mod-python \ python2.3-japanese-codecs \ python2.3-pysqlite2/sarge-backports \ python-docutils/sarge-backports \ python-clearsilver \ python2.3-clearsilver \ python2.3-setuptools/sarge-backports \ subversion-tools/sarge-backports \ python-subversion/sarge-backports \ sqlite3 \ enscript \ libsqlite3-0/sarge-backports
tracのbackports版をインストールします。
$ sudo apt-get install trac/sarge-backports
とりあえず再度svn関連の設定を行い、trac-adminコマンドに再挑戦すると・・・
$ sudo mkdir /var/trac $ sudo trac-admin /var/trac/project initenv
途中の質問(質問が少し増えています)
Project Name [My Project]> project Database connection string [sqlite:db/trac.db]>(リターンのみ) Repository type [svn]>(リターンのみ) Path to repository [/path/to/repos]> /var/svn/project Templates directory [/usr/share/trac/templates]>(リターンのみ) : : Congratulations!
今度は成功しました!
作成されたファイル・ディレクトリのパーミッションと、オーナーを変更します。
$ sudo find /var/trac/project -type f -exec chmod 660 {} \; $ sudo find /var/trac/project -type d -exec chmod 2770 {} \; $ sudo chown -R root.www-data /var/trac/project
$ sudo vi /etc/apache2/sites-available/default
ここでのポイントですが、
- ScriptAlias の前にAlias 行を記述すること
- 複数のプロジェクトページを運用する場合は、TRAC_ENV_PARENT_DIR で、それらプロジェクトページの親ディレクトリを指定する。
- LocationMatchで、すべてのプロジェクトページにBasic認証をかける
ちなみにBasic認証のhtpasswdファイルは、先で作成したsvn用htpasswdを流用しています。
# Trac Alias /trac/chrome/common "/usr/share/trac/htdocs" <Directory "/usr/share/trac/htdocs"> Order allow,deny Allow from all </Directory> ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi <Location "/trac"> SetEnv TRAC_ENV_PARENT_DIR "/var/trac" </Location> <LocationMatch "/trac/[^/]+/login"> AuthType Basic AuthName "Trac" AuthUserFile /etc/apache2/svn.passwd Require valid-user </LocationMatch>
設定を保存し、apacheを再起動します。
$ sudo /etc/init.d/apache2 restart
以上で、http://your.server.com/trac/project にアクセスすると、プロジェクトのトップページが表示されます。
また、http://your.server.com/tracでは、プロジェクトページへのリンクが表示されます。
とりあえずこれで、Tracのセットアップ成功です。
CGI激遅、mod_python競合問題 ・・・ fastcgiで落ち着く
上記方法により、問題なくTracがセットアップできた・・・かと思いきや、
Tracのプロジェクトページが遅い遅いw
はっきりいって使い物になりません。
まぁ白箱だしこんなもんか、とだいたい納得し、mod_pythonを導入しようとapt-getしたのですが・・・
$ sudo apt-get -s install libapache2-mod-python パッケージリストを読みこんでいます... 完了 : 中略 : 以下のパッケージは「削除」されます: trac : 以降略 :
trac削除されちゃ困るんですけど・・・w
どうもsarge-backportsを利用したせいか、依存関係でハマってしまったようです。
trac と libapache2-mod-python の依存関係をみてみると
$ apt-cache depends trac trac 依存: python 依存: python 依存: python-clearsilver |依存: python-pysqlite2 |依存: python-sqlite 依存: <python-psycopg2> 依存: python-subversion 依存: subversion 提案: enscript 提案: python-docutils 提案: libapache2-mod-python |推奨: apache2 apache2-mpm-perchild apache2-mpm-prefork apache2-mpm-worker 推奨: <httpd> bozohttpd aolserver aolserver4 apache apache-perl apache-ssl apache2-mpm-perchild apache2-mpm-prefork apache2-mpm-worker boa caudium dhttpd fnord lighttpd mathopd micro-httpd mini-httpd roxen4 thttpd thy 推奨: python-setuptools 競合: libapache2-mod-python2.3
$ apt-cache depends libapache2-mod-python libapache2-mod-python 依存: libapache2-mod-python2.3 依存: python 依存: python
となっており、libapache2-mod-python2.3がTracと競合しており、かたやlibapache2-mod-pythonはそのlibapache2-mod-python2.3に依存しているため、tracを削除しないとlibapache2-mod-pythonがインストールできない、ということらしいです(ややこしい)。
Tracは提案パッケージとして libapache2-mod-python をあげてるのになぁ。。
というわけで、mod_pythonは諦めざるをえなかったのですが、要は表示が速くなればいいので、fastcgiをインストールすることにしました。
$ sudo apt-get install libapache2-mod-fastcgi
特に依存関係とかでつまづくことなくインストール完了。
a2enmod でモジュールを有効化。
$ sudo a2enmod fastcgi
apache設定ファイル内のTracの設定をfastcgi向けに修正します。
$ sudo vi /etc/apache2/sites-available/default
この設定だけはバーチャルホスト外に記述する必要があります。
FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/var/trac
主な変更点はScriptAlias 〜 までの箇所です。
# Trac Alias /trac/chrome/common "/usr/share/trac/htdocs" <Directory "/usr/share/trac/htdocs"> Order allow,deny Allow from all </Directory> ScriptAlias /trac /usr/share/trac/cgi-bin/trac.fcgi <Directory /usr/share/trac/cgi-bin/> AddHandler fastcgi-script .fcgi DirectoryIndex trac.fcgi Options ExecCGI </Directory> <LocationMatch "/trac/[^/]+/login"> AuthType Basic AuthName "Trac" AuthUserFile /etc/apache2/svn.passwd Require valid-user </LocationMatch>
保存して、apacheを再起動します。
$ sudo /etc/init.d/apache2 restart
これで、プロジェクトページにアクセスすると・・・
おー!確かに速くなりました。
以上、なにげにハマった白箱へのTracインストールでした。
exim4でスマートホスト - Gmail経由でメール送信
初エントリがこれかよwという感じですが、
自宅の白箱(GLANTANK)からスクリプト経由でメール送信させたくなり、手っ取り早くインストール済みのexim4を使おうと思いつきました。
イチからメールサーバを構築するのも面倒だし、そういえばexim4にはスマートホストっていう機能があったな...こいつでGmailのSMTP経由で送れたらラクかも...
てなノリですw
すごく参考になったサイトはこちらです。
- GmailAndExim4 - Debian Wiki(English)
ほとんどここの手順通りなのですが、日本語の情報ではなかったので、改めて手順をまとめてみることにしました。
exim4パッケージの再設定
まずはexim4のパッケージの設定をやり直します。
$ sudo dpkg-reconfigure exim4-config
(※管理者権限が必要なコマンドには sudo をつけて書きます。)
設定項目と設定した値は以下の通りです。
- 設定を小さなファイルに分割しますか?: <はい>
- メール設定の一般的なタイプ: スマートホストでメール送信; SMTP または fetchmail で受信する
- システムメール名: localhost
- 入力側 SMTP 接続をリスンする IP アドレス: 127.0.0.1
- メールを受け取るその他の宛先: 未入力
- メールをリレーするマシン: 未入力
- このホストから送出されたメールを操作するマシン (スマートホスト): smtp.gmial.com
- 送出するメールでローカルメール名を隠しますか?: <いいえ>
- DNS クエリの数を最小限に留めますか (ダイヤルオンデマンド)?: <いいえ>
設定項目が終了すると、設定した内容が反映され、exim4が再起動されます。
設定ファイルの変更
次にexim4の設定ファイルを手動で変更します。
/etc/exim4/passwd.client にGmailのアカウント・パスワードを設定します。
$ sudo vi /etc/exim4/passwd.client
以下を追加します。
gmail-smtp.l.google.com:[Gmailアカウント]@gmail.com:[Gmailパスワード] *.google.com:[Gmailアカウント]@gmail.com:[Gmailパスワード] smtp.gmail.com:[Gmailアカウント]@gmail.com:[Gmailパスワード]
GmailはTLS/SMTP-AUTHなので、ポート番号587を指定する必要があります。
$ sudo vi /etc/exim4/conf.d/transport/30_exim4-config_remote_smtp_smarthost
hosts_try_auth 〜 の下にポート番号を追加するとのこと
hosts_try_auth = ${if exists {CONFDIR/passwd.client}{DCsmarthost}{}} port=587
メールの送信は、Gmailのメール・サーバを経由することになるので、メールアドレスはGmailのアドレスでないと認証が通りません。
そのため、ローカルのメールアドレスを、Gmailのメールアドレスへ書き換える必要があります。
/etc/exim4/email-address を作成して、ローカルアドレスとGmailのメールアドレスの対応を記述します。
$ sudo vi /etc/exim4/email-addresses
以下のような感じで記述します。
hoge@localhost: yourGmailAccount@gmail.com
ここまで設定したら、exim4を再起動します。
$ sudo /etc/init.d/exim4 restart
メール送信テスト
外部のメールアドレスに送信できるかテストしてみましょう。
$ /usr/sbin/sendmail test@send.to.com From: hoge@localhost To: test@send.to.com Subject: test This is test mail. .