IT pass HikiWiki - [ITPASS2021]サーバ交換作業 (WWW) Diff

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

{{toc_here}}

[((<[ITPASS2020]2020年度サーバ構築マニュアル>)) へ戻る]

= 作業内容

== phase 0
#準備

* サーバ交換中は Hiki 上のマニュアルを参照できなくなるため,
  作業者は予めサーバ交換マニュアルを手元に保存しておく.
  * サーバ交換マニュアルから引用されているページについても忘れないこと.
  * Hiki ページの印刷は推奨されない. 長いコマンドなどが切れてしまうため.


== phase 1

特に作業を行わない.


== phase 2

特に作業を行わない.


== phase 3

特に作業を行わない.


== phase 4

特に作業を行わない.


== phase 5
#tako, ika の交換: 設定ファイルの変更

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

各種設定ファイルに存在する,
ika と tako のホスト名と IP アドレスを入れ替える.
編集の際は元のファイルを hoge_old としてバックアップを取る.

* 担当
  * /etc: WWW 班

* ika と tako のホスト名を交換 (新 ika には ika, 新 tako には takoと書く)
  * /etc/hostname
  * /etc/hosts
    * 例外 : 新 ika では tako, 新 tako では ika と書く
  * /etc/mailname
  * /etc/gate/gate.conf
  * /etc/exim4/update-exim4.conf.conf
  * /etc/motd
  * /etc/init.d/qmail
    * 例外 : このファイルのバックアップは作らないこと

  上記の場所以外にも古い名前が残っているかどうかを grep で確認する.
    # grep tako (または ika) /etc/*
    # grep tako (または ika) /etc/*/*
    # grep tako (または ika) /etc/*/*/*
    ...
  など.
  ファイルの編集をするときはエディタの検索機能を活用すると早く作業できる.
  ただし一括置換はホスト名とは関係ない文字列も置換してしまう恐れがあるので使わないこと.

  * ssh の公開鍵は消去されるので, そのままにしておく.

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

   # emacs /etc/hosts

  * tako にある /hosts の中身のアドレスは 133.30.109.21 とする.
  * ika にある /hosts の中身のアドレスは 133.30.109.22 とする.

   # emacs /etc/network/interfaces

  * tako にある /interfaces の中身のアドレスは 133.30.109.22 とする.
    * ローカルホストのアドレスは10.35.19.150 とする.
  * ika にある /interfaces の中身のアドレスは 133.30.109.21 とする.
    * ローカルホストのアドレスは10.35.19.151 とする.
  * dns-nameserversの項目 は ika, tako いずれも 133.30.109.22 とする.


== phase 6

特に作業を行わない.


== phase 7 (サービスの設定変更)

((*ここからホスト名が入れ替わっているので注意すること*)).

=== ika の WWW などの設定変更 (担当: 新 WWW 班)

* ((<[TEBIKI]サービスの開始・停止>)) を参考に,
  以下のサービスが永続的に立ち上がるように設定する.

  * apache2
  * openbsd-inetd

   $ sudo cd /etc/init.d
   $ sudo systemctl enable apache2.service
   $ sudo apt install insserv
   $ sudo insserv -d openbsd-inetd
#  * qmail のバックアップを残していると, エラーメッセージが表示される
#    * qmail_old を消去する
   $ sudo chmod 755 openbsd-inetd

  * 上記上から 3, 4 つ目のコマンド ($ sudo apt install insserv と $ sudo insserv -d openbsd-inetd) を実行した際, 以下のようなメッセージが出たが, inetd は動作していたのでそのまま進むことにした.

      insserv: FATAL: service mountkernfs has to exist for service udev
      insserv: FATAL: service urandom has to exist for service networking
      insserv: exiting now!

== phase 8

特に作業を行わない.


== phase 9 (再起動後の動作確認)

=== サービスの起動確認
  
ps aux コマンドで以下の確認作業を行う.

* ika
  * httpd が起動していることを確認する.

* tako
  * httpdが起動して((*いない*))ことを確認する.

=== サービスの動作確認

==== ika

* ((*http*)): ブラウザで https://ika-itpass.scitec.kobe-u.ac.jp/ にアクセスし, 各ページが正常に表示できるか
  * 表示できないページがある場合は, /usr/local/apache2/conf/httpd.conf にそのページの領域の行があるか確認する. もしなければ, 書き加える.
* ((*hiki*)):に書き込めるか

==== tako

* ((*http*)): が無効になっているか


=== Let's encrypt による証明書の設定

==== certbot のダウンロード

Let's Encrypt では, Debian 用に certbot のパッケージが用意
されている. しかし, このパッケージは apache2 の Debian パッ
ケージに依存しているため, apache をソースから手動で make
している itpass サーバでは使えない.
そのため, https://certbot.eff.org/ から, 下のようにして
certbot をダウンロードしてインストールする.

  "Software" に apache を選択.
  "System" に "Debian 10 (buster)" を選択.

当該ページの説明に従って, 下のように作業する.

$ sudo apt update
$ sudo apt install snapd

$ sudo snap install core
$ sudo snap install core; sudo snap refresh core
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

==== 証明書の発行

ダウンロードした certbot を使って itpass.scitec.kobe-u.ac.jp 用の
証明書を発行する.

$ sudo certbot certonly --webroot -m itpadmin@itpass.scitec.kobe-u.ac.jp
--webroot-path /home/itpass/public_html -d itpass.scitec.kobe-u.ac.jp

なお, certbot のオプションの意味は下の通り.

* --webroot
  既に動作中のウェブサーバ上で, ウェブサーバを停止せずに証明書を発行する.
* certonly
  apache の設定ファイルを自動で書き換えずに証明書を取得するのみ.
  証明書は /etc/letsencrypt に置かれる.
* --webroot-path
  RootPath の設定
* --email (-m)
  初回実行時にメールアドレスを尋ねられなくするためのオプション.
  つけなくて良いかもしれない.

途中以下のようなことが聞かれるので 2 を選ぶ.

What would you like to do?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Keep the existing certificate for now
2: Renew & replace the cert (may be subject to CA rate limits)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Renewing an existing certificate


同様に, epa.scitec.kobe-u.ac.jp, aoe.scitec.kobe-u.ac.jp 用の証明書を発行する.

$ sudo certbot certonly --webroot -m itpadmin@itpass.scitec.kobe-u.ac.jp
--webroot-path /home/epalab/public_html -d epa.scitec.kobe-u.ac.jp

$ sudo certbot certonly --webroot -m itpadmin@itpass.scitec.kobe-u.ac.jp
--webroot-path /home/aoelab/public_html -d aoe.scitec.kobe-u.ac.jp

これらは選択肢を聞かれないだろう.

==== apache への証明書の設定

/usr/local/apache2/conf/extra/httpd-ssl.conf を編集して発行した証明書を設定する.

# vi /usr/local/apache2/conf/extra/httpd-ssl.conf

編集箇所は下の通り.

ServerName itpass.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換える.

  SSLCertificateFile "/etc/letsencrypt/live/itpass.scitec.kobe-u.ac.jp/fullchain.pem"
  SSLCertificateKeyFile "/etc/letsencrypt/live/itpass.scitec.kobe-u.ac.jp/privkey.pem"


ServerName aoe.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換える.

  SSLCertificateFile "/etc/letsencrypt/live/aoe.scitec.kobe-u.ac.jp/fullchain.pem"
  SSLCertificateKeyFile "/etc/letsencrypt/live/aoe.scitec.kobe-u.ac.jp/privkey.pem"


ServerName epa.scitec.kobe-u.ac.jp:443
の項目内で下のように書き換える.

  SSLCertificateFile "/etc/letsencrypt/live/epa.scitec.kobe-u.ac.jp/fullchain.pem"
  SSLCertificateKeyFile "/etc/letsencrypt/live/epa.scitec.kobe-u.ac.jp/privkey.pem"

前の SSLCertificateFile と SSLCertificateKeyFile はコメントアウトする.


==== 証明書更新のテスト

Let's encrypt の証明書の有効期限は 90 日である.
このため, certbot-auto には簡単に証明書を更新する方法が存在する.
その方法を設定する.

まずは下のようにして更新をテストする.

# ./certbot renew --dry-run

これを定期的に実行するために cron のためのスクリプトを設定する.
下の内容の /etc/cron.local/daily/240_letsencrypt_renew を作成する.

#!/bin/sh
#
#= Renew certificate
#
MAINTAINERS="Yoshiyuki O. Takahashi"
UPDATE='2021-11-24’
VERSION='1.0'
REFERENCES='none'

COMMAND='/usr/bin/certbot'
DRYRUN='--dry-run'
DRYRUN=''

/bin/echo -e "**** Renew certificate ****"
$COMMAND renew $DRYRUN 2>&1
/bin/echo -e ""

実行権限を与える.

下のように動作テストを行い, 問題なく動作することを確認する.
(ただし, この時点では証明書が新しいため更新されない.)

# /etc/cron.local/daily/240_letsencrypt_renew

=== 動作確認

* apache を停止

    # /usr/local/apache2/bin/apachectl -k graceful-stop

  * 停止したかどうかを確認する.

* apache を起動
    * apache は /usr/local/apache2/bin/apachectl で起動/停止する.

       # /usr/local/apache2/bin/apachectl -k start

    * 起動したかどうかを以下のコマンドで確認する.

       # ps aux | grep http
      
      画面左端に www-data と表示されている行があることを確認する.

* ブラウザで https://itpass.scitec.kobe-u.ac.jp にアクセスし, ページを正常に見ることができることを確認する.


== phase 10

特に作業を行わない.