バージョン管理 - Subversion - コピーで苦労した話
1. 概要 これ、解決方法が、「Subversion」の話ではなかったので、ここに書くべきか迷いましたが、「Subversion」のリポジトリをコピーしたときに苦労した話ですので、とりあえず、ここに書いて、機会があれば「Apache」あたりにも書くかもしれません。 2. 状況 えっと、まぁ、プラットフォームは「CentOS release 6.4」なのです。 「なんでそんな古いものを?」とは、詮索しないでくだされ、なにかと事情があるのです。 これを、「Subversion」のサーバとして使っておるのですが、当初あまり、ディスクの容量や配置を考えておりませんでした。 ある日、気づくと、ディスク容量が、下記のようなことになっておる。 $ df -h Filesystem Size Used Avail Use% マウント位置 /dev/mapper/vg_svn1-lv_root 50G 47G 43M 100% / tmpfs 2.0G 72K 2.0G 1% /dev/shm /dev/sda1 485M 36M 424M 8% /boot /dev/mapper/vg_svn1-lv_home 407G 33G 353G 9% /home このバージョンの「CentOS」は、ウェブサーバが「Apache2.2」で、ドキュメントルートが DocumentRoot "/var/www/html" てなことになっておりまして、まぁ、なんとなく /var/www/ の下にリポジトリを作っておったわけだ。 するとまぁ、「/var」は、「/」の直下にありまして、気づくと残りは、ほぼなくなっております。 「Subversion」の圧縮率が高いせいか、それでも、数年はなんともなく過ぎておりましたがね。 なくなってくると、少し、大きなものをコミットしようとするとエラーになる。 エラーのダイアログを取り忘れましたが、機会があれば、またとります。 バランスの悪いもので、「/home」の下は、まだまだずいぶんと余っております。 ということで、同じマシン内ではありますが、引っ越そうということにしました。 3. リポジトリの移動 引っ越し元のリポジトリのディレクトリを /var/www/svn/hogehoge としましょう。 引っ越し先を /home/svn/mine/fugafuga とします。 「cp -R」なんてのもありますが、ここは安全策で、「svnadmin」のコマンドを使います。 svnadmin hotcopy /var/www/svn/hogehoge /home/svn/mine/fugafuga 「dump」して「load」ちゅうのもあるらしいですが、「hotcopy」だと稼働したまま、移動できますので、楽ですし、ほぼ、ワンアクションですわな。 少し時間がかかるのは、覚悟します。 今回、試しにやってみたのは、ソース中心のリポジトリで、リビジョンが「5,000」にも満たなかったので、10分足らずでコピーできました。 所有権は、そのまま移動しないようで・・・。 chown -R apache:apache /home/svn/mine 4. アクセス設定 新規のリポジトリをアクセスできるようにしてやらねばなりませんな。 で、 /etc/httpd/conf.d/ に新規のファイルを置いて、下記のように書きます。 <Directory "/home/svn/mine"> Options Followsymlinks Order Allow,Deny Allow from all </Directory> <Location /mine> <IFModule dav_module> DAV svn SVNParentPATH /home/svn/mine </IFModule> AuthType Basic AuthName "Subversion Repository" AuthUserFile /var/www/svn/passwd Require valid-user <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> Order Allow,Deny Allow from all LimitXMLRequestBody 20000000 </Location> 「password」ファイルは、以前のリポジトリのものをそのまま使いまわしております。 $ apachectl configtest Syntax OK ちゅうことで、「apache」を再起動するわけです。 apachectl restart で、とりあえず、リポジトリブラウザで見てみるべと思って、見ようとしたら・・・。
$ df -h Filesystem Size Used Avail Use% マウント位置 /dev/mapper/vg_svn1-lv_root 50G 47G 43M 100% / tmpfs 2.0G 72K 2.0G 1% /dev/shm /dev/sda1 485M 36M 424M 8% /boot /dev/mapper/vg_svn1-lv_home 407G 33G 353G 9% /home
DocumentRoot "/var/www/html"
/var/www/
/var/www/svn/hogehoge
/home/svn/mine/fugafuga
svnadmin hotcopy /var/www/svn/hogehoge /home/svn/mine/fugafuga
chown -R apache:apache /home/svn/mine
/etc/httpd/conf.d/
<Directory "/home/svn/mine"> Options Followsymlinks Order Allow,Deny Allow from all </Directory> <Location /mine> <IFModule dav_module> DAV svn SVNParentPATH /home/svn/mine </IFModule> AuthType Basic AuthName "Subversion Repository" AuthUserFile /var/www/svn/passwd Require valid-user <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> Order Allow,Deny Allow from all LimitXMLRequestBody 20000000 </Location>
$ apachectl configtest Syntax OK
apachectl restart
てなことになる。 5. オチ まぁ、あれこれ、設定ファイルをいじったり、シンボリックリンクをはってみたり、いろいろとしたあげく。 こんなオチですわ。 この場合 /home/svn/mine だけでなく、その親ディレクトリの所有権まで、「apache」に変えなければ、ならなかったのです。 すなわち chown apache:apache /home/svn これで、やっと移動先のリポジトリにアクセスできるようになりました。 以前のリビジョンの記録まで、綺麗に残っているので安心しました。 落ち着いたら、元のディレクトリを消して、「/」の要領を復活させます。
/home/svn/mine
chown apache:apache /home/svn