sccsでコンフィグファイル管理

サーバー運用がかなり厳しいので寄付をしてくれる人がいたらこちら
メインPCもボロボロになってきたので、ついにほしいものリスト公開

バージョン管理といえばCVSとかここでもやってるSubversionが有名ですが
かなり古いタイプのrcsとかよりももっと古いかもしれないsccsという
バージョン管理ソフトを使ってみます。

用途はアプリケーションソースのバージョン管理ではなく、
httpd等のコンフィグファイルのバージョン管理です。
いちいちコピーしてバックアップするとわけわかめになりがちなので
これを使ってすっきりさせます。

コンフィグファイルは基本的に/usr/local/confなどに全部おいて
設定を変えたら各サービスの所定の位置へ上書きコピーをする方法をとります。

HP: http://cssc.sourceforge.net/

いつの間にかGNUで管理しているようで、http://ftp.gnu.org/gnu/cssc/に移動していました。
バージョンも1.3.0になってましたよ。。

インストール

cd /usr/local/src
wget http://jaist.dl.sourceforge.net/sourceforge/cssc/CSSC-1.0.1.tar.gz
tar zvxf CSSC-1.0.1.tar.gz
cd CSSC-1.0.1
./configure --enable-binary
make
make install

PATHの設定

vi ~/.bash_profile

PATH=$PATH:/usr/local/libexec/cssc

コマンドの説明

SCCSコマンド説明
adminSCCSファイルの生成と管理を行う。
cdcSCCSファイル内にあるデルタの注釈を変更する。
deltaソースファイルを元に、SCCSファイルを修正する。
getSCCSファイルからソースファイルを復元する。
helpSCCSコマンドの使用方法を示す。
prsSCCSの管理レコード情報を出力する。
rmdelSCCSファイルからデルタを取り除く。
sact現在編集中のSCCSファイルの状況を出力する。
sccsdiffSCCSファイル中の2つのデルタを比較し、違いを出力する。
ungetgetコマンドをキャンセルする。
val渡された引数を元に、そのSCCSファイルが
有効なものかどうかをチェックする。
whatSCCSのID情報からソースファイルやプロダクトを検索する。

 

使い方(ファイルの説明)

s.xxxファイルバージョン管理を行うファイル1つにつき、
バージョン管理用のファイル1つを用意する。
このファイルをSファイルと呼ぶ。
p.xxxファイルget -e コマンドによって作られる一時ファイル。
ファイル編集の為に復元される。
deltaコマンドの実行により、自動的に削除される。
delta前のバージョンと現在のバージョンの差異の部分。

 

sファイルの作成

touch test.txt
admin -itest.txt s.test.txt
admin: warning: s.test.txt: No id keywords.

ls
test.txt s.test.txt
rm test.txt

確認

prs s.test.txt

prs s.smb.conf.bak
s.test.txt:

D 1.1 06/07/27 08:19:38 root 1 0 00053/00000/00000
MRs:
COMMENTS:
date and time created 06/07/27 08:19:38 by root

ファイルの取り出しとデルタの登録

get -e s.test.txt
1.1
new delta 1.2
xx lines

ls
test.txt p.test.txt s.test.txt

変更をくわえたら

delta s.test.txt
comments? (コメントを適当にいれる)
delta: warning: test.txt: No id keywords.
1.2
1 inserted
0 deleted
0 unchanged

ls
s.test.txt

バージョン番号について

SID:SCCS IDentification(SCCS識別文字列)の略。
Sファイルに登録されている、それぞれのデルタを識別する為の番号で、
このSIDを使って扱うバージョンを指定する。

形式1リリース番号.レベル番号
形式2リリース番号.レベル番号.分岐番号.一連番号
 R.L.B.S

リリース番号の変更

get -e -r2 s.test.txt
1.2
new delta 2.1
xx lines

特定バージョンの取り出し

get -rSID s.test.txt
形式1 リリース番号
形式2 リリース番号.レベル番号
形式3 リリース番号.レベル番号.分岐番号
形式4 リリース番号.レベル番号.分岐番号.一連番号
*形式1、3は最後の部分を省略していて、
リリース番号.MAXレベル番号のバージョンが取り出される。

get -r1 s.test.txt
1.3
xx lines

分岐バージョンの作成

get -e -r1.2 s.test.txt
1.2
new delta 1.2.1.1
xx lines

get -e コマンドの取り消し

unget s.test.txt

*Sファイルから取り出されたファイルと、pファイルが削除される。

ヘルプ機能

メッセージ番号
SCCS関連コマンドでは、エラーメッセージの最後に 例えば
(cm7)のような括弧で括られた文字と数字が表示される

help メッセージ番号
help コマンド名

メッセージ番号を指定するとエラーの詳細が、コマンド名を指定した場合は
コマンドの入力形式が指定される。コマンド名を指定したとき出力される
[](ブラケット)で括られた部分は省略可能。

コメントの表示と変更
deltaコマンド実行時に登録したコメントを変更する。

cdc -rSID -y"×××" s.test.txt

*コメントは変更前のもの、変更後のもの両方が表示される。

1.1のデルタにコメントをつけたい時。

cdc -r1.1 s.test.txt
admin -itest.txt -y"×××" s.test.txt

デルタの整理
デルタを削除する時。

rmdel -rSID s.test.txt

*ここで指定できるSIDは、最新のバージョン或いは
分岐バージョンの末端のSIDのみ。

IDキーワード
SCCSで管理するファイルの中に、バージョン管理に関する情報を
埋め込む為に利用。

%A%IDキーワード%Z%%Y% %M% %I%%Z%の並びと同じ。
%B%分岐番号
%C%ファイルの行番号
%D%年/月/日の形式の日付
%E%最新のデルタが作成された年/月/日
%F%Sファイル名
%G%最新のデルタが作成された月/日/年
%H%月/日/年の形式の日付
%I%デルタのSID
%L%レベル番号
%M%Sファイル中のMフラグの値
%P%Sファイルの絶対パス名
%Q%Sファイル中のqフラグの値
%R%リリース番号
%S%一連番号
%T%現在の時刻
%U%最新のデルタが作成された時刻
%W%IDキーワード%Z%%M%<タブ>%I%の並びと同じ
%Y%Sファイル中のtフラグの値
%Z%文字列 ”@(#)”

チェックサムの修正
SCCSファイルに長い間アクセスしなかったり、他のシステムからファイルを変換
した場合に、getコマンドによるファイルの復元ができないことがある。
そういう時には、チェックサムを修正する。

admin -z S.file

チェックサムが正しいかどうかを確認するには、以下のコマンドを実行する。

admin -h S.file

実際にやる場合の一連の流れ(おさらい)

cd /usr/local/conf
cp /usr/local/apache2/conf/httpd.conf .
admin -ihttpd.conf s.httpd.conf
admin: warning: s.httpd.conf: No id keywords.

rm httpd.conf

ls
s.httpd.conf

get -e s.httpd.conf

ls
httpd.conf p.httpd.conf s.httpd.conf

vi httpd.conf
~~~
delta s.httpd.conf
comments? test
delta: warning: httpd.conf: No id keywords.
1.2
1 inserted
0 deleted
0 unchanged

ls
s.httpd.conf

get s.httpd.conf
get: warning: s.httpd.conf: No id keywords.
1.2
xxx lines

ls
httpd.conf s.httpd.conf

cp httpd.conf /usr/local/apache2/conf

こんな感じで設定ファイルの管理を行っていきましょう?

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
CAPTCHA
また変更しました
Fill in the blank.