CVS - 昔から、''csv''とよく書き間違える私なのだった。
目次
昔から、csvとよく書き間違える私なのだった。
発端
このところ、プログラムを作る時間が増えたので管理システムが欲しくなってきた。 その昔RCSに手を付けようと思ったが何となくプログラム自体書かなくなったので、そのまま手つかずに放置していたジャンルなのです。いいよね、リビジョン管理できるソフト
まずは使い方を覚えよう!おー!
あー、イロイロ
まず、サーバーだ
ファイルサーバは玄箱(debian)なので dselectでインストール。設定もしてくれた。楽ちん。 ついでにOpenSSHも入れて設定して、Telnetは、止めておく。よしよし。 ホストのキーと公開カギは、あ、勝手にできるのね。ありがとう。
昔一時つかっていたSSH1のキーは…バックアップの中ならあるけど掘るのが面倒なので新規作成。SSH2のキーも作る。HOMEはWindowsからもマウントできるのでそのまま使うことにする。
クライアント
WindowsXPなのでどれを入れるかほんの少し悩んだ…が 楽そうなので WinCVS(ごった煮) http://www.gembook.jp/tsum/page.pys
インストーラーのいう通り素直にインストール
SSHは、単体版かCYGNUSか…このホストはあまりUNIXな環境で使わないので単体版をインストールすることにする。
http://sshwindows.sourceforge.net/
メモ:これは、Cygwin.dllをつかっている
インストーラーつき。楽ちん
うむ、"C:\Program Files\OpenSSH\"にrootもどきができた。設定ファイルはetcの下
設定する。キーを作る。サーバに乗り入れてみる。よっしゃ
ではまた明日
今日です
何となく使ってみる
うむ、「CVSは、リポジトリを管理するソフト」だね。 ファイルのリビジョンは、ファイルごとにつくと…まとめてバージョンを管理する場合は…日付で呼ぶかまたはその時点にタグを打つのだね。…そんな感じだ。
枝を張ってサブリビジョンを管理できるね。ベンリだ。
リビジョン自体はRCSを呼ぶのか?…内蔵?…diffも内蔵?…よく分からん。 diffは、外部プログラムも呼べる?…ひとまず放っておこう。
えいと、まずやることは
- リポジトリを初期化する
cvs -d (リポジトリのパス) initよっしゃ、できた。ここにデータが溜まってゆくのだな。
- リポジトリに管理対象のディレクトリを登録する
cvs -d (リポジトリ) import (管理対象)入れた。ソースのデータはもういらないのか?…そうだね。バックアップして消す
- チェックアウトして作業コピーをとる
cvs [面倒なのでリポジトリ指定は以後 環境変数指定で省略] checkout (管理対象)
- 編集する
なんか書く。変える。換える。足す。捨てる。イロイロする
で、何ができますか? えーっと
- cvs add (新ファイル/ディレクトリ)
- cvs delete (ファイル)
- cvs diff (ファイル/ディレクトリ)
一人でつかっている分にはまずこのくらいか?…で
- コミットする
cvs commitコミットの別名はチェックイン(ci)または(com)よし、覚えた。
掃除をしたら次は、リモートの設定をしよう。 コミットさーン!ハーイ!
リモートの設定をしてみる
- サーバー側のSSHを設定
/etc/ssh/sshd_configを編集してsshdをリスタート
- sshで叩いて動作を確認 …した。良さそう
- WindowsからTTermProSSHでSSH1アクセス…届いた
- WindowsからターミナルのsshでSSH2アクセス…OK
ここまでの注意。SSH通信先の ~/.ssh/ に公開カギを置いておく事。(当たり前だけど) 現在の環境だと、通信元HOME と 通信先HOME が物理的に同じなのでネット経由で結局同じキーを参照している。やもすると別のホストを使うときに「うっかり転送を忘れ」て悩みそう。気がつかないで四苦八苦しそうな予感がイッパイ…よくあるので。
通信先のhomeに公開カギがないとセッションが成立しない!
- サーバ側のcvsを設定。 デーモンモードは無い。…でinetdまたはxinetdで呼ぶ。
- ポートを登録
/etc/servicesに…済んでた。インストールで設定されたらしい。
- 現在のサーバはinetdなので
/etc/inetd.confを編集してエントリを追加
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/cvs -f --allow-root=(リポジトリのパス) pserver
- inetdをリスタート
kill -HUP (inetdのpid)
- つないでみる
cvs -d :ext:わし@localhost:(リポジトリのパス) co (管理対象)おっけい。拾えたようである。
- pserverもつないでみる
cvs -d :pserver:わし@localhost:(リポジトリのパス) co (管理対象)
あら、ステータス1だ。エラー! なになに一回リモートのパスワードでログインしてみろ? たしか、設定ファイルでシステムユーザの認証を禁じたはずだから… ええーと…パスワードファイル作るんじゃ無かったか?作ってなかったな。そういえば
それじゃだめじゃん!
passwdファイル作ることにする。普通のやつかい ? httppasswdで良いのか ? 良さそう。
- passwd 作ってリポジトリの設定ファイル置き場に置く。
httpasswd (リポジトリのパス)/CVSROOT/passwd (わし)ついでにアノニマスとか作っておく。
httpasswd (リポジトリのパス)/CVSROOT/passwd anonimous
- できた。まずloginするらしい。つなぐ
cvs -d :pserver:わし@localhost:(リポジトリのパス) loginパスワード要求された。よしよし ためしにわざと違うパスワードを打ってみる。
******* cvs login: authorization failed:うむ、良さそう。ではもう一度
cvs -d :pserver:わし@localhost:(リポジトリのパス) login ****** (リポジトリのパス): no such repository
そんなリポジトリは無い! あれ? :ext: と同じリポジトリのはずだがつづりを間違えた ? 間違ってない。
いや待てよ、
- パスワードは要求されたリポジトリに保存してある。
- パスワード違いをきちんと「跳ね」た。(ということはpasswdを読んでいる) どうにゃっとるのだ?
何か見落とした?
ログ読んだ
うまくいった:ext:のときは、rootとして実行されてるみたい? そういえばinetdでは、root権限で起動した。たしか個人設定を無視するオプション -f をつけたような気もするよ。
- どうも手元の虎の巻によると。env -i でくるむと良いらしい。やってみる。
/etc/inetd.confをもいちど編集
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/bin/env -i /usr/bin/cvs -f --allow-root=(リポジトリのパス) pserver kill -HUP (inetdのpid)
- また試す
cvs -d :pserver:わし@localhost:(リポジトリのパス) login ******ん、何事もなく抜けた?
- 拾ってみる
cvs -d :pserver:わし@localhost:(リポジトリのパス) checkout (管理対象)おっけい。拾えたようである。
- Windowsからも拾ってみる ポチットな。…来たようだ。
よしひとまずセッテイ終わり?かな
ところで、これってどういう手順で通信しとるのだ?セッション張りっぱなし…ターミナルじゃあるまいしそんなわけなさそう。張りっぱなしならデーモンモードで動きそうなものだし。
虎の巻を読む。 何々?ログインするとローカルのhomeにパスワードを一時的に置いて、このファイルに書いてあるリポジトリに対してはセッションごとに毎回そのパスワードで接続をする…と
なるほど、ログアウトするとパスワードファイルからエントリが消えるのね。
ああ、あるです隠しファイル。む、windowsとサーバが同じhomeだからファイルとか共用になるんだね。大丈夫かな? …ま、しばらくつかってみましょう。だめなら何か別に分ければよし。問題なければこのままGOぢゃ!
メモ:
- 試験用のリポジトリとは別に本運用のできるディスクを用意すること。
- バックアップを自動化できるように用意すること。
本日のお勉強おしまい(感想…虎の巻きはベンリ)
お外からつないでみる
ちびっとルータに窓を明けて仕事場からつないでみる。と、つながらない?あれ?
ルータにNATだけ付けて、肝心のアクセスコントロールをしてませんでした
hosts.deny ALL : ALL通信できる理由なし。とほほ
許可した。 あれ?また駄目だ??
hosts.allow cvspserver :ALL…はい、この設定は、プロトコル名ではなくてプロセス名で指定しないと駄目でした。忘れてたよ。 わし、なんでプロトコル名だとか思っちゃったんでしょう?とほほ
書き換えた
hosts.allow (cvs起動スクリプト) : ALLどだ? つながったようでしゅ
ためしてみる
cvs login cvs co testCvs (編集する) cvs update
うっしゃ、大丈夫
わーいわーい
ブランチタグだ
ブランチタグを作った。虎の巻を読みつつブランチの直前にタグを打って
cvs tag root_of_REL01さらにブランチタグを作って枝を張ってみた
cvs tag -b REL01
うんこれで良いはずだ。
チェックアウトしてみる
cvs checkuot (モジュール)
うむ、拾いだした。
では、作業コピーをいったん解除して取りなおしてみる
cvs release -d (モジュール) cvs checkuot (モジュール)
よしよし、あれ? あああ!一緒のディレクトリに置いてあったcvs管理外のファイルとディレクトリが全滅しているよー。がちョーン!
別のバックアップから掘る とほほほほ
リリース時の -d オプションは モジュールのディレクトリごと 全消しなので 注意だ!
Powered by YukiWiki 2.1.2a / Modified by Nekomataya.