Mail, CVS サーバ移行

メールサーバとして使用していたマシン IBM ThinkPad X20 (ホスト名 laura) のディスクが異常音を立てるようになった。壊れる前兆だと思われ,コピーできる間に Web サーバマシン (ホスト名 beatrice) に移行することとした。ホスト OS はともに FreeBSD である。

laura ではメールサービスのみならず CVS リポジトリの管理サーバが稼働している。私はノート PC IBM ThinkPad X40 (FreeBSD) と Power Mac G5 (Mac OS X Tiger) 二台のクライアントどちらでもプログラムやサイトのメンテナンスを行っており,バージョンを CVS で同期させることにしている。CVS リポジトリを別ホストに移行するのはちょっとやっかいである。そのメモをしるしておく。cvspserver で運用する例である。UNIX のシェルは tcsh である。bash を使用している場合は,その文法で読み替えてほしい。

  1. 新ホスト beatrice にリポジトリを単純にコピーする。私の運用では /usr/local/var/cvs をトップディレクトリとしている。
  2. cvsup を FreeBSD ports でインストールする。スーパーユーザで cd /usr/ports/net/cvsup-without-gui && make install clean とすればよい。
  3. beatrice /etc/inetd.conf に以下 cvspserver エントリを追記する。\ は折り返しであって,実際はこれなしに 1 行で記述する。
  4. cvspserver  stream tcp nowait  root  /usr/bin/cvs  cvs \
    -allow-root=/usr/local/var/cvs pserver

  5. beatrice の inetd を再起動する。ps ax | grep inetd で inetd のプロセス番号を探り当て,"kill -HUP inetd プロセス番号" を投入すればよい。
  6. 以下,クライアント側の操作。すべてのクライアントで実施する必要がある。まず環境変数 $CVSROOT が新しいサーバを指すように,.tcshrc を以下のように書き換える。"isao@beatrice" はユーザ名@ホスト名である。もちろん,旧サーバと同じユーザ名を新サーバでも利用できるように登録しておく。その後,source コマンドで変更後の .tcshrc を再読み込みしておく。
  7. setenv  CVSROOT  :pserver:isao@beatrice:/usr/local/var/cvs

  8. $HOME/.cvspass を削除する。
  9. 新しいサーバに CVS ログインする。以下の ljudmila はクライアント・ホストである。これで新しい .cvspass が出来る。
  10. ljudmila:/home/isao/hoge[1000] % cd
    ljudmila:/home/isao[1001] % cvs login
    Logging in to :pserver:isao@beatrice:2401/usr/local/var/cvs
    CVS password: xxxxxxx

  11. 旧サーバ (laura) から cvs checkout した作業用コピーは,そのままでは新サーバ (beatrice) のリポジトリと同期できない。通常は,作業用コピーを削除してもう一度 checkout して新たに作業用コピーを生成すればよいのだが,ローカルだけのファイルを活かしたいので,今回は CVS/Root ファイルのサーバ名を新サーバで書き換えることとした。CVS/Root ファイルは作業用コピーのディレクトリ毎にあるため,ひとつひとつ書き換えていると面倒である。そこで,ひとつ書き換えたファイルを準備し,find で探して CVS/Root ファイルすべてをこれで入れ替えるようにする。以下のオペレーションは src/misima という作業用コピーを例としている。
  12. ljudmila:/home/isao[1002] % cd src/misima
    ljudmila:/home/isao/src/misima[1003] % cat CVS/Root
    :pserver:isao@laura:/usr/local/var/cvs
    ljudmila:/home/isao/src/misima[1004] % sed s/laura/beatrice/g CVS/Root > ~/tmp/Root
    ljudmila:/home/isao/src/misima[1005] % cat ~/tmp/Root
    :pserver:isao@beatrice:/usr/local/var/cvs 
    ljudmila:/home/isao/src/misima[1006] % find . -name Root -exec cp ~/tmp/Root {} \; 

これで CVS 環境移行は完了である。メールサーバ移行はこれまで何度もやったので,手順はハッキリしていた。sendmail.cf の移行,qpopper, procmail, miltergreylist, spamassassin, MHonArc の組込み,ユーザ環境 (Mail ディレクトリ, .procmailrc, etc., etc.) の移行が必要であった。