<-- mermaid -->

Ubuntu 20.04 LTS を 22.04 LTS にアップグレードする

こんにちは!Product Teamのtakenokoです。

2022年4月に Ubuntu 22.04 LTS がリリース*1されました。皆さんはもう試されましたか?

Ubuntuのアップグレードって、基本的にはdo-release-upgradeコマンドを実行するだけなのですが、久しぶりのアップグレードだったりaptパッケージを長いこと更新していないと、何かと時間が掛かるものです。

そこで今回は細かい補足も交えながら、Ubuntu 20.04 LTS を Ubuntu 22.04 LTS にアップグレードする手順をまとめました。「もう準備OKだよ!」という方は、事前準備を読み飛ばしてもらっても大丈夫かと思います。

Ubuntu LTS について

LTS とは Long-Term Support の略称であり、Ubuntuではリリースされてから約5年間*2のサポートが提供されます。Ubuntuの場合、1年ごとにメジャーバージョンが1つ上がります。LTSは奇数年度を飛ばすように2年に1回提供されます。

直近10年はこの 2年に1度のLTS版リリース リリース後5年間の通常サポート というサイクルが続いています。
安定したLTSバージョンのリリース頻度が、Ubuntuの魅力のひとつでもあります。

※以降 Ubuntu 22.04 LTS を 22.04 LTS と省略して表記します。

最近のLTSバージョンのリリース日とサポート期限
  バージョン   リリース日  サポート期限
18.04 LTS 2018年4月26日 2023年4月
20.04 LTS 2020年4月23日 2025年4月
22.04 LTS 2022年4月21日 2027年4月


記事執筆時点(2022年10月)では 20.04 LTS を利用している方が多いと思いますが、8月に公開されたポイントリリース*3の内容には、アップグレード時のバグ修正も含まれているようです。これにより、アップグレードのリスクが低くなりました。

サポートが切れた後もアップグレードせずに使い続けることはできますが、セキュリティなどのことを考えるとあまり好ましいとは言えません。20.04 LTS の通常サポートは 2025年4月 まで行われる予定なので、慌てる必要はありませんが計画的なアップグレードを考えておきたいですね。

そんなわけで、今後 20.04 LTS からのアップグレードを試す方がじわじわ増えてくるかと思います。今回は 20.04 LTS から 22.04 LTS にアップグレードするための準備や手順、ハマりそうなところを解説します。

この記事では 22.04 LTS での変更点についてはあまり触れず、アップグレードの手順にフォーカスしています。また、今回は開発環境向けの記事ですので、本番環境として利用している方は参考程度にしていただければと思います。

事前準備

ここからは事前の準備として、現在のバージョン確認や、aptパッケージの更新を行います。

マシンのUbuntuバージョンを確認する

ちょうど手元に 20.04 LTS がインストールされたペアプロ用の開発マシンがあったので、今回はこのマシンを 22.04 LTS にアップグレードしていきます。早速アップグレードを進めたいところですが、まずはこのマシンのバージョンを確認してみましょう。

Ubuntuのバージョンを確認するコマンドはlsb_releaseunamehostnamectlなどいくつかありますが、今回はos-releaseファイルをcatコマンドで見てみることにします。cat /etc/os-releaseは、多くの Linux のディストリビューションで試せる方法ですので、覚えておいても損は無いかと思います。

cat /etc/os-release
# NAME="Ubuntu"
# VERSION="20.04.4 LTS (Focal Fossa)"
# ID=ubuntu
# ID_LIKE=debian
# PRETTY_NAME="Ubuntu 20.04.4 LTS"
# VERSION_ID="20.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=focal
# UBUNTU_CODENAME=focal

VERSION="20.04.4 LTS (Focal Fossa)"とあるので、このマシンが 20.04 LTS であることが確認できました。

※ここで軽く補足ですが「18.04 LTS を 22.04 LTS にアップグレードしたい!」といった場合、直接アップグレードすることはできません。一度 20.04 LTS にアップグレードする必要があります。この記事では 20.04 LTS → 22.04 LTS を念頭に説明をしていますが、基本的な流れは 18.04 LTS → 20.04 LTS でもほとんど変わりありません。

アップグレード可能なバージョンを確認する

アップグレード可能なバージョンはsudo do-release-upgrade -cで確認できます。

sudo do-release-upgrade -c
# New release '22.04.1 LTS' available.
# Run 'do-release-upgrade' to upgrade to it.

そもそもdo-release-upgradeコマンド自体が実行できない場合はupdate-managerというパッケージが足りてない可能性が高いです。sudo apt install update-managerでインストールしてみましょう。

余談ですが、LTSではないバージョンへのアップグレードを行いたい場合は、追加の作業とアップグレードコマンドのオプションが必要になります。
※今回はLTSバージョンからLTSバージョンへのアップグレードを想定しているため、以下の作業は不要です。

/etc/update-manager/release-upgradesPrompt=ltsとなっている箇所をPrompt=normalに変更してから下記コマンドを実行します。
sudo do-release-upgrade -d

LTS以外のバージョンにアップグレードする際は、この-dオプションが必要になります。

aptパッケージの更新

さて、Ubuntuのアップグレードを試そうとsudo do-release-upgradeと実行してみたところPlease install all available updates for your release before upgrading.と出て先に進めません。
こういった場合は、インストール済みのaptパッケージの更新が必要です。

ここからaptパッケージの更新について説明をします。すでに先へ進んだ方は読み飛ばしてください。
aptでのパッケージ管理に慣れていない方は、普段のメンテナンスでも役に立つ内容ですのでぜひ読んでみてください。

先述の通り、Ubuntuのアップグレード前にはインストール済みのaptパッケージを全て更新しておく必要があります。特に久しぶりに更新する場合はapt updateapt upgradeの順番で実行するのが無難です。段階的に更新することで、パッケージやファイルの競合が出たときに判断しやすくなるというメリットがあります。

これは余談ですが apt と apt-get は微妙に挙動が違います。apt-get よりも apt を使う方が推奨されているのですが、apt は実行した際の出力を使えません。そのため、

  • 普段のパッケージ更新などCLIで操作するだけの場合は apt
  • 出力をパイプでつなげたりDockerfileに記述する場合は apt-get

という使い分けが必要になります。この記事では apt を使うようにしています。

apt update

まずは登録済みのリポジトリから利用可能なパッケージ一覧を更新します。
sudo apt update

リポジトリのURLやSSH鍵が古いと下記のようなエラーが出たりすることがあります。

Err:5 https://dl.google.com/linux/chrome/deb stable InRelease
  404  Not Found [IP: 91.189.91.38 80]
Err:6 https://downloads.gauge.org/stable stable InRelease
  404  Not Found [IP: 185.125.190.52 80]

こういった場合はリポジトリのURLを更新するのがベストですが、分からない場合は/etc/apt/sources.list.d/hogehogeを削除することで一時的に先へ進めます。
Ubuntuに標準インストールされている「ソフトウェアとアップデート」から 他のソフトウェア を選択し、エラーの出てるリポジトリを削除することで、GUIでも同様の操作が可能です。

ここで削除したリポジトリは必要に応じてあとで登録する必要があるので、削除したリポジトリをメモしておきましょう。これを繰り返してsudo apt updateでエラーが出なくなったらOKです。先に進みましょう。

apt upgrade

次にパッケージを更新していきます。
sudo apt upgrade

パッケージを更新した際に、下記のようなメッセージが出ることがあります。

sudo apt upgrade
# Configuration file '/etc/cloud/cloud.cfg'
#  ==> 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.
# *** cloud.cfg (Y/I/N/O/D/Z) [default=N] ?

ここでは解説を割愛しますが、場合によっては適当に選択すると面倒なことになるので慎重に進めましょう。
パッケージで使用しているconfigファイルなどの競合を自動で解決できない場合がほとんどです。

何も分からない場合は、表示されたパッケージ名やファイル名でGoogle検索するのが無難です。
慣れている方もとりあえず D を入力してサクッと差分を確認してから先に進みましょう!

apt full-upgrade

もう少しaptコマンドでの作業が続きます。

一通りパッケージの更新が終わった後に、より最新のパッケージを追加したい場合の操作です。必須ではありません。
sudo apt full-upgrade
(おそらくsudo apt dist-upgradeでも同じ挙動です)

full-upgradeupgradeと少し違って、より最新のパッケージを追加しようと試みます。
そのため、既存のアプリケーションに影響を与えるような更新も発生します。

apt autoremove & apt autoclean

この作業は完全に任意ですが、アップグレード前に実行することをオススメします。
不要なパッケージやキャッシュをこのタイミングで削除することで、ごくわずかですがアップグレードに掛かる時間を減らせます。

更新に伴い必要なくなったパッケージを削除
sudo apt autoremove -y

キャッシュされている不要なdebファイルを削除
sudo apt autoclean -y

それでも先に進まない場合

ここまでsudo apt updatesudo apt upgradesudo apt full-upgradeと順番通りに実行したにもかかわらず未だにPlease install all available updates for your release before upgradingと出る場合があります。

その場合は、何らかの理由で保留されているパッケージの更新が必要である可能性が高いので、追加で以下の作業が必要になります。

例えばsudo apt upgradeを実行した時に、以下のようなログが出ているとしたら

パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージは保留されます:
  gnome-tweaks grub-efi-amd64-bin grub-efi-amd64-signed
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 3 個。

sudo apt install -y gnome-tweaks grub-efi-amd64-bin grub-efi-amd64-signed のように、保留されているパッケージを明示的にインストールしてみて下さい。

お待ちかねのUbuntuアップグレード

ここまでaptパッケージについての記述が少し長くなりました。
お待ちかねのUbuntuのアップグレード作業に入っていきましょう!

aptパッケージを更新した場合は、念のためここで一度マシンを再起動しておきましょう。
sudo reboot

先ほども紹介しましたが Ubuntu をアップグレードするコマンドを実行します。
sudo do-release-upgrade

ここから先は対話式でアップグレード作業が進んでいきます。
2~3分で終わるような作業ではないので、少なくとも1時間くらいは確実に作業できる時間を確保しておきましょう。

ちなみに下記の質問は、SSH接続で作業している場合のメッセージです。VPN環境などを利用しているとSSH接続せざるを得ない場合がありますが、後述のハマりポイントがあるためできれば直接コンソールで操作しましょう。

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]

この場合は「sshdを別ポート(1022)でも上げますか?」という質問なので y を入力しましょう。

下記のメッセージが出たら、いよいよアップグレードが本格的に進みます。

Do you want to start the upgrade? 


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

9 packages are going to be removed. 162 new packages are going to be 
installed. 531 packages are going to be upgraded. 

You have to download a total of 397 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]

更新や新規でインストールされるパッケージの数などが表示されるので y を押して進みましょう。

表示される質問の内容や数は、環境やアップグレードするバージョンによって異なりますが、下記の画像のようなピンク色の背景と灰色のダイアログが突然出てきても驚かないでください。



このダイアログでは/etc/ssh/sshd_configの設定ファイルの差分をどうするか質問されています。
大抵の場合はkeep the local version currently installedを選択すれば良いのですが、念のためshow the differences between the versionsで差分を確認してみることを個人的にオススメします。

パッケージによってはapt upgradeの説明で紹介したような質問が表示される場合もあります。
繰り返しにはなりますが、ここでも選択に迷ったら表示されたパッケージ名やファイル名でGoogle検索するのが無難です。

......このように見慣れない質問や選択肢が連続して表示されますが、ここら辺のダイアログで迷ったら大抵ググれば解決するかと思います。
そしてここでも詳細を割愛するのですが、全てを網羅するのは難しいのでお許しください!

例えば下記の質問では、使用されなくなったパッケージの削除をしてもよいか聞かれています。

Remove obsolete packages?

36 packages are going to be removed.

 Continue [yN]  Details [d]

念のため 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]

y を選択すると再起動します。

再起動したら、アップグレード前と同じ操作を行いバージョンを確認してください。

cat /etc/os-release
# NAME="Ubuntu"
# VERSION="22.04.1 LTS (Jammy Jellyfish)"
# ID=ubuntu
# ID_LIKE=debian
# PRETTY_NAME="Ubuntu 22.04.1 LTS"
# VERSION_ID="22.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=jammy
# UBUNTU_CODENAME=jammy

VERSION="22.04.1 LTS (Jammy Jellyfish)"とあるので、このマシンが 22.04 LTS にアップグレードされたことが確認できました。

これでひとまずアップグレード作業は完了です。お疲れ様でした!

ハマりどころ

ここからは 22.04 LTS にアップグレードした後のよくあるハマりポイントです。
アップグレードせずクリーンインストールした際にも当てはまるポイントがあるので、22.04 LTS を試す際には要チェックです。

FUSEをインストールするとぶっ壊れる

AppImage形式のアプリケーションを使う際に必要になるFUSEですが、22.04 LTS ではインストール時に細心の注意を払いましょう。知らないと結構面倒くさい破壊が起きます。

公式のGitHubリポジトリのWikiには

Warning: Do not install the fuse package as of 22.04 or you may break your system

github.com
という背筋が凍るような恐ろしい一文が書かれています。くれぐれも 22.04 LTS でapt install fuse実行しないでください......

どうしてもFUSEをインストールする必要がある場合は、先ほど紹介したWikiにも書かれているとおり

sudo add-apt-repository universe
sudo apt install libfuse2

としましょう。

VSCodeでLive shareが使えない

ズバリlibssl1.1というパッケージをaptでインストールすれば解決します。
docs.microsoft.com

インストールのために追加しなければならないaptリポジトリは下記のissueで追えるはずです。
github.com

ssh-rsaが無効に

RSA/SHA1 暗号方式の鍵 (ssh-rsa) がデフォルトで無効になっています。SSH接続かつ鍵認証のみでしか接続できない場合、再起動後に詰むことがあるので注意が必要です。

あまりお行儀が良くない方法ですが、これまで通り RSA/SHA1 暗号鍵が使用できるように許可してしまえばすぐに解決します。/etc/ssh/sshd_configに一行PubkeyAcceptedAlgorithms=+ssh-rsaを足すだけです。

もちろん、より強固な暗号方式で鍵を作り直すことをオススメします。まだまだ RSA/SHA1 が使われている環境が多いかと思いますが、セキュアな環境を整えるためにもこれを機に SHA-256 などで暗号化された鍵に置き換えましょう。

apt-keyが非推奨に

aptパッケージの電子署名用の公開鍵を管理するapt-keyコマンドが 22.04 LTS から非推奨になっています。

そのため、いつも通りapt updateしたら

W: https://download.docker.com/linux/ubuntu/dists/jammy/InRelease: Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

のような警告がたくさん出ることがあります。緊急度は高くないですが、早めに対処しておきたいところ。

まずはapt-key listで管理されている公開鍵の一覧を表示します。

apt-key list
# pub   rsa4096 2017-02-22 [SCEA]
#       9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
# uid           [  不明  ] Docker Release (CE deb) <docker@docker.com>
# sub   rsa4096 2017-02-22 [S]

このように表示された場合はsudo apt-key export 0EBFCD88 (※finger print の最後の8桁。スペースは不要。) | sudo gpg --dearmour -o /usr/share/keyrings/{任意のファイル名}.gpgで、ASCII Armor 文字列としてエクスポートした公開鍵を、バイナリに変換して任意のファイル名で格納します。

その後/etc/apt/sources.list.d/{今回置き換えたいアプリケーション}.listを編集し、先ほど格納したファイルを参照するようにします。

例えば、
書き換え前 deb [arch=amd64] https://hogehoge.com/ all main
書き換え後 deb [arch=amd64 signed-by=/usr/share/keyrings/{先ほど出力したファイル名}.gpg] https://hogehoge.com/ all main
といった具合に書き換えればOKです。

最後に先ほどexportした公開鍵を apt-key から忘れず削除してください。
sudo apt-key export 0EBFCD88

アップグレードは計画的に

22.04 LTS のリリースからある程度時間が経過して各種ライブラリやパッケージも揃ってきているので、20.04 LTS を利用している方もそろそろアップグレードを検討してみてはいかがでしょうか。

もし 18.04 LTS を使っている場合はもうすぐ通常サポートが切れてしまいます。まずは 20.04 LTS へのアップグレードから始めてみましょう。

冒頭でも説明したとおり、Ubuntuのサポート期間は原則5年間です。長いからといって油断は禁物です。

というわけで、アップグレードは計画的に。

*1:正式なリリース日は2022年4月21日。日本語Remix版は2022年5月6日リリース。

*2:通常期間が終了した後の Ubuntu Advantage まで含めると10年間

*3:https://kledgeb.blogspot.com/2022/08/ubuntu-2204-248-ubuntu-22041-lts.html

Page top