月曜日, 11月 07, 2011

CentOSのSubversionを1.4から1.6にアップグレード

現在使っているSubversionのリポジトリサーバがCentOS 5.2でSubversionは1.4.2-2(r22196)がインストールされている。これまではサーバ側のバージョンとクライアント側のバージョンをなるべく1.4に統一してやっていた。最近はGitを使うことが増えてきて、既存のsvnリポジトリと連携したいケースも出てきたが、git-svnを使うには1.6が必要。いま(2011年11月)はCentOS 5.2上でyum updateを実行しようとするとSubversion 1.6.11-7がインストールされるようだが、1.4.xと1.6.xでは互換性がどうなっているのかよくわからないので、いろいろ試してからアップグレードすることにした。

  • 現在の環境
  • Subversion 1.4でリポジトリ作成
  • 1.4のリポジトリに1.6.x系のクライアントでアクセス
  • yumでSubversion 1.6をインストール
  • 1.4で作成されたリポジトリに1.4と1.6でアクセス
  • 1.4でチェックアウトした作業コピーを1.6で操作
  • 1.6で作成されたリポジトリに1.4からアクセス
  • まとめ

現在の環境


  • OS: CentOS release 5.2 (Final)
  • Subversion: バージョン 1.4.2 (r22196)
  • mod_dav_svn: 1.4.2

※いきなり本番環境のSubversionをアップデートするわけにもいかないのでVMを構築しようと思ったら、いま(2011年11月)CentOS 5.2を入手してSubversionとmod_dav_svnをyumインストールしようとすると1.6系しかインストールできない。昔のVMを引っ張り出してなんとかSubversionとmod_dav_svnが両方1.4.2の環境を用意した。

Subversion 1.4でリポジトリ作成


リポジトリは以下のように作成。

# cd /var/www/svn
# svnadmin create project1 --fs-type fsfs
# chown -R apache.apache project1

ブラウザから http://[ip]/svn/project1 にアクセスして「Revision 0」と表示されればリポジトリの作成は成功。この状態で/var/www/svn/project1/db/formatを確認すると「2」と書いてあり、formatタイプが2であることが分かる。

ここに適当にファイルをコミットしておく。

$ mkdir project1
$ ethna add-project sample
$ cd ..
$ svn import -m "New Import" project1 http://[ip]/svn/project1/trunk/project1
$ rm -fr project1
$ svn checkout http://[ip]/svn/project1/trunk/project1 ./project1

1.4のリポジトリに1.6.x系のクライアントでアクセス


CentOS 5.6にインストールされているsvn 1.6.11(r934486)でプロジェクトをチェックアウトし、ファイルを変更する。その後svn 1.4.2からも問題なくリポジトリの操作が行えたため、この操作によって1.4のリポジトリのフォーマットが変わっていないことが分かる。
(db/formatも2のまま)

同様にTortoiseSVN 1.6.11でプロジェクトをチェックアウトし、ファイルを変更したが結果はsvnコマンドと同じだった。

yumでSubversion 1.6をインストール


CentOS 5.2でyumを使ってSubversion 1.6をインストールする。

# yum update subversion
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.khlug.org
 * updates: mirror.khlug.org
 * extras: ftp.daum.net
Setting up Update Process
Resolving Dependencies
--> Running transaction check
---> Package subversion.i386 0:1.6.11-7.el5_6.4 set to be updated
--> Processing Dependency: subversion = 1.4.2-4.el5_3.1 for package: mod_dav_svn
--> Running transaction check
---> Package mod_dav_svn.i386 0:1.6.11-7.el5_6.4 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

=======================================================================================================================================================
 Package                               Arch                           Version                                     Repository                      Size
=======================================================================================================================================================
Updating:
 mod_dav_svn                           i386                           1.6.11-7.el5_6.4                            base                            78 k
 subversion                            i386                           1.6.11-7.el5_6.4                            base                           3.1 M

Transaction Summary
=======================================================================================================================================================
Install      0 Package(s)         
Update       2 Package(s)         
Remove       0 Package(s)         

Total download size: 3.2 M
Is this ok [y/N]: y
Downloading Packages:
(1/2): mod_dav_svn-1.6.11-7.el5_6.4.i386.rpm                                                                                    |  78 kB     00:00     
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (13%) 11% [=====                                           ]  0.0 B/s | 360 kB     --:-- ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (27%) 25% [============                                    ] 738 kB/s | 816 kB     00:03 ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (35%) 33% [================                                ] 744 kB/s | 1.1 MB     00:02 ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (60%) 60% [============================-                   ] 868 kB/s | 1.9 MB     00:01 ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (71%) 70% [=================================-              ] 883 kB/s | 2.2 MB     00:01 ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (76%) 75% [====================================            ] 862 kB/s | 2.4 MB     00:00 ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (81%) 81% [======================================-         ] 843 kB/s | 2.5 MB     00:00 ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (86%) 86% [=========================================       ] 822 kB/s | 2.7 MB     00:00 ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (91%) 91% [===========================================-    ] 807 kB/s | 2.9 MB     00:00 ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (95%) 95% [=============================================-  ] 784 kB/s | 3.0 MB     00:00 ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm               (99%) 99% [===============================================-] 762 kB/s | 3.1 MB     00:00 ETA 
(2/2): subversion-1.6.11-7.el5_6.4.i386.rpm                                                                                     | 3.1 MB     00:03     
-------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                  764 kB/s | 3.2 MB     00:04     
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Updating       : subversion                                        [1/4] 
  Updating       : mod_dav_svn                                       [2/4] 
  Cleanup        : subversion                                        [3/4] 
  Cleanup        : mod_dav_svn                                       [4/4] 

Updated: mod_dav_svn.i386 0:1.6.11-7.el5_6.4 subversion.i386 0:1.6.11-7.el5_6.4
Complete!

mod_dav_svnもアップデートされたのでhttpdを再起動する。

# /etc/init.d/httpd restart

アップデートしただけでは/var/www/svn/project1以下のファイルには変化はないようだ。

1.4で作成されたリポジトリに1.4と1.6でアクセス


ここへんからが一番知りたいところ。現状/var/www/svn以下には1.4で作成されたformat=2のリポジトリがある。ローカルにインストールされたsvnは1.6.11(r934486)になったので、チェックアウトしてみる。

$ cd /tmp
$ svn checkout http://[ip]/svn/project1/trunk/project1 ./project1
$ cd project1
$ vim sample/www/index.php
$ svn commit -m "index.phpの変更"

さらに別のLinuxに入っているsvn 1.4.2でチェックアウトやコミットを試してみるが...なんともない。db/formatも2のまま。むむ。

1.4でチェックアウトした作業コピーを1.6で操作


上記の例ではSubversionを1.6に上げたが、1.4で作られたformat=2のリポジトリをチェックアウトして作業する想定だった。今度は1.4の時点で取得した作業コピーをsvn 1.6.11で操作するとどうなるのか試す。サーバのSubversionも1.6.11に上がっている。作業コピーだけが1.4という状況。

$ cd /path/to/project1
$ vim sample/www/index.php
$ svn commit -m "index.phpの変更"

1.6で操作後別のマシンから1.4で操作してみたが問題なし...db/formatも2のまま。フォーマットは変わっていない。むむむ。うまく操作できなくなると予想していたけど予想はハズレ。

1.6で作成されたリポジトリに1.4からアクセス


以下のコマンドで新たにリポジトリを作成する。1.6にバージョンが上がっているのでformat=4のリポジトリが作成される。

# cd /var/www/svn
# svnadmin create project2 --fs-type fsfs
# chown -R apache.apache project2

このリポジトリに1.4と1.6の両方でアクセスしたが、1.4からでも問題なく操作できた。

まとめ


ここから分かったことを(多くないけど)とりあえずまとめてみる。

  • yum updateによるSubversion 1.4.2 -> 1.6.11のアップデートではリポジトリのフォーマットは変更されない
  • 1.4.2で作成されたリポジトリにsvn 1.4とsvn 1.6の両方でアクセスしても問題ない
  • 1.6.11で作成されたリポジトリにsvn 1.4とsvn 1.6の両方でアクセスしても問題ない

ただし、今回試したのはcheckoutして編集してcommitするという非常に単純な作業だったし、ファイル数も多くない。
Subversion 1.5で追加されたshardingという機能はリビジョンが1000を超えると影響がありそうだが、それもテストできていない。

だが互換性は1.1系から1.4系に上げるときより格段に高いようなので、本番環境ではsvnadmin dumpでリポジトリのダンプを取得した状態でアップグレードを実施してみようと思う。

0 件のコメント: