Subversionサーバー移転の例
問題
SVNサーバーの移転をしたいです。
サーバーをリプレイスして、データは引き継ぎたいです。
答え
例です。
sshd
svn+ssh:// する場合は、sshdが起動していること。
Subversion 1.8 インストール
# vi /etc/yum.repos.d/subversion.repo [subversion] name=subversion baseurl=http://opensource.wandisco.com/centos/6/svn-1.8/RPMS/ enabled=1 gpgcheck=1 gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco # yum install subversion
svnユーザー作成
# adduser svn
svnユーザー、svnグループできてよし。
ホームディレクトリできてよし。そこにリポジトリ作成予定。
鍵認証のみで使用する予定。
このユーザーには直接パスワードは設定しないでおく。
リポジトリ 作成
# su - svn $ mkdir -p /home/svn/repo $ svnadmin create /home/svn/repo
リポジトリ 移転元でダンプ
# svnadmin dump /home/svn/repo > dumpfile
リポジトリ 移転先でリストア
$ svnadmin load /home/svn/repo < dumpfile
リポジトリ 移転先を移転元と同期
どのような流れで切り替えるかが問題で、移転先を作ったものの切り替え前に移転元にコミットが発生したりすると調整が必要。
差分のダンプを取得して投入してもよい。
svnsync で同期ができるようにしておく。
$ vi /home/svn/repo/hooks/pre-revprop-change
#!/bin/sh
exit 0
$ chmod u+x /home/svn/repo/hooks/pre-revprop-change
※切り替えが完了したら、実行できなくしてよい。
初期設定
$ svnsync init file:///home/svn/repo 移転元リポジトリのURL
同期実行
$ svnsync sync file:///home/svn/repo
鍵作成
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
(ホームディレクトリは755以下で)
開発者各個人ごとに鍵を作る。
$ ssh-keygen -t rsa -N ” -f staff_aaa
$ ssh-keygen -t rsa -N ” -f staff_bbb
$ ssh-keygen -t rsa …
くっつけるだけででも使える。
$ cat *.pub >> authorized_keys
$ chmod 600 authorized_keys
鍵が漏れてもsvn操作しかできないようにしておくには、authorized_keys の各行の先頭に以下を追記する。
command="svnserve -t --tunnel-user=(svnのユーザー名)",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty
tunnel-userを一応付けはしたが、Eclipse経由だとあまり意味はない(ユーザー名を強制できない)。
Linuxのsvnコマンドではユーザー名が指定される(たぶんクライアントが明示しないときに)。
鍵を配布
各開発者に鍵を渡して、リポジトリに接続するときに使ってもらう。
どうしてもパスワード認証したい
場合によって、鍵を持っていけない場所などあれば、ユーザーを作ってパスワードを設定すると、パスワード認証できる。
# useradd -o svn2 -u svnユーザーと同じ -g svnユーザーと同じ # passwd svn2
リポジトリが壊れているとき1
リポジトリが壊れていると、移転元で svnadmin dump ができない。データの入ったディレクトリをコピーしてしまえば壊れたまま移転は可能な様子。ディレクトリを移転先にコピーして再開するのも一つの手。
コピーをするときは、誰もアクセスしていないときに限れば、cp や rsync をしてもよさそうだが、コピー用のコマンドもあって、svnadmin hotcopy を使ってコピーするのがよい。エラーがあってもコピーできてしまうので、無理やり移転するときには使えそう。
リポジトリが壊れているとき2
移転先を作って svnadmin create /home/svn/hoge
設定して svnsync init file:///home/svn/hoge 移転元URL
同期して svnsync sync file:///home/svn/hoge
移転元が壊れていると、時々エラーが発生する。
svndiff データの解凍に失敗しました
わざと何かコミットしてリビジョンを進めると、エラーのあるリビジョンの同期をスキップできる。
リビジョン進めて、同期再開を繰り返す svnsync sync file:///home/svn/hoge
これで壊れていないリポジトリは作れるが、スキップしたコミットの分だけ内容が欠損した状態となる。
コメント