disclaimer:本稿は赤帽エンジニアブログの「RHEL小技: 実際にアップデートせずにアップデートに必要なパッケージを確認・ダウンロードする」を拝見して衝動的に書かれた、いわばパロディ記事です。
お仕事とDebian11リリースのためのバグつぶしと幼児の相手等でヘロヘロになってるDebian developerのやまねです。
今日はDebian/Ubuntu小技ということで、実際にアップデートせずにアップデートに必要なパッケージを確認・ダウンロードする方法をご紹介します。
パッケージの確認
まずは管理者権限で apt update
してパッケージデータベースを最新にしておきます。
$ sudo apt update
ヒット:1 http://security.debian.org/debian-security bullseye-security InRelease
ヒット:2 http://debian-mirror.sakura.ne.jp/debian bullseye InRelease
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
アップグレードできるパッケージが 12 個あります。表示するには 'apt list --upgradable' を実行してください。
親切にも「アップグレードできるパッケージが 12 個あります。表示するには ‘apt list –upgradable’ を実行してください。」との文言が出てますね。実行してみましょう(システムへの変更は行わないので管理者権限は不要です)。
$ apt list --upgradable
一覧表示... 完了
firefox-esr-l10n-ja/testing 78.12.0esr-1 all [78.11.0esr-1 からアップグレード可]
firefox-esr/testing 78.12.0esr-1 amd64 [78.11.0esr-1 からアップグレード可]
libgtk-layer-shell0/testing 0.5.2-2 amd64 [0.5.2-1 からアップグレード可]
libnss-myhostname/testing 247.3-6 amd64 [247.3-5 からアップグレード可]
libnss-systemd/testing 247.3-6 amd64 [247.3-5 からアップグレード可]
libpam-systemd/testing 247.3-6 amd64 [247.3-5 からアップグレード可]
libsystemd0/testing 247.3-6 amd64 [247.3-5 からアップグレード可]
libudev1/testing 247.3-6 amd64 [247.3-5 からアップグレード可]
systemd-sysv/testing 247.3-6 amd64 [247.3-5 からアップグレード可]
systemd-timesyncd/testing 247.3-6 amd64 [247.3-5 からアップグレード可]
systemd/testing 247.3-6 amd64 [247.3-5 からアップグレード可]
udev/testing 247.3-6 amd64 [247.3-5 からアップグレード可]
以上のように「apt list –upgradable」を使うと、「apt upgrade」でアップデートされるパッケージとそのバージョンの一覧を表示します。
…あれ?でも「RHEL小技」の場合はパッケージを指定していましたね?今回の場合はsystemdとfirefoxなど「アップグレード可能なパッケージ全て」を表示してしまいます。おそらく「特定パッケージのみの更新を考慮したい」ということがあるでしょう。その場合は「apt install -s <パッケージ名>」を指定します。
では、試しにsystemdだけに限って指定してみましょう。
$ apt install -s systemd
注意: これはシミュレーションにすぎません!
apt は実際の実行に root 権限を必要とします。
ロックが非アクティブであることから、今この時点の状態に妥当性が
あるとは言い切れないことに注意してください!
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
libnss-systemd libpam-systemd libsystemd0 systemd-timesyncd
提案パッケージ:
systemd-container
以下のパッケージはアップグレードされます:
libnss-systemd libpam-systemd libsystemd0 systemd systemd-timesyncd
アップグレード: 5 個、新規インストール: 0 個、削除: 0 個、保留: 7 個。
Inst libnss-systemd [247.3-5] (247.3-6 Debian:testing [amd64]) []
Inst systemd-timesyncd [247.3-5] (247.3-6 Debian:testing [amd64]) []
Inst libpam-systemd [247.3-5] (247.3-6 Debian:testing [amd64]) []
Inst systemd [247.3-5] (247.3-6 Debian:testing [amd64]) []
Inst libsystemd0 [247.3-5] (247.3-6 Debian:testing [amd64])
Conf libsystemd0 (247.3-6 Debian:testing [amd64])
Conf libnss-systemd (247.3-6 Debian:testing [amd64])
Conf systemd-timesyncd (247.3-6 Debian:testing [amd64])
Conf libpam-systemd (247.3-6 Debian:testing [amd64])
Conf systemd (247.3-6 Debian:testing [amd64])
以上のように、systemd の最新パッケージをインストールしようとすると「libnss-systemd libpam-systemd libsystemd0 systemd-timesyncd」の各パッケージもアップデートが必要だということがわかりますね。
パッケージのダウンロード
$ apt download <パッケージ名> を使いましょう。
「apt download」ではパッケージのダウンロードだけを行いインストールをしません。ダウンロードされたパッケージはコマンドを実行したディレクトリ直下に保存されます。
$ apt download systemd
取得:1 http://debian-mirror.sakura.ne.jp/debian bullseye/main amd64 systemd amd64 247.3-6 [4,495 kB]
4,495 kB を 1秒 で取得しました (4,723 kB/s)
$ ls ./*.deb
./systemd_247.3-6_amd64.deb
…でも、一個一個指定していくのは面倒ですね。「『特定パッケージのアップグレード時に必要なパッケージ』をすべてダウンロードしたい」とい場合は「-d」オプションを使って「$ sudo apt install -d <パッケージ名>」としてダウンロードオンリーモードでの実行を行います。
$ sudo apt install -d systemd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
libnss-systemd libpam-systemd libsystemd0 systemd-timesyncd
提案パッケージ:
systemd-container
以下のパッケージはアップグレードされます:
libnss-systemd libpam-systemd libsystemd0 systemd systemd-timesyncd
アップグレード: 5 個、新規インストール: 0 個、削除: 0 個、保留: 7 個。
5,482 kB のアーカイブを取得する必要があります。
この操作後に追加で 0 B のディスク容量が消費されます。
続行しますか? [Y/n] y
取得:1 http://debian-mirror.sakura.ne.jp/debian bullseye/main amd64 libnss-systemd amd64 247.3-6 [198 kB]
(中略)
5,482 kB を 1秒 で取得しました (3,823 kB/s)
ダウンロードオンリーモードでパッケージのダウンロードが完了しました
ファイルは「/var/cache/apt/archives/
」ディレクトリ以下に保存されています。どのリポジトリから取得したのか、というのは問いません。「$ sudo find /var/cache/apt/archives/ -type f -name "*deb"
」とすればファイル一覧が取得できるでしょう。
$ sudo find /var/cache/apt/archives/ -type f -name "*deb"
/var/cache/apt/archives/libnss-systemd_247.3-6_amd64.deb
/var/cache/apt/archives/systemd_247.3-6_amd64.deb
/var/cache/apt/archives/libpam-systemd_247.3-6_amd64.deb
/var/cache/apt/archives/systemd-timesyncd_247.3-6_amd64.deb
/var/cache/apt/archives/libsystemd0_247.3-6_amd64.deb
apt を使わずにできるか?
yumだろうがaptだろうが、パッケージマネージャーのやることは同じですのでその答えは言わずともがな…ですね。
まとめ
ややこしい所はaptがやってくれるので、aptを使いましょう 🙂