Ubuntu16.04 から 18.04 にアップグレードした

Posted on 2020-04-19 in zakki

本サイトの Ubuntu をアップグレードしました。16.04 LTSとは言いながらアップグレードしないことはいかがなものだろうと思いながらも、2021 年までは余裕があるしどうせならダウンタイムをゼロに出来るように構成したい、とアップグレードへの足枷が増していたのですが、先般のgitの脆弱性のニュースがありそちらを対応するついでにやってしまおうと思ったのでした。

アップグレード手順

コマンドを書き並べていきます。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt dist-upgrade

お決まりのaptのパッケージ更新コマンドを実行します。upgradeの応答として下記のような表示となった場合はdpkg --configure -aを行う、とあります。個人的には原因となるパッケージ名を確認してから実施したほうが良いと思うので直前にdpkg --auditが欲しいなあ。

$ sudo apt upgrade
E: dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem.

$ sudo dpkg --audit
The following packages are in a mess due to serious problems during
installation.  They must be reinstalled for them (and any packages
that depend on them) to function properly:
 tcpdump              command-line network traffic analyzer

$ sudo dpkg --configure -a

$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done

早速、do-release-upgradeでアップグレードを実行しようかなと思いましたが再起動を求められるので大人しく再起動します。さらば約 8 ヶ月起動した日々。

$ sudo do-release-upgrade
Checking for a new Ubuntu release
You have not rebooted after updating a package which requires a reboot. Please reboot before upgrading.

$ uptime
 12:42:02 up 259 days, 10:44,  1 user,  load average: 0.78, 0.64, 0.28

( 再起動 )

$ sudo do-release-upgrade

Reading cache

Checking package manager

各種設定

アップグレード中は何点か設定について選択する場面があります。

sshd

まずは ssh。予備用のポートとして1022を使用できますよという通知と、ファイアウォールを使用している場合は1022をオープンしておいてね、という通知があります。yを押しENTERで進めます。下記ではファイアウォールとしてiptablesが想定されていますが、セキュリティグループなどなんやかんやが稼働していればそちらのお世話ももちろん必要になります。

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]

To make recovery in case of failure easier, an additional sshd will
be started on port '1022'. If anything goes wrong with the running
ssh you can still connect to the additional one.
If you run a firewall, you may need to temporarily open this port. As
this is potentially dangerous it's not done automatically. You can
open the port with e.g.:
'iptables -I INPUT -p tcp --dport 1022 -j ACCEPT'

To continue please press [ENTER]

パッケージ削除 / 更新の内訳

削除 / 更新されるパッケージついて内訳を表示してくれています。アップグレードを開始する場合はydでパッケージの詳細を見ることができます。

アップグレード所要時間はtake several hoursと書かれていますが、正味 15 分程度でした。まあ所要時間はネットワーク環境によって上下するものなので参考までに。

Do you want to start the upgrade?


5 installed packages are no longer supported by Canonical. You can
still get support from the community.

4 packages are going to be removed. 167 new packages are going to be
installed. 553 packages are going to be upgraded.

You have to download a total of 579 M. This download will take about
1 minute with your connection.

Installing the upgrade can take several hours. Once the download has
finished, the process cannot be canceled.

 Continue [yN]  Details [d]

journald

journald.confについて更新するかどうかを聞かれました。( 確か何か設定変更していた記憶があるので ) 現状維持のNを選択して次へ。

Configuration file '/etc/systemd/journald.conf'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** journald.conf (Y/I/N/O/D/Z) [default=N] ?

grub

grub はプロンプトが表示されます。アローキーで操作できます。

show the differences between the versionsで diff が閲覧できます。

支障はなさそうに見えたので、install the package maintainer's versionを選択。

openssh

ssh 再び。

grub のときと同じようにアローキーで操作して diff が閲覧できます。

一部隠ぺいしている通り、色々と内容を変更しているファイルですので、こちらはkeep the local version currently installedを選択。

docker

デーモンの再起動をしないとトラブルが発生するよと ~~ 脅し ~~ 忠告をいただけるので、ここは素直にYesを選択します。

逆に再起動さえ行えば、コンテナ含め正常稼働するだろうと目論んでいたのですが駄目でした。メッセージの後半でサービス化 (systemd 化?) していないコンテナも停止するよ、とあったので大丈夫かと考えていたのですが、実際コンテナ起動はdocker-composeで制御しているのでその差異が影響していたのかも … と考えています。

というわけで数分間ですが本サイトが閲覧できない状態となっていました。すみません。

パッケージの削除

パッケージの削除を指定できます。これまでと同様にdで内訳が閲覧できます。今回はyで削除を選択しました。

Remove obsolete packages?


164 packages are going to be removed.

Removing the packages can take several hours.

 Continue [yN]  Details [d]

アップデート完了及び再起動

アップデートが完了し再起動するかどうかを訊かれます。yで再起動に進みます。

System upgrade is complete.

Restart required

To finish the upgrade, a restart is required.
If you select 'y' the system will be restarted.

Continue [yN]

再接続して結果を確認します。

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

よかったよかった。

Ubuntu