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
で起動時刻を確認し、再起動されたことを確認。