ずっと待っていた Ubuntu 20.04.1 LTS がリリースされました。
このblogが動いているサーバは、Ubuntu 18.04.5 LTSで稼働しています。
VPSを利用しているので、メンテナンスは、リモートから行う必要があります。リモートからということは、アップグレードに失敗したり、ブートに失敗したりすると、かなり面倒な事になってしまいます。
ですので、18.04から20.04へのアップグレードは、bug fixリリースが出てから行おう!と待ち構えていたのです。
このvpsで動いているUbuntuを 16.04から18.04へアップグレードした時の記事 は、2018年12月30日にアップロードしているので、1年半ぶりの作業になります。
なにはともあれ リリースノート
18.04 から 20.04 へ上げるにあたり、まずは、何が変わったのか?を確認します。
Ubuntu 20.04 LTS Release note
https://wiki.ubuntu.com/FocalFossa/ReleaseNotes
Ubuntu 20.04.1 LTS Change summary
https://wiki.ubuntu.com/FocalFossa/ReleaseNotes/ChangeSummary/20.04.1
大規模なディストリビューションなので、変更は多岐にわたっていると思いますが、自分が利用しているアプリケーション、システムで利用しているパッケージのバージョンが変わっているか?など、自分の環境と照らし合わせながら見ていきます。
20.04で(このサーバに関係のある)変更
- Toolchain upgrades
- python 3.8.2
- php 7.4
- base system
- bind 9.16
- openssh 8.2
blogが稼働しているサーバで関係がありそうなのは上記項目くらい。影響がありそうなのは、pythonとphpのバージョンが上がること。
特にpythonは2.7系がdefaultで入らなくなり、/usr/bin/pythonが今まで 2.7系を指していたのが3.8系を指すようになるそうです。
またwordpressは、phpで書かれていますから既存のphp7.2 -> 7.4への変更でエラーが出る事も考えられます。
必要そうな設定ファイルはバックアップをしておきます。
20.04.1でのchangelog
どんなバグがあったのかな?と 20.04.1 change summaryも軽く見ておきます。
致命的なbugはなさそうですが、systemd周りはいくつかpatchが入ってます。
upgradeを始める
upgrade note に目を通します。慎重に作業をしても失敗する可能性もありますから、必要なデータは、外部へバックアップしておくこと。
(1) リリースノートにあるように、既存18.04を最新の状態へ更新します。
1 2 3 |
root@vps:~# apt-get update root@vps:~# apt-get upgrade root@vps:~# apt-get dist-upgrade |
(2) Ubuntuのバージョンを確認
1 2 3 4 5 6 |
root@vps:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.5 LTS Release: 18.04 Codename: bionic |
(3) 念の為、一度リブートをしておきます。
1 2 |
root@vps:~# sync root@vps:~# shutdown -r now |
(4) 必要なファイルをバックアップ
wordpressのデータとDB dumpは、毎日取得して別サーバへ送っているので、今は設定ファイルを中心にバックアップしていきます。
アップグレード時、サードパーティのリポジトリは無効にされます。アップグレード後に忘れずに戻しましょう
1 2 3 4 5 6 |
root@vps:~# ls -l /etc/apt/sources.list.d total 16 -rw-r--r-- 1 root root 72 Aug 7 13:20 goaccess.list -rw-r--r-- 1 root root 40 Aug 7 13:20 goaccess.list.distUpgrade -rw-r--r-- 1 root root 114 Aug 7 13:20 nginx.list -rw-r--r-- 1 root root 84 Aug 7 13:20 nginx.list.distUpgrade |
(5) いよいよアップグレード
sshのセッションを2つ張ります。※ do-upgradeコマンドを実行すると別ポートでsshdが起動されます。そちらに接続しておくのもいいでしょう。
1つ目は、upgradeコマンドを叩く為
2つ目は、package uprage時、設定ファイルに変更があった場合に修正する為
まずは、update-managerの最新版が入っている事を確認します。
1 2 3 4 5 6 7 |
root@vps:~/upgrade-20.04# apt-get install update-manager-core Reading package lists... Done Building dependency tree Reading state information... Done update-manager-core is already the newest version (1:18.04.11.13). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. root@vps:~/upgrade-20.04# |
いよいよupgrade開始です。ネットワーク帯域やサーバスペックにもよりますが、割と時間がかかるので、時間に余裕のある時に実行しましょう。
ターミナルでログの記録をしておくのも良いと思います。
1 |
root@vps:~/upgrade-20.04# do-release-upgrade -d |
(6) 最後にリブート
‘Upgrade complete’ と表示されたら、最後にリブートして完了です。
1 2 3 4 5 6 |
user@vps:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.1 LTS Release: 20.04 Codename: focal |
(7) apt lineを元に戻す
再起動後、問題なく動いているようなら、upgrade時disableにされたサードパーティリポジトリをもとに戻します。各ファイルは、リリース名が書き換えられ、コメント状態になっています。
先頭行の#を外し、有効にします。
1 2 3 4 5 6 7 |
root@vps:~# ls -l /etc/apt/sources.list.d/ total 16 -rw-r--r-- 1 root root 72 Aug 7 13:20 goaccess.list -rw-r--r-- 1 root root 40 Aug 7 13:20 goaccess.list.distUpgrade -rw-r--r-- 1 root root 114 Aug 7 13:20 nginx.list -rw-r--r-- 1 root root 84 Aug 7 13:20 nginx.list.distUpgrade root@vps:~# |
ハマったところ
blog用のvpsは、基本的にパッケージを使って運用しています。なので、あまりハマる事はなかったのですが、mysqlが 8.0 に上がった事で、古い設定ファイルが使えなくなりエラーを吐いて起動に失敗してしまいました。
リリースノートにmysqlの記述は無かったのですが、8.0に上がってしまいました。
1 2 3 4 5 |
root@vps:~# cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep sql_mode #sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' #sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' sql_mode = 'NO_ENGINE_SUBSTITUTION' root@vps:~# |
このように修正してから、upgradeを続行しました。
1 |
root@vps:~# apt-get --fix-broken install |