Oracle Cloud上でubuntu18.04サーバを構築する(後編)

前編では、Oracle Cloud上にLinuxサーバ(ubuntu 18.04)を構築した。後編では、OSの基本的な設定を行う。

Pi-holeの実行環境にすることを目的としてサーバを構築しているが、本章の執筆にあたっては、Oralce Cloud上にubuntu18.04環境を構築する手順として、できる限り汎用的なものとなるよう心掛けている。

SSHで接続

Puttyを起動し、サーバのグローバルIPアドレスを指定し、接続。

パッケージの更新

以下のコマンドで、パッケージリストを更新

$ sudo apt update
$ sudo apt upgrade

初期段階ではviエディタすら入っていないので、パッケージをインストールしておく。

$ sudo apt install vim

ローカライズ

タイムゾーンロケールを日本に設定する。Minimal版にしたせいか、タイムゾーンUTCしか入っていなかったので、「tzdata」パッケージを追加導入する。

$ sudo apt install tzdata

インストール後にタイムゾーンを聞かれるので、「6.Asia」→「79.Tokyo」の順に選択し、日本時間に設定。

続いて、メッセージを日本語化する。

$ sudo apt install language-pack-ja
$ sudo update-locale LANG=ja_JP.UTF-8

これで終わり。一度ログインしなおしたうえで試しに現在時刻を確認すると、、

$ date
2019年 12月 15日 日曜日 15:46:59 JST

のように、現在時刻が日本時間で、日本語で表示される。

時刻同期

OCIのドキュメント「コンピュート・インスタンスのベスト・プラクティス」によると、OCIがNTPサーバ(169.254.169.254)を提供しているとのことなので、時刻同期先がどうなっているか確認。

sudo systemctl status systemd-timesyncd

筆者の環境では、以下の出力結果となり、デフォルトでOCIのNTPサーバを利用しているようだったので、特に変更は不要と判断した。

Status: "Synchronized to time server 169.254.169.254:123 (169.254.169.254)."

自動再起動

クラウド上のインスタンスはメンテナンス再起動が必要になることもあるので、定期的に再起動するように設定する。

/etc/crontabを確認し、cronの設定状況を確認。

$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

/etc/cron.daily内に置いたスクリプトは、毎日6:25に実行されるようになっている。今回は、日次で再起動することにしたいので、/etc/cron.daily内に再起動スクリプトを作成する。

なお、デフォルトの設定では、6:25の日次ジョブに続き、週次ジョブが6:47、月次ジョブが6:52に実行される。我が家では、6時台には活動を開始しているのでジョブが稼働してほしくない。また、再起動に時間がかかる可能性を考慮し、日次ジョブと週次ジョブの間隔を広くしておきたいと感じたため、日次ジョブを4時台に、週次・月次ジョブが5時台に実行されるよう、/etc/crontabを変更した。

$ cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 4    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 5    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 5    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

run-partsはファイル名の昇順でスクリプトを呼び出すので、最後に実行されるよう、zz_rebootという名前のスクリプトとした。

$ cd /etc/cron.daily
$ sudo vi zz_reboot

以下のようなスクリプトを作成

#!/bin/sh

/sbin/shutdown -r now

実行権限を付与

$ sudo chmod +x zz_reboot

テストのため、試しに実行してみる。

$ sudo ./zz_reboot

実行すると、SSHのセッションが切断される。しばらく待って接続。

$ uptime
16:00:24 up 0 min,  1 user,  load average: 3.79, 0.97, 0.33

uptimeで起動時刻を確認し、再起動されたことを確認。

参考サイト

コンピュート・インスタンスのベスト・プラクティス