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

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

10/10/29 に サーバの交換作業を赤松, 河合, 佐伯, 坂本, 高橋,藤田で行った.(ロガー: 藤田)

{{toc_here}}

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

= phase 0

phase0 〜 phase2 までは new=tako, old=ika である.

== 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), qmail, tcpserver (smtp), inetd (pop3)

  * サービス停止作業

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

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

* ssh などでのログインユーザが居る場合, プロセスを削除
  * who コマンドで確認したところ, そのようなプロセスはなかった.


= phase 2

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

* root のログインを許可するため, 設定を変更した.

  old の /etc/ssh/sshd_config で,

   PermitRootLogin no

  という部分を

   PermitRootLogin yes

  に変更した.


  その後,

   old# /etc/init.d/ssh restart

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


* old の /var/spool/cron/crontabs 以下の各ファイルを new へコピー

  * scp コマンドで移す際には, パーミッションやグループ等の設定を変えてしまわないように注意 (オプション p の使用).

   old# scp -p -r crontabs root@133.30.109.21:/var/spool/cron/crontabs
  
* 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 に対する通信制限の設定を行った.

  先ほど, old から new に rsync でファイルを転送するために, root のログインを許可したので, 設定を変更して元に戻した.

  /etc/ssh/sshd_config の

   PermitRootLogin yes

  という部分を

   PermitRootLogin no

  に変更したのち,

   new# /etc/init.d/ssh restart

  として設定を反映することにより元に戻した.
  

* old の authorized_keys.bk を編集

  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

  * 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

== ホスト名と 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

これ以降、new=ika, old=tako である.


=== サービス停止作業

再起動したため, まず, old のサービスを再び停止した (phase 1 参照).


== old の設定変更

  * bind を止めてサーバ起動時に bind が立ち上がらないように, 起動スクリプトを変更した.

     old# /etc/init.d/bind stop
     old# update-rc.d -f bind remove

  * qmail の設定変更

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

    * 変更前
        localhost
        ika.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

    /var/qmail/control 以下の defaulthost, me の ika という記載を tako に変更した.

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

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

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


== new の設定変更

  * qmail の設定変更

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

      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 の再起動

    new#/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'

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

     new# cp -r namedb namedb-20101029
     new# update-rc.d bind defaults
     update-rc.d: warning: /etc/init.d/bind missing LSB information
     update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
      Adding system startup for /etc/init.d/bind ...
        /etc/rc0.d/K20bind -> ../init.d/bind
        /etc/rc1.d/K20bind -> ../init.d/bind
        /etc/rc6.d/K20bind -> ../init.d/bind
        /etc/rc2.d/S20bind -> ../init.d/bind
        /etc/rc3.d/S20bind -> ../init.d/bind
        /etc/rc4.d/S20bind -> ../init.d/bind
        /etc/rc5.d/S20bind -> ../init.d/bind

    ここで LSB の警告が出たが, ((<[Memo2009][ITPASS] tako 構築作業ログ(DNS)(村上(健), 古家, 井谷)>)) で同様の警告が出ていたため, それを参照し,以下を /etc/init.d/bind の冒頭に追記した.

     ### BEGIN INIT INFO
     # Provides:          bind9
     # Required-Start:    $remote_fs
     # Required-Stop:     $remote_fs
     # Should-Start:      $network $syslog
     # Should-Stop:       $network $syslog
     # Default-Start:     2 3 4 5
     # Default-Stop:      0 1 6
     # Short-Description: Start and stop bind9
     # Description:       bind9 is a Domain Name Server (DNS)
     #        which translates ip addresses to and from internet names
     ### END INIT INFO

    このあと, 一度 update-rc.d -f bind remove を実行し, もういちど update-rc.d bind defaults を実行すると, 警告は出なくなった.

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

     new# update-rc.d bind defaults

  * 以下のサービスは既に定常的に立ち上がるように設定されていた.
    * http (https), inetd (pop3)

== 確認作業

サーバ交換作業が終わったら, 再起動して 以下の確認作業を行った.

* old 

  ps aux コマンドで, http (https), bind, inetd (pop3) が起動していないことを確認した.

    
* new

  ps aux コマンドで, http (https), bind, tcpserver (smtp), inetd (pop3) が起動していることを確認した.


= phase 4

==移行の最終チェック

移行の最終チェックを行った.

* new
  * http: 表示できるか
    * 大半のページは表示できたが, 以下のページが表示できなかった.
      * Fortran 勉強会 wiki ページ
      * 自然科学総合研究棟三号館 部屋の予約管理 Wiki
    * 上記の問題は, /usr/local/apache2/conf/httpd.conf の末尾に

        <Directory "/home/bldg3/public_html/hiki">
        AllowOverride ALL
        Options -MultiViews
        </Directory>

        <Directory "/home/fourtran/public_html/hiki">
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options=ExecCGI,FollowSymlinks
        Options -MultiViews
        </Directory>

      と書き加えることで解決した.

  * hikiに書き込めるか
    * 書き込めた.
  * gate による登録や変更は可能か
    * 可能だった.

  * pop: メールをとってこれるかを確認する.
    * popauth を実行すると, /usr/local/qpopper/pop.auth が開けないという種のエラーが出た.
      * /usr/local/qpopper/pop.auth は old からコピーしたものだが, それが壊れているかもしれない.
      * 壊れたファイルを別名にして, popauth -init を行うことでpop.auth を初期化した.
    * pop の利用者に呼び掛けて各自もう一度 pop の設定をしてもらう.

  * smtp: メールを出せるか, 受け取れるかを確認した.

  * mailing list: メールが配送されることを確認した.

* old
  * http: 無効になっているか
    * 無効になっていた.

  * pop: 無効になっていることを確認した.

  * smtp: submit は有効にするが, 受け取らない設定になっているか
    *((<[ITPASS2009]qmailのインストールと設定>))の配送テストと同じ方法でローカル配送テスト1 を行ったが所定の ~/Mailbox にメールは届かなかった.
    * ただし cron のログは管理者に届くようになっていることが確認できた.

* new の smtp や Mailing list の確認は Mail の構築の際と同じような手順でチェックする(qmail-inject で外にメールが届くか, 外からメールを送って届くか, Mailing list にメールを送って届くか).

* pop の確認の準備
  * new での作業
    new の利用者は自分の new のアカウントで, .qmail の設定と Mailbox の作成
    popauth コマンドを行ってパスワードを作っておく作業をする

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

* 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.


= 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 つとも正常に出力されていた.


=トラブルシューティング


== Hiki 内のページを名前指定して URL を参照する際, 正しいページに飛ばない問題.
* リダイレクトの際, 参照する名前の文字コード区切りごとに "%" を意味する "25" が挿入されていた.ことが原因である. 解消するには, バーチャルホストのリダイレクトを設定して, "%" を URL の一部として (エスケープしない文字として) 解釈させる必要がある.

* そのためには, itpass 以下の hiki を運用しているバーチャルホストすべてに対して, hiki に関して 'noescape|NE' オプションを付けた.

* /usr/local/apache2/conf/extra/httpd-vhosts.conf について, 以下の修正を 行った.

    # line 40 - 44
         RewriteLogLevel 0
         RewriteCond %{SERVER_PORT} !^443$
    -    RewriteRule ^/hiki/(.*)?$
      https://itpass.scitec.kobe-u.ac.jp/hiki/$1 [L,R]
    +    RewriteRule ^/hiki/(.*)?$
      https://itpass.scitec.kobe-u.ac.jp/hiki/$1 [L,R,NE]
         RewriteRule ^/hiki/(.*)?$
      https://itpass.scitec.kobe-u.ac.jp/hiki-secret/$1 [L,R,NE]

    # line 115 - 119
         RewriteCond %{SERVER_PORT} !^443$
         # ---- hiki
    -    RewriteRule ^/hiki/(.*)?$
      https://epa.scitec.kobe-u.ac.jp/hiki/$1 [L,R]
    +    RewriteRule ^/hiki/(.*)?$
      https://epa.scitec.kobe-u.ac.jp/hiki/$1 [L,R,NE]
         # ---- gate
         RewriteRule ^/~gate/(.*)?$
      https://itpass.scitec.kobe-u.ac.jp/~gate/$1 [L,R,NE]


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