2005-09-23 (金)
■ サーバセットアップ
Gentoo, Debian に続いて FreeBSD の話。 そろそろカテゴリ分けに失敗したような気がしてきた。
それはそうと、これまで借りていたさくらのサーバに続いて、VPS7というところに新しくサーバを借りた。 仮想専用サーバという、物理的には1台のサーバだけど、仮想的に複数のサーバに分ける構成をとっているらしい。 使う側からすると、専用サーバのように見える。
OS は FreeBSD でさくらと同じ。 さくらのときは1ユーザとしてしか使っていなかったので、特に FreeBSD を意識していたわけじゃなかった。 でも、今回はサーバのセットアップから自分でやる(初期状態である程度は使えるようになっているけど)ので、いろいろ勉強しなきゃいけない。
以下、覚えている限りメモ。
ユーザの追加
何はなくともユーザの追加から。
/usr/sbin/adduser machu
ホームディレクトリの .ssh/authorized_keys に公開鍵を置く。
シェル環境の充実
次はシェル周りの環境を作る。 FreeBSD では ports/packages というパッケージ管理を使うらしい。 ports は Gentoo の portage みたいなもの(というか、portage が ports を参考にしている)で、package はそのバイナリ版。
zsh と sudo を package から入れる。
# pkg_add -r zsh # pkg_add -r sudo
次に screen を ports から入れる。 まず、portsの使い方を読んでなんとなく理解する。
whereis コマンドを使うと、そのコマンドが入っている ports が分かるらしい。
# whereis screen /usr/ports/misc/screen # cd /usr/ports/misc/screen # make configure # make # make install
インストールしたパッケージの一覧は、
# pkg_info -L screen-4.0.2_1
とすることで見ることができる。
■ Subversion 環境
次に、Subversion の環境を作る。
- 閲覧は Web から
- 更新は svn+ssh
という構成にする。
Apache2.0 (閲覧用)
まず、デフォルトで Apache 1.3 が入っていたので、 2.0 に入れ替える。
$ sudo pkg_delete apache1.3 $ pkg_add ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-stable/All/apache-2.0.54_4.tbz
次に、Subversion を入れる。
インストール時に設定を変えるには、make の引数で指定するのが ports の流儀らしい。 graphite.dを参考にしながら、以下の手順でインストールする。
# cd /usr/ports/devel/subversion # make clean # make WITH_MOD_DAV_SVN=YES WITH_APACHE2_APR=YES (中略) You should build `www/apache2' with db4 support to use subversion with it. Please rebuild `www/apache2' with option `WITH_BERKELEYDB=(db4|db41|db42)' and try again. Or you can disable db4 support. Only 'fs' repository backend will be availible. To disable db4 support, define WITHOUT_BDB.
Apache 側にも BerkeleyDB の設定がいるらしい。 でも、Subversionのファイルシステムは fsfs を使うつもりなので、BerkeleyDB を使わないようにして、再度コンパイル。
# make WITH_MOD_DAV_SVN=YES WITH_APACHE2_APR=YES WITHOUTBDB=YES # make install
インストールが終わると、リポジトリを作ったりソースを入れたり。
# mkdir /usr/local/var/svn # svnadmin create /usr/local/var/svn/pukiwiki # svn import pukiwiki-cvs \ file:////usr/local/var/svn/pukiwiki/current \ -m 'importing pukiwiki-20050923 vendor drop'
次に、ただのにっきを参考に Apache からリポジトリを参照できるようにする。
# cd /usr/local/etc/apache2/Includes
# vi dav_svn.conf
<Location />
<IfModule mod_dav.c>
Dav svn
SVNParentPath /usr/local/var/svn
</IfModule>
<LimitExcept GET PROPFIND OPTIONS REPORT>
Deny from all
</LimitExcept>
</Location>
Apache を起動しようとすると、エラーがでてしまった。
# /usr/local/sbin/apachectl start Syntax error on line 275 of /usr/local/etc/apache2/httpd.conf: Cannot load /usr/local/libexec/apache2/mod_dav_svn.so into server: /usr/local/libexec/apache2/mod_dav_svn.so: Undefined symbol "dav_xml_get_cdata"
dav_module が有効になっていないことが原因らしいので、 httpd.conf を修正。
# vi /usr/local/etc/apache2/httpd.conf LoadModule dav_module libexec/apache2/mod_dav.so
再度起動すると、Web上からリポジトリを参照できるようになった。
svn+ssh (更新用)
公式ドキュメントを読むと、 ssh 経由で svnserve を起動するらしい。 何か特別な設定がいるのかと思ったけど、手元のマシン (colinux + Debian) でいきなり接続してみたら、何もせずに繋がってしまったのでビックリした。 そういうものなのね。
$ svn list svn+ssh://dev.machu.jp/usr/local/var/svn/pukiwiki/ trunk/ vendor/
しかも、 Windows 機の TortoiseSVN からも、認証すら不要で繋がってしまった。
svn+ssh://dev.machu.jp/usr/local/var/svn/pukiwiki/
SSH には PuTTY の鍵を使っているらしく、それで見た目は勝手に繋がった(裏ではSSH接続してる)んだろうけど、こうもすんなり動くと逆に不安になったりもする(笑)。
…と、ここまでやったところで、僕の場合はWebからの閲覧って別に必要ないことに気がついてしまった。
追記
リポジトリのパスをルートから書くのは面倒だしセキュリティ的にもよくないので、ドキュメントを参考に、特定のディレクトリしか公開しないようにする。
まずは、 svn 接続専用のユーザ (svn) を作成し .ssh/authorized_keys を以下のように作成する(実際は一行)。
command="svnserve -t --tunnel-user=machu -r /usr/local/var/svn" ssh-dss AAAAB(中略)M6BA== ****@machu.jp
これで、
svn+ssh://svn@dev.machu.jp/pukiwiki/
で接続できるようになる。 複数ユーザでリポジトリを共有する時は、authorized_keysに行を追加していけばいいみたい。