ヘテムルサーバから転送量制限の緩和メールが届いたのと、SVNサーバを置いているさくらVPSがちょっと重かったので、SVNサーバを移設してみました。
少しハマってしまったので、まとめておきます。
リポジトリを最新に
いちおう、移設前にローカルコンピュータ上の内容とリポジトリを一致させておいたほうがいいと思いましたので、コミットしておきました。
ローカルコンピュータ上では TortoiseSVN を利用してます。
リポジトリの退避
移設前のサーバー上のリポジトリを退避(バックアップ)します。
バックアップには svnadmin dump コマンドを使用します。
リポジトリをどこに作ったか忘れてしまってたので探すのに苦労したw
ls /var/svn/repos/ に発見しましたw
まず、移設前の環境でリポジトリをバックアップします。
SSHなどでサーバーにログイン。
作業ディレクトリを作ります。
(dfなどでディスクのサイズを確認しておきましょう)
# cd /tmp
# mkdir back
# cd ./back
現在のリポジトリの内容をダンプします。
# svnadmin dump /var/svn/repos/PROJECT > ./PROJECT.dump 2>/dev/null
標準エラー出力をリダイレクトしておかないと、すごい量のダンプが出力されて、そのうち印刷データなどに飛ばされるようなことになりかねます(実際そうなったw)ので、標準エラー出力を止める必要があります。
2>/dev/null
書いてないと時間もかかるしkillできないしで、めちゃくちゃ待たされますw
終わったらダンプファイルを圧縮します。
tar -zcvf PROJECT.dump.tar.gz PROJECT.dump
圧縮したダンプファイルを移設先にコピーします。
バックアップ目的でローカルコンピュータを経由してもいいけど、普通にscp で転送したほうが楽ですね。
まず移転先のヘテムルサーバに SSHでログインして、tmp フォルダを作っておきます。
# ssh -P 2222 ユーザー名@SSHドメイン
# mkdir -p ./tmp
# scp -P 2222 PROJECT.dump.tar.gz ユーザー名@SSHドメイン:/home/sites/heteml/users/h/o/g/hoge/tmp/
※ /home/sites/heteml/users/h/o/g/hoge を付けとかないとだめなのがミソw
ダンプファイルの解凍
ヘテムルサーバにログインしてダンプファイルを解凍します。
# cd ./tmp
# tar -zxvf PROJECT.dump
# cd ..
リポジトリを作成します。
# mkdir -p ./repos
# svnadmin create ./repos/PROJECT
リポジトリをダンプファイルから復元(リストア)
# svnadmin load ./repos/PROJECT < ./tmp/PROJECT.dump 2>/dev/null
Windows上の TortiseSVN でリポジトリの再配置
※ここが最も苦労しました。SSHのポート番号が 2222 なのと、リポジトリのパス名指定がややこしいからでした。
まず、C:\ユーザー\ユーザー名\AppData\Roaming\Subversion\config ファイル
を開き、[tunnels]セクションに以下を追加します。
repos = "C:\\Program Files\\TortoiseSVN\\bin\\TortoisePlink.exe" -ssh -P 2222 -l ユーザー名 -pw パスワード
↑ '\\'と2つ付けないとダメでした。場合によっては空白部分にも '\ 'が必要と記載されている場所もありました。
↑小文字でなければいけないし、'_' などは使用できないようでした。
エクスプローラからローカルフォルダを右クリックし、TortizeSVNメニュー
の再配置を選択し以下のように記載します。
svn+repos://SSHサーバー/home/sites/heteml/users/h/o/g/hoge/repos/PROJECT
再配置が完了すれば、移設がうまくいったことになったと思ったら大間違い。
ちゃんと更新とかコミットを確認しないと大変なことになります。
更新がうまくいかなかった場合の対処について
リビジョンが 73 なのに 173 のリビジョンなんてない!というエラーで更新
ができなくなってしまいました。
対応としてやったこと
(1) リポジトリが正しいかを確認。
別のフォルダを作って、対象のリポジトリをチェックアウトしてみます。
うまくいかない場合はサーバー側のリポジトリに問題があります。
うちの場合は正しくチェックアウトできました。
(2) ローカルフォルダの .svn フォルダを削除します。
勇気のいる行動ですねw真似をされる場合は自己責任でお願いします。
(3) リポジトリをチェックアウトします。
フォルダが空でないよと警告出ますが、リポジトリを本来のローカルフォルダ
にチェックアウトします。
※(1)で新しく作成したフォルダにチェックアウトしたのち古いフォルダ
と名前を変更してしまえばいいと思いましたが、それはできませんでしたw
上記手順でうまくいきました。
めでたしめでたし。
さいごに
古いサーバーのリポジトリやダンプは削除しておきましょう。
svnadmin にはリポジトリを削除する機能が用意されていないので、
# rm -rf /var/svn/repos/PROJECT で削除します。
なかなか時間のかかる作業でした。