hachiNote

勉強したことをメモします。

さくらVPSでUbuntu 16.04から18.04へアップグレードする

目的

さくらVPSUbuntu 16.04 LTSを運用していましたが、しばらく放置していたすきに時代は次のバージョンが出てました。ログインしたら以下のようなメッセージも表示されます。

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-134-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

New release '18.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


SAKURA Internet [Virtual Private Server SERVICE]

というか、もうUbuntu 20.04 LTSも出ているみたいですね。まあでもいったん18.04にしてみようと思います。

ということで、Ubuntu 16.04 から Ubuntu 18.04 へのアップグレードを行った時の記録です。あくまでさくらのVPSでの話です。

コマンドを打ってアップグレード

$ sudo apt update
$ sudo apt upgrade

apt upgradeが終わったあと以下のようなメッセージが表示されていた。

The following packages were automatically installed and are no longer required:
  linux-headers-4.4.0-62 linux-headers-4.4.0-62-generic linux-image-4.4.0-62-generic linux-image-extra-4.4.0-62-generic
Use 'sudo apt autoremove' to remove them.

いらなくなったものがあるからautoremoveで消したらどうって言っている。指示に従ってみた。

$ sudo apt autoremove

-cをつけるといきなりアップグレードせずにチェックができるという情報があったので打ってみる。

$ sudo do-release-upgrade -c
Checking for a new Ubuntu release
New release '18.04.4 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

ふんふん。18.04になるみたい。よし実行。

$ sudo do-release-upgrade
Checking for a new Ubuntu release
Get:1 Upgrade tool signature [819 B]                                                                                                               
Get:2 Upgrade tool [1,242 kB]                                                                                                                      
Fetched 1,243 kB in 0s (0 B/s)                                                                                                                     
authenticate 'bionic.tar.gz' against 'bionic.tar.gz.gpg' 
extracting 'bionic.tar.gz'

Reading cache

Checking package manager

Continue running under SSH? 

This session appears to be running under ssh. It is not recommended 
to perform a upgrade over ssh currently because in case of failure it 
is harder to recover. 

If you continue, an additional ssh daemon will be started at port 
'1022'. 
Do you want to continue? 

Continue [yN] 

あ、「SSH越しにこのまま実行する? あまりオススメしないけど」と言われている。そうか、たしかによくないかも。

ここまでの作業はSSH越しにやってましたが、一旦中断してさくらのVPSのコンソールから作業を再開する。

$ sudo do-release-upgrade

インストールするパッケージのチェックなどを行なったあと、削除するもの、インストールするもの、アップグレードするものの情報が表示される。つらつらと見てみると、ntpが削除の対象になっている。ntpはもう使われないのかな?

Continueでyを打ってアップレードを続行する。

途中で、「Configuring keyboard-configuration」という画面が表示される。とりあえず Japanese, Japaneseで選択した。

さらに、「/etc/sysctl.confに変更がある。どうする?」と言われる。 その場でdiffを見ることができるが、問題なさそうな気がしたので新しいパッケージのほうで上書きを選んだ。

また処理が進んで、今度は「Configuring grub-pc」という画面が表示される。 「/etc/default/grub が新しくなっているけどどうする?」と言われている。

なにがどうなっているのかなと調べていると、そもそもさくらのVPSで標準OSインストールとして選べる「Ubuntu 18.04 LTS」でインストールした時の OSセットアップ情報が記載されている記事を発見した。Ubuntu 18.04 LTSからさくらが(気を利かせてみたいなところだろう)カスタマイズしている内容が記載されている。

OSセットアップ情報(Ubuntu18.04 LTS) – さくらのVPSニュース

なるほどなるほど、これはかなり重要な情報ですね。今更ながらこれを参考にしながらアップグレード作業進めていこう。

で、記事にはさくらのほうで grub の設定もカスタマイズしている。なのでdiffを取ってみるとなんとも言えない差分が出ている。

とりあえずさくらの記事の設定に合わせたいので、手で直せるなら直してみようと思い、「do a 3-way merge between available versions」を選択してみた。

が、あれ? なんかそのまま処理が続行してしまった。どうなったんだろう?

次は「/etc/ntp.confに変更がある。どうする?」と言われる。 これも先ほどのさくらの記事によると、さくらのVPS用にカスタマイズしている内容がある。いったんYで新しいパッケージのほうを優先して、あとで記事の内容に従って修正することにする。

今度は「Configuring openssh-server」という画面が表示される。 diffを見るとすごく差分がある。記述の順番が変わっているだけなのかもしれないけど一旦パッケージの方をインストールして、あとで修正することにする。

次は「/etc/dovecot/conf.d/10-mail.confが新しいやつがある。どうする?」と言われる。 これは幸いなことにさほど差分がない。新しくするとメールサーバが動かなくなるかもしれないので、Keep local versionにする。

次は「/etc/dovecot/conf.d/10-ssl.confが」と言われる。 これも幸いなことにさほど差分がない。Keep local versionにする。

さらに処理が進んで、「Remove obsolete packages?」と聞かれるのでyで削除する。

最後に 「Restart required」となって、yで再起動する。

ログイン画面が Ubuntu 18.04.04 LTSになっているので、とりあえずうまく行っているっぽい。

動作確認と設定のし直し

grub

/etc/default/grub は3-way mergeを選んで何も言われないまま続行したので中身を確認してみる。すると、どうやっているのかわからないが、まあまあうまくマージしてくれているっぽい。一応前述のさくらの記事に合わせる形で修正しておく。以下はさくらの記事に書いてある内容。

GRUB_DEFAULT=0

GRUB_TIMEOUT_STYLE=hidden

GRUB_TIMEOUT=0

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`

GRUB_TERMINAL=serial

GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"

GRUB_CMDLINE_LINUX_DEFAULT="noresume nomodeset consoleblank=0 elevator=noop console=tty0 console=ttyS0,115200n8"

設定変えた後、ファイルの冒頭に" If you change this file, run 'update-grub' afterwards to update /boot/grub/grub.cfg." と書いてあるので、指示に従ってコマンドを打つ。

$ sudo update-grub

すると、/boot/grub/grub.cfg のタイムスタンプが変わった。なるほど、ここに変更内容が反映されるんだな。

ntpd

さっきhtpdの設定を上書きしたので変えなくちゃ……と思ったが、 do-release-upgrade を実行した時に、ntpdが削除対象になっていたことを思い出す。

軽く調べてみると、やはりUbuntu 18.04ではntpdではなく、systemdのtimesyncdサービスというのを使っているらしい。

Ubuntu 18.04で時刻同期を設定する方法

psコマンドでntpdがないかを確認したがない。 $ sudo systemctl status ntpd と打ってみたがそんなサービスないよと言われる。やっぱり動いてないっぽい。

前述のさくらのVPSの記事によると、さくらのVPSで標準で用意しているUbuntu 18.04はntpdを追加でインストールしてntpdを使って同期するようにしてあると説明している。

が、現時点でntpdを使ってない状態になっているようなので、ここは新しいやり方に合わせることにしよう。

timedatectlコマンドで状況を確認できるらしい。

$ timedatectl
                      Local time: Sat 2020-05-02 22:43:00 JST
                  Universal time: Sat 2020-05-02 13:43:00 UTC
                        RTC time: Sat 2020-05-02 13:43:01
                       Time zone: Asia/Tokyo (JST, +0900)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

ふむ、動いているらしい。サービスとしては systemd-timesyncd.serviceという名前らしく、 $ sudo systemctl status systemd-timesyncd.service を打つと確かに active (running) になっている。接続先は ntp.ubuntu.com になっているらしい。

systemd-timesyncdの設定ファイルは、/etc/systemd/timesyncd.confにあるらしい。Time Serverの接続先をさくらに変更する。

[Time]
NTP=ntp1.sakura.ad.jp

変更後、サービス再起動。

$ sudo systemctl restart systemd-timesyncd.service

status確認してみたが、ちゃんと動いているらしい。

sshd

さっきsshdの設定を上書きしたので、もともとこちらでカスタマイズしている設定をし直す。ポート番号と、その他ちょっと設定変えていたのでそれを /etc/ssh/sshd_configに反映する。 sshdを再起動。

$ sudo systemctl restart sshd

ちゃんと動いた。sshで接続確認して、大丈夫なことを確認した。

dovecot

設定ファイルの何が変更になったのかあんまり確認していないが、とりあえずメールはIMAPでみれたので、大丈夫っぽい。