IT pass HikiWiki - [ITPASS2009]サーバ交換作業 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

[((<ITPASSサーバ構築ドキュメント>)) へ戻る]

= 前日作業

== home 領域を old から new へ転送

当日にも同様の作業を行うが, その際の時間を短縮するために行う.

=== 公開鍵認証の際のセキュリティ設定の変更 (通信許可)

まず new 側の old に対する通信許可の設定を行う.

最近の OpenSSH では, デフォルトでは root のログインを許可しないため, 設定を変更する. new の /etc/ssh/sshd_config で,

  PermitRootLogin no

という部分を

  PermitRootLogin yes

に変更する.

さらに, 任意のコマンドを実行出来るように,

  PermitRootLogin forced-commands-only

という部分をコメントアウトする. その後,

  new# /etc/init.d/ssh restart

として設定を反映すること. これにより, root のログインを許可することとなる.

=== rsync で転送されるファイルの確認

/root/.ssh/ の秘密鍵でログインするため, まず以下の作業を行う.

  old$ sudo -s -H
  old# cd /root  

いきなり rsync コマンドを実行すると予期せぬ間違い (転送元と転送先の設定を間違って, 転送先のファイルを全て消してしまう等) が起こりうるため, まずは rsync コマンドに -n オプションをつけて実行する. -n オプションをつけて実行すると, 実際のファイルの転送は行わずに, 転送されるはずのファイルのリストが出力される.

* rsync する際, gate の home 領域や, new のみに存在する chikuwa* の home, aquota.user ファイルまで old に同期してしまわないよう オプション --exclude で除外する.
* 外部記憶装置にあるファイルが転送されることのないように -x というオプションを加える.
* ここでは一度ファイルリストを /tmp ディレクトリ以下に出力し, 確認してから実際の転送を行うこととする.

    root@old:~# rsync -n -av --delete -e ssh --exclude chikuwa* -x  \\
                --exclude=aquota.user --exclude=gate /home/new-itpass.scitec.kobe-u.ac.jp: \\
                /home/ 2>&1 | tee /tmp/rsync_old2new.log


なお, rsync に関するオプション (-av, --delete, -e 等) については, ((<rsync(1)|URL:http://www.infoscience.co.jp/technical/rsync/rsync.html>))
等を参照のこと. また, "/home" と "/home/" では転送内容が異なるため注意せよ.


上記コマンドの動作が終了したら, /tmp/rsync_old2new.log を見て, 転送される予定のファイルを確認する. もしも予期しないファイルが削除, 転送されてしまう場合には, --exclude オプションを使用してそのファイルは転送対象から除外すること.

=== rsync でファイルの転送

((<URL:#rsync で転送されるファイルの確認>)) で確認したコマンドから -n オプションを除いたコマンドを実行する.

実行後, new 内の /home 以下にファイルが転送されていることを確認すること.
最後に, ((<URL:#公開鍵認証の際のセキュリティ設定の変更 (通信許可)>))で行なった設定を元に戻す.

= 当日作業

以下では, ITPASS サーバの old から new への移行の作業の
詳細を時系列順 (phase 0 -- 4) にまとめる.
phase 0 -- 4 内のそれぞれの項目は順不同.

== phase 0

=== new の DNS キャッシュの TTL を変更

TTL を入替え作業時間よりも十分に短い時間に変更する.

* localhost.rev, localhost.zone

    $TTL 3600

  を

    $TTL 300

  に変更する.

* 各ファイルの serial を 更新する.


== phase 1  (入替え開始)

=== サービス停止前の下準備

* new の DNS 設定 /etc/resolv.conf が以下のようになっていることを確認する.

    nameserver 133.30.14.2                      
    nameserver 133.30.14.3                      
    nameserver 133.30.8.2
    search scitec.kobe-u.ac.jp

上記では nameserver として神戸大・学術基盤センターの DNS サーバを指定している.

=== old のサービスを停止する.

* http (https),
  * サービス停止作業
    * apache2, に関して,
      以下のコマンドで, サービスを一時的に停止する.
      ただし, 再起動すると再びこれらのサービスも起動してしまうため,
      作業途中で再起動の必要性が出てしまった場合は注意.
      永続的にサービスを停止する作業は ((<URL:#phase 3>)) にて行う.

        # /etc/init.d/apache2 stop

* ssh などでのログインユーザが居る場合, プロセスを削除

  * ps aux コマンドで確認後, そのようなプロセスがある場合に,
    kill <プロセスID> とする.

* qmail, tcpserver (smtp), inetd (pop3)
  * サービス停止作業
    * qmail, tcserver, openbsd-inetd に関して,
      以下のコマンドで, サービスを一時的に停止する.
      ただし, 再起動すると再びこれらのサービスも起動してしまうため,
      作業途中で再起動の必要性が出てしまった場合は注意.
      永続的にサービスを停止する作業は phase 3 で行う.

        # /etc/init.d/qmail stop
        # /etc/init.d/tcpserver stop
        # /etc/init.d/openbsd-inetd stop


== phase 2

=== old から new へ各種データをコピー

  * 公開鍵認証の際のセキュリティ設定の変更 (通信許可)

    new の /etc/ssh/sshd_config で,

      PermitRootLogin no

    という部分を

      PermitRootLogin yes

    に変更する. さらに, 任意のコマンドを実行出来るように,

      PermitRootLogin forced-commands-only

    という部分をコメントアウトする. その後,

      new# /etc/init.d/ssh restart

    として設定を反映すること. これにより, root のログインを許可することとなる.

  * old の /var/spool/cron/crontabs 以下の各ファイルを new へコピー
    * scp コマンドで移す際には, パーミッションやグループ等の設定を変えて
      しまわないように注意 (オプション p の使用).

  * old の /etc/shadow のユーザ部分を new へコピー (注意)
    * old, new に別々の仮想端末でログインする.
      new の /etc/shadow を/etc/shadow~にバックアップ.
      old の /etc/shadow のユーザー部分 (UID が 1000 〜 29999 までのもの.
      UID とユーザ名の対応については /etc/passwd) を参照のこと.

      このファイルをそのままコピーすると, new での構築作業用アカウントが消えるので, old と new を比較して,
      UID が new にない UID が 1000 〜 29999 までのものを目視でコピーする.

  * /home ディレクトリを rsync する
    * 作業については ((<URL:#home 領域を old から new へ転送>)) を参照.

  * 作業後に, old ⇒ new への転送を許可しないよう設定を戻す.
      * /etc/ssh/sshd_config
         * PermitRootLogin を no に戻す.
         * "PermitRootLogin forced-commands-only" の行をコメントアウトする.
      
      *  old の authorized_keys を編集
          * new-itpass の公開鍵の行の冒頭に以下を加える.

              command="rsync --server -vlogDtpr --delete . /home/",no-pty,
              from="ika-itpass.scitec.kobe-u.ac.jp",no-port-forwarding,
              no-X11-forwarding,no-agent-forwarding

         * ファイル名を authorized_keys.bk に変更し, root ログインを完全に拒否するようにする.

  * old の /usr/local/qpopper/pop.auth を new へコピー
      old$ cd /usr/local/qpopper/
      old$ sudo cp pop.auth ~/
      old$ sudo chown hoge:hoge pop.auth
      (hoge は適宜, 適当なユーザ名に変更すること)
      old$ sudo scp pop.auth new:
      old$ slogin new
      new$ cd /usr/local/qpopper
      new$ sudo mv pop.auth pop.auth~
      new$ sudo mv ~/pop.auth .
      new$ sudo chown pop:mail pop.auth
      new$ ls -l
      new$ rm pop.auth~
      new$ exit
      old$ rm pop.auth

=== ホスト名と IP アドレスの変更

old と new のホスト名と IP アドレスを入れ替える.

* ホスト名の変更

  編集するファイル
  * /etc/hostname
  * /etc/hosts
  * /etc/mailname
  * /etc/gate/gate.conf
  * /etc/exim4/update-exim4.conf.conf
  * /usr/local/bind/etc/namedb/localhost.zone
  * /usr/local/bind/etc/namedb/localhost.rev
  
     # grep ika (または tako) /etc/*

  等で古い名前が残っていないか検索しながら作業すること.

* IP アドレスの変更

  /etc/hosts と /etc/network/interfaces 内の IP アドレスを入れ替える.

    設定後
    old --> 133.30.109.21
    new --> 133.30.109.22

* ネットワークの再起動

  設定の変更後, ネットワークを再起動する.  
  
    # /etc/init.d/networking restart

== phase 3

=== old の設定変更

* bind
  * これまでのファイルをバックアップする.

     new$ cd /usr/local/bind/etc
     new$ cp -r namedb namedb-20091023

  * サーバ起動時に bind が立ち上がるよう, 起動スクリプトを変更する.

     # update-rc.d bind defaults

  * サーバ交換作業が終わったら, reboot して bind が起動することを確認する

* qmail の設定変更

  外から来たメールを受け取らないように, ログメールを飛ばすのに必要な設定だけにするため, /var/qmail/control 以下の locals, rcpthosts を以下のように変更する. 移行が終わったら起動する.

  変更前
    localhost
    old.scitec.kobe-u.ac.jp
    itpass.scitec.kobe-u.ac.jp
    epa.scitec.kobe-u.ac.jp
    aoe.scitec.kobe-u.ac.jp
    cps.scitec.kobe-u.ac.jp

  変更後
    localhost

* 再起動しても以下のサービスが立ち上がらないようにする.

  * http (https), pop3
    * apache2, openbsd-inetd に関して,
      以下のコマンドによって OS が起動する際に立ち上がらないように
      しておく.
      <service> には上記のサービス名を与える.

        # cd /etc/init.d
        # update-rc.d -f <service> remove
        # chmod 644 <service>

    * 余談だが, これら停止したサービスを再開する場合には,
      以下のようにするとよい.

        # cd /etc/init.d
        # update-rc.d <service> defaults
        # chmod 755 <service>

  * 確認作業
    * 再起動を行い, ps aux コマンドで停止したはずのサービスが
      立ち上がっていないことを確認する.


=== new の設定を変更

* qmail の設定変更

  /var/qmail/control 以下の locals, rcpthosts が以下のように変更されているかチェックする. されていない場合は以下のように編集する.

    localhost
    ika-itpass.scitec.kobe-u.ac.jp
    itpass.scitec.kobe-u.ac.jp
    epa.scitec.kobe-u.ac.jp
    aoe.scitec.kobe-u.ac.jp
    cps.scitec.kobe-u.ac.jp

  qmail-showctl(8) で設定を確認.

* qmail の再起動
  
    /etc/init.d/qmail restart

* メーリングリスト毎の bouncer 設定

  メーリングリストのエラーメール転送設定が行われているかチェックする. この作業が必要なメーリングリストは,

    itpass-ml_at_itpass.scitec.kobe-u.ac.jp

  である. ただし, "_at_" はアットマークである.
  /home/itpass/ml/ml-crtl/bouncer が以下のように変更されているか確認する. されていない場合は以下のように編集する.

    &itpadmin_at_itpass.scitec.kobe-u.ac.jp
    |/usr/local/ezmlm/bin/ezmlm-weed
    |/usr/local/ezmlm/bin/ezmlm-return -D '/home/itpass/ml/ml-ctrl'

* 以下のサービスが定常的に立ち上がるように設定する.
  * http (https), dns, tcpserver (smtp), inetd (pop3)

#* ((<[ITPASS2009]サーバと予備サーバでのバックアップの設定>))の作業を行う


== phase 4

=== 移行の最終チェック

* new
  * http: 表示できるか, hikiに書き込めるか, gate による
    登録や変更は可能か
  * pop: メールをとってこれるか
  * smtp: メールを出せるか, 受け取れるか
  * mailing list: メールが配送されるか
    * smtp や Mailing list の確認は Mail の構築の際と同じような手順でチェックする(qmail-inject で外にメールが届くか, 外からメールを送って届くか, Mailing list にメールを送って届くか).
  * pop の確認の準備
    * new の利用者は自分の new のアカウントで, .qmail の設定と Mailbox の作成
    * popauth コマンドを行ってパスワードを作っておく作業をする

* old
  * http: 無効になっているか
  * pop: 無効になっているか
  * smtp: submit は有効にするが, 受け取らない設定になっているか

* old と new でそれぞれ問い合わせに応じるか, 正しいデータを返すかをチェックする.

     $ dig itpass.scitec.kobe-u.ac.jp
    
     --> 133.30.109.22を返せば OK.

     $ dig old-itpass.scitec.kobe-u.ac.jp
    
     --> 133.30.109.21を返せば OK.

     $ dig new-itpass.scitec.kobe-u.ac.jp
    
     --> 133.30.109.22を返せば OK.

* メールを受け取る new 以外の計算機での作業
  * メーラーの設定は pop サーバ, smtp サーバはどちらも itpass.scitec.kobe-u.ac.jp にする
  * 認証形式は APOP で, 暗号化は pop も smtp も無しにする
  * 受信のときにパスワードを要求されるので, popauth で作成したパスワードを入力する.


== phase 4.5

=== 電脳サーバへのバックアップの確認

ITPASS サーバの資源は, 毎日電脳サーバへバックアップされている. cron によって毎日実行されているそのシェルスクリプトが正常に作動しているか試行する.

電脳サーバへログインし, kobe グループになり, kobe のホームディレクトリに移動.
そこで,

  $ ./itpass_rsync_epa2dennou.sh -n
  $ ./epalab_rsync_epa2dennou_yyh.sh -n

を実行する. その後, 出力されたログを確認する.

  $ cd ./itpass_rsync_epa2dennnou_log
  $ less itpass_rsync_epa2dennnou.log
  $ cd ../epalab_rsync_epa2dennnou_log
  $ less./epalab_rsync_epa2dennnou.log

2 つとも正常に出力されていれば OK.


= 後日の作業

* 要らないファイルの削除
  
  運用開始から 1 週間をめどに, 参考のために old からコピーしたファイル類を削除する

* new の DNS の TTL を元に戻す.
  
  この項目は DNS 管理者の意向によっては行わなくてもよい.

  * /usr/local/bind/etc/namedb のバックアップとして /usr/local/bind/etc/namedb-XXXXXXXX (バックアップする日付) を作成.
  * /usr/local/bind/etc/namedb/{localhost.zone, localhost.rev} の$TTLを300から3600に変更. serial も更新.
  * 再起動.

* 再構築作業用 chikuwa* ユーザの削除
    userdel -r [アカウント名]

  で, ホームディレクトリも一緒に削除できる.
  * visudo から chikuwa* を削除する.



[((<ITPASSサーバ構築ドキュメント>)) へ戻る]