BLOGTIMES
2005/08/23

'root' is not allowed to commit filesと言われたら

  SourceControlManagement 
このエントリーをはてなブックマークに追加

CVSのようなバージョン管理システムに慣れてくると、通常のソースコードだけでなくてサーバの設定ファイルなんかも入れたくなってきます。最近、httpd.confとか、php.iniなんかをCVSリポジトリに突っ込んで管理するようになりました。たくさんのサーバの管理とかやっていたりすると設定ファイルが集中管理と配布ができるのでとっても快適です。

そうするとちょっと不便に感じるのが、CVSがデフォルトでrootでのコミットを許していないことです*1。でも、いちいちsuするのは正直ちょっと面倒くさい。タイトルの「'root' is not allowed to commit files」はこれを強行しようとすると表示されるエラーメッセージです。

CVS--Concurrent Versions System v1.11.17: Troubleshooting

'root' is not allowed to commit files
永続する変更を格納するときに、CVS は誰が変更を格納したかの ログのエントリを書きます。変更を "root" として ("su" や他の root 権限を与えるプログラムを使わないで) 格納 しようとしているときは、CVS は誰が実際に変更を行なったのかを 知ることができません。ですから、デフォルトでは CVS は "root" としてログインしているユーザからの変更の格納は許可していません。 (このオプションは `configure' に --enable-rootcommit オプション を指定して CVS を再コンパイルすることで無効にできます。 システムによっては、CVS をビルドする前 に `config.h' ファイルを 編集することになります。)

マニュアルを読んで分かったのは、

・誰がソースコードを変更したのか分からなくなるためであって、それ以上の理由はなさそう
・--enable-rootcommitを指定してリコンパイルすればcommitできるようになる

ということです。そもそも、僕は設定ファイルのサーバ間の同期と更新履歴がほしいだけですし、誰がファイルを変更したかについてはログに頼る必要もなく分かる状況にあるので、rootでコミットできてしまうデメリットはなさそうなので、cvsを入れなおしてみることにしました。

早速リコンパイルしてみる

今回のサーバはCVSをrpmでインストールしてあるので、アンインストールしてからソースからコンパイルしてインストールなんて野暮なことをせずに、rpmを使ってこれを入れ替えしてみようと思います。以下は手順の備忘録。他のRPMにも応用可能だと思います。

1.使っているCVSのrpmのバージョンを確認

[root@hoge ~]# rpm -qa | grep cvs
cvs-1.11.17-6.FC3

今回のインストール済みのcvsはcvs-1.11.17-6.FC3とわかります。

2.rpmfind.netでsrpmを探してダウンロード

rpmfind.netに行ってcvsで検索をかけて、srpmを探す。
今回の場合はcvs-1.11.17-6.FC3.src.rpmなので、これをダウンロード。

3.srpmをサーバにインストール

[root@hoge ~]# rpm -ivh cvs-1.11.17-6.FC3.src.rpm

こうすることでrootユーザの場合には、/usr/src/redhat/SPECS以下にSPECファイルと/usr/src/redhat/SOURCESにソースファイル、patch類がインストールされる。

4.SPECにコンパイルオプションを追加

[root@hoge ~]# cd /usr/src/redhat/SPECS
[root@hoge SPECS]# vi cvs.spec

specファイルを開いて、コンパイルオプションを追加する。具体的には、%configureをサーチして、その直後に--enable-rootcommitを追加。

本当はバージョンとかも変えたほうがいいんでしょうが、面倒なので今回はそのまま。

5.rpmをビルド

[root@hoge SPECS]# rpmbuild -ba cvs.spec

これでrpmのビルドが行われ、成功すると/usr/src/redhat/RPMS/i386以下にrpmが生成される。

6.すでにインストール済みのCVSをアンインストール

[root@hoge i386]# rpm -e cvs-1.11.17-6.FC3

今回はバージョンが全く一緒なので、アンインストールしないとコンフリクトしているといわれてしまうので。

7.新しく作ったrpmをインストール

[root@hoge i386]# rpm -ivh cvs-1.11.17-6.FC3.i386.rpm

エラーが出なければ無事終了。

参考

エンタープライズ:特集:第2回 RPM活用のステップアップ-SRPMリビルドとコンパイルマスター (1/6)

  • *1: できないのはcommitだけでupdateとかcheckoutはできる。

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/133
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン