玄箱にCVSサーバをインストールする

玄箱にCVSをインストールして、CVSサーバとしての準備を整えます。

CVSのソースコードを取り寄せる

CVSには、玄箱のためにコンパイルされたパッケージはありません。 このため、CVSのソースコードを取り寄せて、 玄箱上でコンパイルする必要があります。

CVSの本家 http://cvshome.org に 行ってみたところ、 ここにソースコードが置いてあるわけでは無いことがわかりました。

このページから誘われるまま、 http://ftp.gnu.org/non-gnu/cvs/に飛ばされ、 ディレクトリを掘り進んで、 cvs-1.12.13.tar.gz というファイルを いただいてきました。

試しにやってみる前に

この後の話を読むとわかりますが、 現在、このプログラムはある理由から使用していません。 追体験をしたい方以外は、 一連の文章を読んでからインストールする事をお勧めします。

玄箱に送り込んで展開する

ソースコードを取り寄せるためには、 WEBブラウザが必要です。 このため、この時には、取り寄せたファイルはまだPCにあります。

このファイルを玄箱に送り込むのは、簡単です。 玄箱をNASとして使用している場合には、 玄箱のネットワークディスクに書き込むと /mnt/shareディレクトリにソースコードが書き込まれます。

TELNETで玄箱にLOGINして、 ファイルを確認してみましょう。

root@NORITAN-BOX:~# tar tzvf /mnt/share/cvs-1.12.13.tar.gz | head -10
drwxrwxrwx 500/500           0 2005-10-03 22:43:45 cvs-1.12.13/
drwxrwxrwx 500/500           0 2005-10-03 22:42:58 cvs-1.12.13/build-aux/
-rwxrwxr-x 500/500        3703 2005-04-06 05:42:48 cvs-1.12.13/build-aux/compile
-rwxrwxr-x 500/500       42037 2005-04-06 05:42:48 cvs-1.12.13/build-aux/config.guess
-rwxrwxr-x 500/500       14869 2005-04-06 05:42:48 cvs-1.12.13/build-aux/config.rpath
-rwxrwxr-x 500/500       30221 2005-04-06 05:42:48 cvs-1.12.13/build-aux/config.sub
-rwxrwxr-x 500/500       15868 2005-04-06 05:42:48 cvs-1.12.13/build-aux/depcomp
-rwxrwxr-x 500/500        9233 2005-04-06 05:42:48 cvs-1.12.13/build-aux/install-sh
-rwxrwxr-x 500/500        5225 2005-04-06 05:42:48 cvs-1.12.13/build-aux/mdate-sh
-rwxrwxr-x 500/500       10872 2005-04-06 05:42:48 cvs-1.12.13/build-aux/missing

使えるみたいですね。 それでは、/usr/local/srcに展開してみましょう。 展開の時にrootアカウントで行うことをお忘れなく。

root@NORITAN-BOX:~# mkdir -p /usr/local/src
root@NORITAN-BOX:~# cd /usr/local/src
root@NORITAN-BOX:/usr/local/src# tar xzf /mnt/share/cvs-1.12.13.tar.gz

あっという間に展開されました。

コンパイルする

ソースコードが手に入ったら、 コンパイルし、インストールします。

コンパイルの前に

この後、コンパイルを行うのですが、 CVSのコンパイルのために色々なコマンド類が必要になりました。 私がインストールしたのは、以下の通り、ほとんどすべてのバイナリファイルです。 これらが本当に全部必要なのか否かについては検証していません。

total 60104
-rwxrwxrwx    1 noritan  users     3369791 Feb  9  2004 binutils-2.10.91.0.2.tar.gz
-rwxrwxrwx    1 noritan  users      138844 Feb  9  2004 bison-1.28.tar.gz
-rwxrwxrwx    1 noritan  users      131552 Feb  9  2004 diff-2.7.tar.gz
-rwxrwxrwx    1 noritan  users      129143 Feb  9  2004 flex-2.5.4.tar.gz
-rwxrwxrwx    1 noritan  users     1447426 Feb  9  2004 g++-2.95.3.tar.gz
-rwxrwxrwx    1 noritan  users     9770179 Feb  9  2004 gcc-2.95.3.tar.gz
-rwxrwxrwx    1 noritan  users     2062156 Feb  9  2004 gdb-5.1.tar.gz
-rwxrwxrwx    1 noritan  users      665296 Feb  9  2004 gettext-0.10.35.tar.gz
-rwxrwxrwx    1 noritan  users    27949903 Feb  9  2004 glibc-2.2.3.tar.gz
-rwxrwxrwx    1 noritan  users       44161 Feb 10  2004 libgdbm-1.7.3.tar.gz
-rwxrwxrwx    1 noritan  users       54561 Feb  9  2004 m4-1.4.tar.gz
-rwxrwxrwx    1 noritan  users      164429 Feb  9  2004 make-3.79.1.tar.gz
-rwxrwxrwx    1 noritan  users    14890239 Feb  9  2004 perl-5.6.1.tar.gz
-rwxrwxrwx    1 noritan  users      317868 Feb  9  2004 texinfo-4.0b.tar.gz
-rwxrwxrwx    1 noritan  users      264838 Feb  9  2004 textutils-2.0.tar.gz

バイナリファイルのインストール方法は、 玄箱にプログラムを入れるに 書いてあります。

コンパイルの第一段階として、 コンパイルのための環境設定が必要です。 環境設定のためのスクリプトがconfigureに入っています。

root@NORITAN-BOX:/usr/local/src/cvs-1.12.13# ./configure

5分ほどで環境設定が終わりました。 次は、いよいよコンパイルです。

root@NORITAN-BOX:/usr/local/src/cvs-1.12.13# make

これも5分ほどで終わりました。 出来上がった、バイナリを適当なところに配置します。

root@NORITAN-BOX:/usr/local/src/cvs-1.12.13# make install

これでCVSコマンドが使用できるようになりました。

root@NORITAN-BOX:/usr/local/src/cvs-1.12.13# cvs --version

Concurrent Versions System (CVS) 1.12.13 (client/server)

Copyright (C) 2005 Free Software Foundation, Inc.

リポジトリを作る

CVSサーバは、文書などを格納するためにリポジトリという場所を使います。 まずは、リポジトリの場所を確保します。 リポジトリは、PCから簡単にバックアップを取ることができるように、 Sambaが管理するディスクに配置します。 玄箱に新規の共有フォルダ"cvs"を作成してから、以下の操作を行います。

root@NORITAN-BOX:/mnt/cvs# mkdir rep
root@NORITAN-BOX:/mnt/cvs# chgrp users rep
root@NORITAN-BOX:/mnt/cvs# chmod g+w rep
root@NORITAN-BOX:/mnt/cvs# ls -ld rep
drwxrwxr-x    2 root     users        4096 Oct 29 18:37 rep

リポジトリを配置するための/mnt/cvs/repというディレクトリを 作成しました。

CVSクライアントがCVSサーバに要求をする時、 ロックファイルという特殊なファイルを作成するため、 リポジトリには書き込み権が必要です。 そのため、ディレクトリのグループを すべての一般ユーザを示すusersとして、 グループに対して書き込み権を与えるためにディレクトリのモードを変更します。

最後にこのディレクトリがリポジトリとして使用できるように初期設定します。

root@NORITAN-BOX:/mnt/cvs# cvs -d /mnt/cvs/rep init
root@NORITAN-BOX:/mnt/cvs# ls -al rep
total 12
drwxrwxr-x    3 root     users        4096 Oct 29 18:42 .
drwxrwxrwx    5 root     root         4096 Oct 29 18:37 ..
drwxrwxr-x    3 root     root         4096 Oct 29 18:42 CVSROOT

これで、リポジトリの準備は完了です。

クライアントからの要求によってCVSを起動させる

CVSコマンドとリポジトリが出来上がったので、 玄箱単体ではCVSを使用することができるようになりました。 しかし、このままでは、 他のクライアントからの要求を受け付けることができません。

このような場合に ネットワーク上のクライアントからの要求にしたがって、 対応するプログラムを起動させるのが、inetdの役割です。 inetdは、 /etc/inetd.confというファイルを基にして仕事をします。 CVSクライアントからの要求を処理するために、 /etc/inetd.confファイルに以下の行を追加します。

# CVS server
cvspserver stream tcp nowait root /usr/local/bin/cvs cvs --allow-root=/mnt/cvs/rep pserver
cvspserver
クライアントからの要求を受けるポートを示します。 実際のポート番号は、/etc/servicesに記述されています。
stream tcp nowait
TCP/IPを利用したプロトコルが使用され、 個々の要求に対して個別のプロセスを起動します。
root
起動されるプロセスは、root権限で動作します。
/usr/local/bin/cvs
実際に起動する実行ファイルを示します。
cvs --allow-root=/mnt/cvs/rep pserver
プロセスに渡すパラメータを指定します。 ここでは、cvsというコマンドに対して、 --allow-root=/mnt/cvs/repというオプションと pserverというサブコマンドを送ります。

--allow-root=というオプション

このオプションは、CVSサーバでで使用可能なリポジトリの位置を指定します。 CVSクライアントは、 CVSサーバに対してリポジトリの場所を指定してアクセスしてきます。 このため、このオプションを適切に設定しておかないと、 「CVSサーバが見せたくないと思っているファイル」まで 見られてしまう可能性がありますので注意が必要です。

複数のリポジトリを使用したい場合には、 --allow-root=オプションをリポジトリの数だけ追加します。

最後に設定ファイルを書き換えたことをinitdプロセスに知らせます。

root@NORITAN-BOX:/etc# ps -ef | grep inetd
root       171     1  0 Sep23 ?        00:00:00 /usr/sbin/inetd
root     18223  5196  0 22:27 pts/0    00:00:00 grep inetd
root@NORITAN-BOX:/etc# kill -HUP 171

psコマンドでinetdのプロセスIDを調べて、 HUPシグナルを送ります。

これで、CVSサーバとしての準備は完了です。

Updated: $Date: 2006/11/06 12:46:35 $

Copyright (C) 2006 noritan.org ■