Debian/Ubuntu小技: 実際にアップデートせずにアップデートに必要なパッケージを確認・ダウンロードする

package

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を使いましょう 🙂

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

1人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です