yk700101の日記: OpenMicroServer - sarge - cvs (ssh, WinCvs)
日記 by
yk700101
○概要
OpenMicroServer + Debian GNU/Linux 3.1(sarge)に
cvs (および ssh)をインストールしたときのメモ。
(クライアントからの動作確認は
Windows XP にインストールした WinCvs を使用。)
○前提
1. OpenMicroServer + Debian GNU/Linux 3.1(sarge) に
courier-pop と courier-imapd を インストールした後の環境を使用。
○目的
1. cvs を使ったファイル履歴管理の評価環境を構築する。
○cvs のインストール
apt-get install cvs
Where are your repositories?
(ここでリポジトリを指定して作成すると、
/etc/cvs-cron.conf に登録される。
pserver を使用する場合は、
cron で /etc/cron.weekly/cvs に従って処理が行われる模様。
)
→ /srv/data1/CVSRepository/initial
Do you wish to fix invalid repositories?
→ create
Should the CVS pserver be enabled?
(インターネット上に公開するわけではないので
pserver で十分な気がするが、
とりあえず pserver を使わずにやってみる。
)
→ No
#確認
cvs -v
○ssh のインストール
apt-get install ssh
Allow SSH protocol 2 only
→ Yes
Do you want /usr/lib/ssh-keysign to be installed SUID root?
(ホストベース認証を行うときは必要らしい。
今回は 多分必要ない。
)
→ No
Do you want to run the sshd server?
→ Yes
#確認
ps -C sshd
#設定の確認
cat /etc/ssh/sshd_config
# root でログオンできるようになっていたり、
# パスワード認証が有効になっていたりすると、
# あまり良くないらしい。
# さらに、 ssh でログオンできるユーザを特定(指定)したいものだが、
# 今回は気にしない。
○cvs 用ユーザの追加
export testusername=myuser
#(src グループに所属する必要あり。)
useradd -G src -m ${testusername}
passwd ${testusername}
Enter new UNIX password:
→ パスワードを入力する。
Retype new UNIX password:
→ 同じパスワードを入力する。
○リポジトリ作成(テスト用)
su - ${testusername}
export repository=/srv/data1/CVSRepository/test
export projectname=testproject
export testfilename=testfile.txt
#リポジトリ作成
cvs -d ${repository} init
○インポート
export tempdir=temp
#一時ディレクトリを作成して、
# ファイルを格納し、リポジトリに登録する。
mkdir ${tempdir}
cd ${tempdir}
echo '1' > ${testfilename}
cvs -d ${repository} \
import \
-m 'for test' \
${projectname} 'test-vendor' 'test-release'
#一時ディレクトリの削除
cd ..
rm -r ${tempdir}
○チェックアウト
cvs -d ${repository} \
checkout ${projectname}
○ファイルの更新
cd ${projectname}
#変更前の状態の確認
cvs log
cvs status
cvs update
cat ${testfilename}
#変更
echo '2' >> ${testfilename}
#変更後の状態の確認
cvs log
cvs status
cvs update
cat ${testfilename}
#変更点の確認
cvs diff
cvs diff -c
cvs diff --side-by-side
#変更点のコミット
cvs commit -m 'test change'
#コミットの確認
cvs log
cvs status
cvs update
○ファイルの追加
export testfilename2=testfile2.txt
echo 'a' > ${testfilename2}
#追加前の状態の確認
cvs log ${testfilename2}
cvs status ${testfilename2}
cvs update
#追加
cvs add ${testfilename2}
#コミット前の状態の確認
cvs log ${testfilename2}
cvs status ${testfilename2}
cvs update
#コミット
cvs commit -m 'test add' ${testfilename2}
#コミット後の状態の確認
cvs log ${testfilename2}
cvs status ${testfilename2}
cvs update
○ファイルの削除
#(注:削除取り消しは、cvs add で行う。)
cvs remove -f ${testfilename2}
#コミット前の状態の確認
cvs log ${testfilename2}
cvs status ${testfilename2}
cvs update
#コミット
cvs commit -m 'test remove' ${testfilename2}
#コミット後の状態の確認
cvs log ${testfilename2}
cvs status ${testfilename2}
cvs update
○サンドボックスの削除
cd
cvs -d ${repository} release -d ${projectname}
Are you sure you want to release (and delete) directory
→ y
○ssh 経由での操作
export repository_ext=:ext:${testusername}@OMS${repository}
#--------------------
# 公開鍵認証の準備
#--------------------
#鍵ペアの作成
ssh-keygen -t rsa
Enter file in which to save the key (/home/myuser/.ssh/id_rsa):
→ (Return)
Enter passphrase (empty for no passphrase):
→ パスフレーズを入力する。
Enter same passphrase again:
→ 同じパスフレーズを入力する。
#作成した公開鍵のファイルを元に
# 認証済み公開キーを格納するファイルを作成する。
cp .ssh/id_rsa.pub .ssh/authorized_keys
#ssh を通じた操作を
# 初回のパスフレーズのみの入力で済ませるために、
# ssh-agent を起動する。
eval `ssh-agent`
#秘密鍵を読み込む
ssh-add
Enter passphrase for /home/myuser/.ssh/id_rsa:
→ パスフレーズを入力する。
#--------------------
# ssh 経由での操作
#--------------------
#チェックアウト
cvs -d ${repository_ext} \
checkout ${projectname}
Are you sure you want to continue connecting (yes/no)?
→ yes
#サンドボックスの削除
cvs -d ${repository_ext} release -d ${projectname}
cvs -d ${repository_ext} \
checkout ${projectname}
Are you sure you want to release (and delete) directory
→ y
○WinCvs(2.0.2.4) から ssh 経由での操作
(注:
試用中。
ASCII なら大丈夫だと思われるが、
日本語が使えるものかどうか良く分からない。
)
以下のサイトから WinCvs をダウンロード。
・CvsGui
http://www.wincvs.org/index.html
SSH 関連のドキュメントは古い模様で、
設定画面などが WinCvs 2.0.2.4 と異なっているので、
あまり参考にならなかった。
リポジトリに
:ext:myuser@OMS:/srv/data1/CVSRepository/test
を指定してチェックアウトを実行すると、
以下のエラーメッセージが出力される。
cvs diff: warning: unrecognized response `'ssh' は、内部コマンドまたは外部コマンド、
' from cvs server
cvs diff: warning: unrecognized response `操作可能なプログラムまたはバッチ ファイルとして認識されていません。
' from cvs server
cvs [diff aborted]: end of file from server (consult above messages if any)
Windows 用の ssh 関連コマンドを得るために
以下のサイトから、
・PuTTY: a free telnet/ssh client
http://www.chiark.greenend.org.uk/~sgtatham/putty/
以下のファイル(Version 0.58)をダウンロードし、
C:\yk_prog\Putty
に格納する。
plink.exe
→ ssh コマンド本体(?)
pageant.exe
→ 秘密鍵を使用する際のパスフレーズの入力を
最初の1回のみにするためのもの。
puttygen.exe
→ putty のツールで使用するフォーマットの
秘密鍵と公開鍵を作成するためのもの。
ssh コマンドの場所を設定する画面が見つからなかったので、
環境変数
CVS_RSH
に plink.exe のフルパス
C:\yk_prog\Putty\plink.exe
を指定する。
WinCvs を再起動後、
再度 チェックアウトを実行すると、
以下のエラーメッセージが出力され続ける。
cvs update: warning: unrecognized response `Password:
' from cvs server
パスワードを入力しなくても
ssh を実行できるようにする必要があるようなので、
まず、パスワード認証の代わりに公開鍵認証で認証を行うようにする。
puttygen.exe を実行して、秘密鍵と公開鍵を作成する。
(マウスをぐるぐる回すと、早く処理が終わる模様。)
作成が完了したら、パスフレーズを入力し、
秘密鍵を test.ppk として保存する。
画面上に、OpenSSH 用のフォーマットの公開鍵(鍵の値は同じ)
が表示されているので、
これをすべてコピーし、
myuser@OMS の
~/.ssh/authorized_keys
に貼り付ける。
(最終行に追加する。)
pageant.exe を test.ppk を引数に指定して実行する。
(パスフレーズを入力する。)
再度 チェックアウトを実行すると、処理が成功する。
・検討中の事項
日本語を含むテキストファイル(UTF-8, SJIS, EUC)はバイナリファイルと
して取り扱われる?
(警告がでる。)
でも、テキストファイルとして格納して、
サーバ側で
cvs annotate
を実行すると行ごとの変更が認識されているような気がする。
日本語のファイル名は、試していない。
日本語のコメントは SJIS で記録される模様。
・参考
・PuTTYを使ったCVS利用法
http://rumble-jp.osdn.jp/putty-howto/putty-doc.html
○テストの後始末
# myuser から root に戻る。
exit
#ユーザの削除
# 削除できない場合は、
# 「「ログインしていないユーザを削除できない」トラブル対応」
# を参照。
userdel -r myuser
#リポジトリの削除
rm -r /srv/data1/CVSRepository/test/
○「ログインしていないユーザを削除できない」トラブル対応
・現象
削除対象のユーザがログインしていないにもかかわらず、
以下のコマンドを実行すると、
userdel -r myuser
以下のエラーメッセージが出力されて、
userdel: user myuser is currently logged in
ユーザを削除できない。
・再現手順
1.
logon myuser
を実行する。
2.
exit
または、
logout
を実行する。
3.
users
または、
who
を実行すると、
myuser
が出力される。
・原因
/var/run/utmp
になぜかユーザ情報が残ってしまうのが原因の模様。
(ユーザ情報が残ってしまう根本的な原因については、
調査をあきらめた。)
・対処
login root
または、
ssh root@localhost
して
exit
すれば、
myuser
の情報は消去され、代わりに
root
の情報が残る。
(
login で残った場合は login、
ssh で残った場合は ssh
を別のユーザで実行すればいい模様。
恐らく、telnet などでも同様と思われる。
)
・参考
・[debian-users:34325] ログオフ したユーザが残る
http://lists.debian.or.jp/debian-users/200209/msg00002.html
→ 解決していない模様。
・ローカルのドキュメント
man utmp
・ソースコード
coreutils, passwd, libc6
○参考
・ローカルのドキュメント
/usr/share/doc/cvs/README.Debian
/usr/share/doc/cvs/contrib/README.gz
○更新履歴
2006/05/18 作成
以上。
OpenMicroServer + Debian GNU/Linux 3.1(sarge)に
cvs (および ssh)をインストールしたときのメモ。
(クライアントからの動作確認は
Windows XP にインストールした WinCvs を使用。)
○前提
1. OpenMicroServer + Debian GNU/Linux 3.1(sarge) に
courier-pop と courier-imapd を インストールした後の環境を使用。
○目的
1. cvs を使ったファイル履歴管理の評価環境を構築する。
○cvs のインストール
apt-get install cvs
Where are your repositories?
(ここでリポジトリを指定して作成すると、
/etc/cvs-cron.conf に登録される。
pserver を使用する場合は、
cron で /etc/cron.weekly/cvs に従って処理が行われる模様。
)
→ /srv/data1/CVSRepository/initial
Do you wish to fix invalid repositories?
→ create
Should the CVS pserver be enabled?
(インターネット上に公開するわけではないので
pserver で十分な気がするが、
とりあえず pserver を使わずにやってみる。
)
→ No
#確認
cvs -v
○ssh のインストール
apt-get install ssh
Allow SSH protocol 2 only
→ Yes
Do you want /usr/lib/ssh-keysign to be installed SUID root?
(ホストベース認証を行うときは必要らしい。
今回は 多分必要ない。
)
→ No
Do you want to run the sshd server?
→ Yes
#確認
ps -C sshd
#設定の確認
cat /etc/ssh/sshd_config
# root でログオンできるようになっていたり、
# パスワード認証が有効になっていたりすると、
# あまり良くないらしい。
# さらに、 ssh でログオンできるユーザを特定(指定)したいものだが、
# 今回は気にしない。
○cvs 用ユーザの追加
export testusername=myuser
#(src グループに所属する必要あり。)
useradd -G src -m ${testusername}
passwd ${testusername}
Enter new UNIX password:
→ パスワードを入力する。
Retype new UNIX password:
→ 同じパスワードを入力する。
○リポジトリ作成(テスト用)
su - ${testusername}
export repository=/srv/data1/CVSRepository/test
export projectname=testproject
export testfilename=testfile.txt
#リポジトリ作成
cvs -d ${repository} init
○インポート
export tempdir=temp
#一時ディレクトリを作成して、
# ファイルを格納し、リポジトリに登録する。
mkdir ${tempdir}
cd ${tempdir}
echo '1' > ${testfilename}
cvs -d ${repository} \
import \
-m 'for test' \
${projectname} 'test-vendor' 'test-release'
#一時ディレクトリの削除
cd ..
rm -r ${tempdir}
○チェックアウト
cvs -d ${repository} \
checkout ${projectname}
○ファイルの更新
cd ${projectname}
#変更前の状態の確認
cvs log
cvs status
cvs update
cat ${testfilename}
#変更
echo '2' >> ${testfilename}
#変更後の状態の確認
cvs log
cvs status
cvs update
cat ${testfilename}
#変更点の確認
cvs diff
cvs diff -c
cvs diff --side-by-side
#変更点のコミット
cvs commit -m 'test change'
#コミットの確認
cvs log
cvs status
cvs update
○ファイルの追加
export testfilename2=testfile2.txt
echo 'a' > ${testfilename2}
#追加前の状態の確認
cvs log ${testfilename2}
cvs status ${testfilename2}
cvs update
#追加
cvs add ${testfilename2}
#コミット前の状態の確認
cvs log ${testfilename2}
cvs status ${testfilename2}
cvs update
#コミット
cvs commit -m 'test add' ${testfilename2}
#コミット後の状態の確認
cvs log ${testfilename2}
cvs status ${testfilename2}
cvs update
○ファイルの削除
#(注:削除取り消しは、cvs add で行う。)
cvs remove -f ${testfilename2}
#コミット前の状態の確認
cvs log ${testfilename2}
cvs status ${testfilename2}
cvs update
#コミット
cvs commit -m 'test remove' ${testfilename2}
#コミット後の状態の確認
cvs log ${testfilename2}
cvs status ${testfilename2}
cvs update
○サンドボックスの削除
cd
cvs -d ${repository} release -d ${projectname}
Are you sure you want to release (and delete) directory
→ y
○ssh 経由での操作
export repository_ext=:ext:${testusername}@OMS${repository}
#--------------------
# 公開鍵認証の準備
#--------------------
#鍵ペアの作成
ssh-keygen -t rsa
Enter file in which to save the key (/home/myuser/.ssh/id_rsa):
→ (Return)
Enter passphrase (empty for no passphrase):
→ パスフレーズを入力する。
Enter same passphrase again:
→ 同じパスフレーズを入力する。
#作成した公開鍵のファイルを元に
# 認証済み公開キーを格納するファイルを作成する。
cp .ssh/id_rsa.pub .ssh/authorized_keys
#ssh を通じた操作を
# 初回のパスフレーズのみの入力で済ませるために、
# ssh-agent を起動する。
eval `ssh-agent`
#秘密鍵を読み込む
ssh-add
Enter passphrase for /home/myuser/.ssh/id_rsa:
→ パスフレーズを入力する。
#--------------------
# ssh 経由での操作
#--------------------
#チェックアウト
cvs -d ${repository_ext} \
checkout ${projectname}
Are you sure you want to continue connecting (yes/no)?
→ yes
#サンドボックスの削除
cvs -d ${repository_ext} release -d ${projectname}
cvs -d ${repository_ext} \
checkout ${projectname}
Are you sure you want to release (and delete) directory
→ y
○WinCvs(2.0.2.4) から ssh 経由での操作
(注:
試用中。
ASCII なら大丈夫だと思われるが、
日本語が使えるものかどうか良く分からない。
)
以下のサイトから WinCvs をダウンロード。
・CvsGui
http://www.wincvs.org/index.html
SSH 関連のドキュメントは古い模様で、
設定画面などが WinCvs 2.0.2.4 と異なっているので、
あまり参考にならなかった。
リポジトリに
:ext:myuser@OMS:/srv/data1/CVSRepository/test
を指定してチェックアウトを実行すると、
以下のエラーメッセージが出力される。
cvs diff: warning: unrecognized response `'ssh' は、内部コマンドまたは外部コマンド、
' from cvs server
cvs diff: warning: unrecognized response `操作可能なプログラムまたはバッチ ファイルとして認識されていません。
' from cvs server
cvs [diff aborted]: end of file from server (consult above messages if any)
Windows 用の ssh 関連コマンドを得るために
以下のサイトから、
・PuTTY: a free telnet/ssh client
http://www.chiark.greenend.org.uk/~sgtatham/putty/
以下のファイル(Version 0.58)をダウンロードし、
C:\yk_prog\Putty
に格納する。
plink.exe
→ ssh コマンド本体(?)
pageant.exe
→ 秘密鍵を使用する際のパスフレーズの入力を
最初の1回のみにするためのもの。
puttygen.exe
→ putty のツールで使用するフォーマットの
秘密鍵と公開鍵を作成するためのもの。
ssh コマンドの場所を設定する画面が見つからなかったので、
環境変数
CVS_RSH
に plink.exe のフルパス
C:\yk_prog\Putty\plink.exe
を指定する。
WinCvs を再起動後、
再度 チェックアウトを実行すると、
以下のエラーメッセージが出力され続ける。
cvs update: warning: unrecognized response `Password:
' from cvs server
パスワードを入力しなくても
ssh を実行できるようにする必要があるようなので、
まず、パスワード認証の代わりに公開鍵認証で認証を行うようにする。
puttygen.exe を実行して、秘密鍵と公開鍵を作成する。
(マウスをぐるぐる回すと、早く処理が終わる模様。)
作成が完了したら、パスフレーズを入力し、
秘密鍵を test.ppk として保存する。
画面上に、OpenSSH 用のフォーマットの公開鍵(鍵の値は同じ)
が表示されているので、
これをすべてコピーし、
myuser@OMS の
~/.ssh/authorized_keys
に貼り付ける。
(最終行に追加する。)
pageant.exe を test.ppk を引数に指定して実行する。
(パスフレーズを入力する。)
再度 チェックアウトを実行すると、処理が成功する。
・検討中の事項
日本語を含むテキストファイル(UTF-8, SJIS, EUC)はバイナリファイルと
して取り扱われる?
(警告がでる。)
でも、テキストファイルとして格納して、
サーバ側で
cvs annotate
を実行すると行ごとの変更が認識されているような気がする。
日本語のファイル名は、試していない。
日本語のコメントは SJIS で記録される模様。
・参考
・PuTTYを使ったCVS利用法
http://rumble-jp.osdn.jp/putty-howto/putty-doc.html
○テストの後始末
# myuser から root に戻る。
exit
#ユーザの削除
# 削除できない場合は、
# 「「ログインしていないユーザを削除できない」トラブル対応」
# を参照。
userdel -r myuser
#リポジトリの削除
rm -r /srv/data1/CVSRepository/test/
○「ログインしていないユーザを削除できない」トラブル対応
・現象
削除対象のユーザがログインしていないにもかかわらず、
以下のコマンドを実行すると、
userdel -r myuser
以下のエラーメッセージが出力されて、
userdel: user myuser is currently logged in
ユーザを削除できない。
・再現手順
1.
logon myuser
を実行する。
2.
exit
または、
logout
を実行する。
3.
users
または、
who
を実行すると、
myuser
が出力される。
・原因
/var/run/utmp
になぜかユーザ情報が残ってしまうのが原因の模様。
(ユーザ情報が残ってしまう根本的な原因については、
調査をあきらめた。)
・対処
login root
または、
ssh root@localhost
して
exit
すれば、
myuser
の情報は消去され、代わりに
root
の情報が残る。
(
login で残った場合は login、
ssh で残った場合は ssh
を別のユーザで実行すればいい模様。
恐らく、telnet などでも同様と思われる。
)
・参考
・[debian-users:34325] ログオフ したユーザが残る
http://lists.debian.or.jp/debian-users/200209/msg00002.html
→ 解決していない模様。
・ローカルのドキュメント
man utmp
・ソースコード
coreutils, passwd, libc6
○参考
・ローカルのドキュメント
/usr/share/doc/cvs/README.Debian
/usr/share/doc/cvs/contrib/README.gz
○更新履歴
2006/05/18 作成
以上。
OpenMicroServer - sarge - cvs (ssh, WinCvs) More ログイン