リビジョン管理rcsのすすめ(xxx.conf.20130829とかはもう止めよう)

Pocket

 

一人だけで管理しているサーバの設定ファイルを更新するとき、皆さんはどのように管理しているだろうか。
私は以下のようにしていた。
例えば、httpd.confを2013/8/25に変更しようとするとき。

 

経験のある方はご存じだろうが、長い間これを続けると、ディレクトリが散らかって酷い事になる。

ではバージョン管理を導入すべきか?
でも、一人で管理しているサーバなのに、わざわざsubversionを入れる?それはちょっと。

というのが長らくの悩みであったのだが、実はrcsという簡便なリビジョン管理ツールがあることを知った。今さらではあるが。
しかし、これがまた実に快適であった。
快適すぎて、今ではどこのディレクトリでもRCSディレクトリ(後述)を掘ってしまうくらいになってしまった。

そんなRCSについて以下に記す。

RCSとは。

RCSとはRevision Control System
きわめて軽量単純なGNU製のリビジョン管理システムである。
一人で使う分には十分(いちおう、ロック機能はあるよ!)。
だいたいのUNIX系OSには最初から入っている。
FreeBSDはベースシステムに入っているので、インストール不要。これはポイント。
もちろんLinuxにも(Redhatの5にあることは確認)

 

コマンドの使い方を示す。FreeBSD環境下のもの。
Linux向けmanはこちら。
http://linuxjm.sourceforge.jp/html/GNU_rcs/man1/co.1.html

 

RCSのコマンド

使うコマンドはおおよそ以下のようなもの。
詳しくはman。

 

RCSへの登録

ためしに、/etc/rc.confを、RCSで管理してみる。
最初にやることはRCSに登録すること。
ci(check in)コマンドを使う。
ciにrc.confを渡してやるだけ。

初回は「ファイルの説明を入れろ」と聞いてくるので、”System Setting file”などと入れてみる。
ドット「.」を入れれば完了。

 

最初のバージョンは1.1になる。

初回チェックインの注意

驚くことに、初めてチェックインするとファイルが消える。
代わりと言ってはなんだが、ファイル名末尾に「,v」と付いたファイルが現れる。

 

RCSはそれぞれのファイルを、この「,v」ファイルで管理しているのである。
しかしrc.confが無くなられては困る。
そこでco(check out)コマンドにより、「,v」からrc.confを取り出す。

 

並べてみると「,v」には管理情報が含まれているせいでサイズが少し増えている。

しかしちょっと待て。

「,v」が散らかる→RCSディレクトリで解決

新しいファイルをRCSに登録する都度、「,v」が増えていくのではたまらない。
しかし、そこはさすがに考えられていて、同じディレクトリにRCSというディレクトリがあれば、その下に「,v」を作ってくれる。
さきほど作ったrc.conf,vを消してから試してみる。

 

と、ご覧の通り/etc/RCSの下に「,v」が作られる。
こうしておけば「,v」ファイルが散らかって困ることはない。
忘れずにチェックアウト。
RCS/rc.conf,vから取り出されていることが分かる。

 

ファイルの更新(チェックアウト)

今度はファイルを更新してみる。
修正したファイルをチェックイン(ci)するだけなのだが、それに先立つチェックアウト(co)の時に考慮すべきことがある。
それはファイルのロック。

単にcoしただけのrc.confのパーミッションを見てみると、読み取り専用(444)になってしまっている(本来は644)。

 

なにも無計画にしているわけではない。
「RCSで管理しているファイルを迂闊に書き換えないように」というRCS師匠のありがたい配慮である。
これを避けるには、ファイルのロックをしてからチェックアウトをすればよい。
coの際に-lオプション(lock)を与えるだけ。

 

(locked)という表示が増えている。
また、パーミッションも644になっている。
これでファイル変更の準備ができた。

 

ファイルの更新(チェックイン)

修正が済んだらチェックイン。
チェックアウトの時と同じように、ロックの考慮が必要。
端的に言えばロックを解除する。
ciの際に-uオプション(unlock)を与える。

 

log message、つまり修正内容の記入が求められるので書き入れたのちドット「.」で終了。
そしてロック解除したために、再びファイルのバーミッションが444に戻っている。

 

履歴の確認

RCSで管理しているファイルに対しrlogを発行すると履歴が表示される。

 

 

revisoin 1.2では9行追加されていることを示している。
デフォルトではタイムスタンプがUTC。
これは分かりにくいので、ローカルタイムで表示する。
そのためには-zLTを与える。

 

 

差分の確認

二つのバージョン間の差分を確認するには、rcsdiffを使う。

 

 

特定のバージョンを取り出す。

coに-rオプションでバージョンナンバを指定する。
1.1を取り出したいなら-r1.1。

 

しかしこれでは手元にあるファイルが上書きされる。
都合が悪い場合には-pオプションを使う。
-pオプションは結果を標準出力に表示させるもの。

 

ident文字列の埋め込み

ファイルを特定しやすくするための仕組みがident文字列。
ある文字列を埋め込んでおくと、RCSが自動的に置換・更新をしてくれる。
実際に見てもらった方が早い。

 

rc.confに埋め込んでみる。
ident文字列には何種類かあるが、ここでは「$Id$」を使う。

しかし、$Id$といきなり書いてはいけない。コメントとして埋め込もう。
すなわち、#のあとに続ける。
(同様に、たとえばxmlなら”<!–“と”–>”の間、というようにフォーマットに合わせたコメント文に埋め込むとよい)

rc.confの例

 

これをチェックインすると、自動的に以下のように変換してくれる。

 

これは便利である。
実はこの文字列、よく見かけたのだが、やっとその秘密が分かった。

しかしタイムスタンプはUTCである。
チェックインのときに-zLTと指定すればローカルタイムで置換してくれる。

 

ident文字列のちょっとしたノウハウ

ident文字列の場所はどこでもよい。
しかし、1行目か2行目がよいでしょう。

ident文字列はファイルのIDとして埋め込んでいる。
IDの場所がバージョンごとに違うと、のちのち差分を確認するときに見にくくなってしまうから。

 

No tags for this post.

One comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください