CVSをLinuxに

特に明記されていない箇所の作業は一般ユーザ(今回はユーザ名cvs)で行った。
root権限が必要な作業はその都度明記。

                                                                • -

検証環境

                                                                • -

Red Hat Linux v9 (/usr/bin/cvs すでにあり)

                                                                • -

サーバ側のディレクトリ構造(目指すところ)

                                                                • -

% export CVSROOT=/cvs/repository/framework

(一般例)
/cvs/
    +-- /repository/framework
                        +-- /CVSROOT/ ← cvs initによって作られる
                        +-- /モジュール(1)/ ← importによって追加
                                +-- /src/ (例)
                                +-- /docs/ (例)
                        +-- /モジュール(2)/

(今回)
/cvs/
    +-- /repository/framework
                        +-- /CVSROOT/ ← cvs initによって作られる
                        +-- /build/projects/ ← importによって追加
                                        +-- /単位1/
                                        +-- /単位2/
                                        +-- /単位3/

(注)"CVSROOT"というのが二つあって紛らわしい
(a) 環境変数CVSROOT

% export CVSROOT=/cvs/repository

とすると、モジュールはこの/cvs/repository 以下に追加される

(b) ディレクトリCVSROOT
cvs initによって作成される。
CVSメタ情報が格納されている。

                                                                • -

サーバ側設定 (1) cvs init

                                                                • -

(1) ディレクトリ作成+所有・パーミッション設定
[root@MACHINE_NAME /]$ mkdir /cvs
[root@MACHINE_NAME /]$ chgrp cvs cvs
(注)cvsグループがない場合は作る
[root@MACHINE_NAME /]$ chmod 775 cvs
[cvs@MACHINE_NAME cvs]$ mkdir repository/framework


(2) cvs init
[cvs@MACHINE_NAME cvs]$ export CVSROOT=/cvs/repository/framework
[cvs@MACHINE_NAME cvs]$ cvs init

確認
/cvs/repository/framework/CVSROOT
ができていることを確認する。
できていない場合は
[cvs@MACHINE_NAME cvs]$ env | grep CVSROOT
環境変数CVSROOTが正しく設定されているかどうか確認

(3) パーミッション設定
[root@MACHINE_NAME framework]$ chmod g+w CVSROOT
[root@MACHINE_NAME framework]$ chmod g+s CVSROOT

(メモ)↑のchmod 775 cvs のため、(3)を行う前にすでにCVSROOTは775になっているはず。

□ モジュールのモードもこの設定である必要あり。

                                                                • -

サーバ側設定 (2) xinetd

                                                                • -

(注)「サーバ側設定(2)」はrootで作業

(1) xinetdの設定
> /etc/xinetd.d にファイル cvspserver を作成。内容は↓。

service cvspserver
{
socket_type = stream
protocol = tcp
wait = no
user = root
passenv =
server = /usr/bin/cvs
server_args = --allow-root= /cvs/repository/framework pserver -f
server_args = --allow-root=/cvs/repository/framework pserver -f
}

  • 取り消し線で消した箇所、間違えていました。"="のあとにスペースがあってはうまくいきません。正しくは、"="のあとすぐにリポジトリを指定します。


(メモ)複数のリポジトリを使う場合は server_args を↓のようにする
server_args = --allow-root=/home/pauljohn/cvsroot --allow-root=/home/pauljohn/cvsmisc pserver -f
出典)http://www.xinetd.org/faq.html#cvss

(2) services ファイルの編集
・今回/etc/services は触らず
既にcvspserverのエントリ(tcp, udpの合計2件)あることを確認したので触らない。

> cvspserver 2401/tcp #CVS client/server operations
> cvspserver 2401/udp #CVS client/server operations

(3) xinetdの再起動

> /etc/rc.d/init.d/xinetd restart

                                                                • -

サーバ側設定 (3) cvsuser作成

                                                                • -

(注)cvsユーザの作成には2種類ある。
1) OSユーザをCVSユーザとする方法
2) CVSメタ情報にCVSユーザ情報を登録する方法 ← 今回採用
より詳しくは↓
http://web.sfc.keio.ac.jp/~s95898ym/comp/cvs-pserver.html
今回の方針:
CVSメタ情報にCVSユーザを定義し、これらのCVSユーザは
OSユーザcvsの権限でcvs機能を実行する。
また、cvs機能はcvsグループに解放しておくので、cvsグループにさえ
所属していれば、OSユーザもcvs使える。

(1) CVSROOT/にpasswdファイルを作る
(2) CVSROOT/にpasswdファイルを編集

[cvs@MACHINE_NAME CVSROOT]# htpasswd -nb cvs_test_user cvs_test_user >> passwd
passwd中身はこんな感じ ↓
> cvs_test_user:暗号化されたパスワード

末尾にコロン追加
> cvs_test_user:暗号化されたパスワード:cvs

passwdファイルのコロン区切りの意味
①:②:③
①・・・ ユーザ名
②・・・ 暗号化されたパスワード
③・・・ どのOSユーザとしてcvs 機能を実行するか

この手順で必要ユーザ追加していく

                                                                • -

モジュールのインポート

                                                                • -

「インポート」というのは、バージョン管理関係のファイルが
何一つ入っていない普通のディレクトリ構造を、レポジトリに転送することです。
ただのコピーとは違って、CVSのためのいろいろな情報を記したファイルが作成されます。

1. 環境変数が↓のようになっていること確認
CVSROOT=/cvs/repository/framework

2. import
(今回は/cvs/work以下のディレクトリをリポジトリに登録する)

(今回のディレクトリ構造)
/cvs/
    +-- /repository/framework
                        +-- /CVSROOT/ ← cvs initによって作られる
                        +-- /build/projects/ ← importによって追加
                                        +-- /単位1/
                                        +-- /単位2/
                                        +-- /単位3/
/cvs/work/build/projects/単位1, 単位2

/cvs/work/build/ に移動し
cvs import -m -n "build" avendor start


参考URL:
http://www.netbeans.jp/support_mycvs2.htm
・・・ import の引数などの説明

                                                                • -

クライアントの作業(1) 接続確認

                                                                • -

(方法1) コマンドラインから
→ ログインできた。
> % cvs -d :pserver:cvs_test_user@161.93.85.114:/cvs/repository/framework login
> CVS password:


(方法2) WSADから
→ ログインできた。
[手順]
1. ウィンドウ > パースペクティブを開く > CVSリポジトリエクスプローラ
2. 開いた「CVSリポジトリエクスプローラー」上で
右クリック > 新規 > リポジトリーロケーション
3. 下記を入力
ホスト: 161.93.85.114
リポジトリーパス: /cvs/repository/framework
ユーザ名・パスワード: 適切な値
接続型: pserver
デフォルトポート使用
終了時の接続の妥当性検査にチェック(デフォルト)

                                                                • -

クライアントの作業(2) モジュールのチェックアウト

                                                                • -

[用語]
「チェックアウト」・・・
CVSサーバにあるリポジトリの内容をローカルにコピーして作業用コピーとすること

[手順] WSADのCVSクライアントを使う場合
CVSリポジトリエクスプローラー」でターゲットの
モジュールを選択 > 右クリック > プロジェクトとしてチェックアウト

                                                                • -

途中遭遇したエラー

                                                                • -

結論)下記エラーがでる場合は、↓二つの条件が満たされているかチェックする
条件1) CVSROOTディレクトリの親ディレクトリを xinetd で設定する
条件2) CVSROOTディレクトリの親ディレクトリを指定して login する

(pathは一例。本ドキュメントの設定とは違う。)
(1) no such repository (ログイン時)
ログイン時に
home/cvs/test_rep login: no such repository
(今回の原因)
xinetdに指定したディレクトリと違うディレクトリにloginしようとしていた

> % cvs -d :pserver:test_user@161.93.85.114:/home/cvs/test_rep/ login
↑タブを使うと/home/cvs/test_rep/のように後ろに/が入るが、これがあるとだめ

xinetd
> server_args = --allow-root= /home/cvs/test_rep pserver -f

(2) [サーバがエラーを報告しました No such file or directory](ログイン時。WSADをCVSクライアントとした場合)
ログイン時に↓ (WSADからの場合)コマンドラインからのloginでは何も言われず、あたかも成功したかのよう。
([サーバがエラーを報告しました No such file or directory])
Cannot access /home/cvs/test_rep/CVSROOT

(今回の原因)
xinetdに指定したディレクトリと同じディレクトリにloginしようとしていた(正しい操作)が、
ログイン対象のディレクトリに対して cvs init が行われていなかった(= CVSメタ情報を格納するCVSROOTディレクトリがなかった)
([サーバがエラーを報告しました No such file or directory])
Cannot access /home/cvs/test_rep/CVSROOT

                                                                • -

参考URL

                                                                • -

http://mink.phys.human.nagoya-u.ac.jp/~watanabe/tips/cvs.html
・・・ ただし、xinetdではなくinetd

http://web.sfc.keio.ac.jp/~s95898ym/comp/cvs-pserver.html
・・・ xinetdの設定方法。ユーザ作成方法。

http://www.naney.org/comp/cvs/faq/#startcvswithfile
・・・ CVS FAQ