Ubuntu Weekly Recipe

第830回Ubuntuアップグレードの告知方法を知る

今回は、Ubuntuがどのように情報を得てアップグレードの告知を得るのかを解説します。

ついに始まったアップグレード

Ubuntu 22.04 LTSから24.04 LTSのアップグレードが開始されました。Ubuntu Weekly Topicsでも紹介されたように、8月末に有効化され、その後一旦無効化されました。現在は有効化されており、アップグレードを促すダイアログをすでに見たことでしょう図1⁠。

図1 アップグレードを促すダイアログ

今回は、このダイアログがどういう仕組みで表示されるのかを見ていきます。

Ubuntuアップグレード告知の仕組み

Ubuntuのアップグレードが可能になった場合、ユーザーには図1のダイアログをもって告知されます。

なおsystemdのunitに関する説明は省略します。詳しくはsystemdの思想と機能をお読みください。

まず第755回で紹介したように、update-notifier-motd.timerが毎週日曜日の午前6時に/usr/lib/ubuntu-release-upgrader/release-upgrade-motdを実行します。ただし「Persistent=true」により、そのタイミングで実行できなかった場合はその後に実行できるタイミング(例えば電源をつけたとき)で実行されます。

内部では/usr/lib/ubuntu-release-upgrader/check-new-releaseが呼ばれており、第671回で紹介したように⁠/etc/update-manager/release-upgradesの設定値、あるいは「⁠ソフトウェアとアップデート」「アップデート」タブにある「Ubuntuの新バージョンの告知」の設定値により、⁠すべてのバージョン」⁠中間リリース⁠⁠、⁠LTSのみ⁠⁠、⁠アップデートしない」の挙動に分かれます図2⁠。

図2 ⁠⁠ソフトウェアとアップデート」「アップデート」タブ

なお、各リリース情報は/etc/update-manager/meta-releaseにあります。中身は次のとおりです。

# default location for the meta-release file

[METARELEASE]
URI = https://changelogs.ubuntu.com/meta-release
URI_LTS = https://changelogs.ubuntu.com/meta-release-lts
URI_UNSTABLE_POSTFIX = -development
URI_PROPOSED_POSTFIX = -proposed

「すべてのバージョン」の場合は「URL」を、⁠LTSのみ」の場合は「URL_LTS」を取得します。余談ですが、よくupdate-manager -dを実行すると開発中のバージョにアップグレードするという解説を見かけます。これは「URL」ないし「URL_LTS」「URI_UNSTABLE_POSTFIX」を追加して取得します。例えばLTSだとhttps://changelogs.ubuntu.com/meta-release-lts-developmentとなります。

アップデートがあった場合、より具体的には、https://changelogs.ubuntu.com/meta-releaseまたはhttps://changelogs.ubuntu.com/meta-release-ltsを確認して現在使用中のリリースよりも新しいものがあった場合は/usr/lib/ubuntu-release-upgrader/release-upgrade-motdによって/var/lib/update-release-upgrade-avaliableが書き換えられます。

/var/lib/update-release-upgrade-avaliable/usr/lib/systemd/user/update-notifier-release.pathによって監視されており、変更があると/usr/lib/ubuntu-release-upgrader/check-new-release-gtkが起動します。すなわち/usr/lib/ubuntu-release-upgrader/check-new-release-gtkが図1のダイアログです。

アップグレード告知ダイアログの挙動

アップグレード告知ダイアログの挙動に関しては第671回で紹介したとおりで、ここでも少し省略して紹介します。

「アップグレードしない」をクリックすると、dconfの「/apps/update-manager/check-new-release-ignore」にアップグレード対象のコードネームを書き込みます。現在のバージョンが22.04 LTSで、⁠⁠ソフトウェアとアップデート」「アップデート」タブにある「Ubuntuの新バージョンの告知」「LTSのみ」の場合は、⁠noble」と書き込まれます。そして次のLTS(26.04予定)がリリースされると、再びアップグレードの対象となります。

「次回にたずねる」をクリックするとdconfの「/com/ubuntu/update-notifier/release-check-time」に、次に起動する時間をUNIX時間で記録します。ソースコードを確認したところ、クリックした日時の1週間後の同時刻現在時刻+7*24*60*60でした。

「今すぐアップグレードする」をクリックすると、do-release-upgradeが起動します。これは引数によってGTK3フロントエンド、KDEフロントエンドが使用できます。フロントエンドなし、すなわちコマンドラインでも実行できます。

Ubuntuで表示されるGTK3フロントエンドは図3です。まずリリースノートの案内から表示されます。do-release-upgradeをコマンドラインから実行してもまず最初に表示されるのはリリースノートの案内であり図4⁠、フロントエンドが違うだけであることがよくわかります。

図3 リリースノートを案内するダイアログ
図4 do-release-upgradeをコマンドラインから実行したところ

どんなことに使えるのか

これまで述べてきたことは、単なるユーザーにとってはあまり興味を引くことではないかもしれません。ただ、それなりの規模のUbuntu管理者であれば役に立つかもしれません。

というのも、/etc/update-manager/meta-releaseを見てもわかるとおり、ファイルはHTTPでアクセスできるところであればどこに置いてもいいわけです。また、中身も以下のような感じで、好きに書き換えることができます。

Dist: noble
Name: Noble Numbat
Version: 24.04.1 LTS
Date: Thu, 25 April 2024 23:59:59 UTC
Supported: 1
Description: This is the 24.04.1 LTS release
Release-File: http://archive.ubuntu.com/ubuntu/dists/noble-updates/Release
ReleaseNotes: http://archive.ubuntu.com/ubuntu/dists/noble-updates/main/dist-upgrader-all/current/ReleaseAnnouncement
ReleaseNotesHtml: http://archive.ubuntu.com/ubuntu/dists/noble-updates/main/dist-upgrader-all/current/ReleaseAnnouncement.html
UpgradeTool: http://archive.ubuntu.com/ubuntu/dists/noble-updates/main/dist-upgrader-all/current/noble.tar.gz
UpgradeToolSignature: http://archive.ubuntu.com/ubuntu/dists/noble-updates/main/dist-upgrader-all/current/noble.tar.gz.gpg

LAN内にUbuntuのミラーサーバーがあれば、インターネットにアクセスせずアップグレードすることも可能となります。台数が多いとアップグレードのスケジュールが大変になります。その要因の一つはインターネット回線またはサーバーの混み具合によりパッケージのダウンロードが変動し、作業時間が読めなくなることです。完全にLAN内で完結すれば、少なくともその心配はなくなります。

そのほか考えられることして、完全にオフラインでUbuntuをアップグレードせよという業務命令が下ったときにも有効な知識となるでしょう。apt-mirrorで取得したUbuntuのミラーと簡易なHTTPサーバーpython3 -mなど)があればなんとかできます。

おすすめ記事

記事・ニュース一覧