「apt」
ちなみにaptの機能紹介は本連載でも何度か行っています。より古いバージョンからアップグレードする場合は、そちらも参照してください。
- 第327回
「aptコマンドを使ってみよう」 - 第675回
「apt-keyはなぜ廃止予定となったのか」 - 第676回
「aptコマンドの最新機能あれこれ」 - 第677回
「aptで使うsources. listのオプションいろいろ 」
これらの記事では公開当時最新の2.
「apt 2.8.0」とは?
もう既にUbuntu 24.
Ubuntu 24.
しかしながら、Ubuntuにおいてサードパーティのリポジトリとしてよく使われる
W: https://ppa.launchpadcontent.net/(略)/InRelease: Signature by key (略) uses weak algorithm (rsa1024)
これがapt 2.
apt 2.
deb822形式への移行
利用者にとっての一番大きな変更点はやはり/etc/
」/etc/
」
deb822形式だと複雑なオプションが人間にも機械にも読みやすくなっている $ cat /etc/apt/sources.list.d/ubuntu.sources ## Ubuntu distribution repository (中略) ## See the sources.list(5) manual page for further settings. Types: deb URIs: http://jp.archive.ubuntu.com/ubuntu Suites: noble noble-updates noble-backports Components: main universe restricted multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg ## Ubuntu security updates. Aside from URIs and Suites, ## this should mirror your choices in the previous section. Types: deb URIs: http://security.ubuntu.com/ubuntu Suites: noble-security Components: main universe restricted multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
従来のsources.listファイルはただのコメントアウトとなっている $ cat /etc/apt/sources.list # Ubuntu sources have moved to the /etc/apt/sources.list.d/ubuntu.sources # file, which uses the deb822 format. Use deb822-formatted .sources files # to manage package sources in the /etc/apt/sources.list.d/ directory. # See the sources.list(5) manual page for details.
実はこの機能*.sources
」
おそらくdeb822形式における現時点での最大の利点は
1段階目の手順として、過去には/usr/
以下に配置し、それをsources.deb [signed-by=/usr/
」
これがdeb822形式を使うと、次のように記述できます。
Types: deb URIs: https://ppa.launchpadcontent.net/cosmos-door/build/ubuntu/ Suites: noble Components: main Signed-By: -----BEGIN PGP PUBLIC KEY BLOCK----- . mI0ESXT/dwEEAK5ZJF7rYtDdYJQakL+Jp1TmQS6H/6s36NQQl5ppvqqRmkegjqVx vjf27ksZWFkwNu/K+4gj3QPNQa/f8uZhIk7USqS3vplgx3V2MI5IyOmF5mL6ndNQ vvsjm7zBQB7qfnDVBdshBzty4J6DpiqIebn5puDVWC89EzoVFuytgdctABEBAAG0 IUxhdW5jaHBhZCBQUEEgZm9yIE1pdHN1eWEgU2hpYmF0YYi2BBMBAgAgBQJJdP93 AhsDBgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQZa/sBpluxTwzUQQAmMgMxLTN 4YSAEuRhgQpE5u8BkcTekKuxkEw8UM3TRfid8cbtxLqnpSyNrg3hCh8LcnofPy63 3wXqEu1u+V5f1jxzAgI0ajtg7aprnDWdl4TjIavuz5R8zRXmcxs6ajQr8BXww4G/ yt/ZsVTWo7xK+QWLFxdrOLxg7A1E8kV/uZI= =eid5 -----END PGP PUBLIC KEY BLOCK-----
「Signed-By:
」
ちなみに*.sources
」*.list
」
apt installやupgrade時にapt updateを実行するオプション
これまでパッケージをインストールするステップはsudo apt update
」sudo apt install FOO
」sudo apt upgrade
」sudo apt install FOO -U
」sudo apt upgrade -U
」sudo apt update
」
もう少し詳しく説明すると、最初のsudo apt update
」sudo apt update
する」
apt 2.apt install
」apt upgrade
」-U
」--update
」sudo apt update
する」
ちなみにupdateとその他の処理はアトミックに行われるわけではありません。つまりAPT関連のファイルのロックはupdate処理と、その他の処理で別々に取得しようとします。update完了後、その他の処理を開始する前に他のプロセスがAPTのロックを取ってしまうと、他の処理はエラー終了してしまうので注意してください。
snapshot.ubuntu.comで特定日時のリポジトリにアクセスできるようになった
一般的にUbuntuのパッケージリポジトリは
- ステージング環境で
「 apt update && apt upgrade
」を実行した状態でデプロイした - その状態で特に問題ないことが確認できた
- 本番環境で
「 apt update && apt upgrade
」を実行した状態でデプロイした - 実はステージング環境に対していくつかのパッケージが更新されていたため、ステージング環境と本番環境で中身が異なってしまっていた
もちろんコンテナのイメージを配布するなどの対策を取れば回避できますが、それでもベアメタルなマシンには使えません。そこで出てくるのがAptlyなどを利用して自前のミラーサーバーを用意し、そこで随時リポジトリスナップショットを取って活用することになるでしょう。大規模な数の運用である場合は、自前のミラーサーバーはほぼ必須であるためスナップショットの用意もそこまで大変ではありませんが、規模が小さくなると手間のほうが上回ってしまいます。
そこで登場したのがapt install hello
」
$ apt policy hello hello: インストールされているバージョン: (なし) 候補: 2.10-3build1 バージョンテーブル: 2.10-3build1 500 500 http://jp.archive.ubuntu.com/ubuntu noble/main amd64 Packages
これを
$ sudo apt install hello --update --snapshot 20240401T012345Z (中略) 取得:6 https://snapshot.ubuntu.com/ubuntu/20240401T012345Z noble InRelease [255 kB] 取得:7 https://snapshot.ubuntu.com/ubuntu/20240401T012345Z noble-updates InRelease [89.7 kB] 取得:8 https://snapshot.ubuntu.com/ubuntu/20240401T012345Z noble-backports InRelease [90.8 kB] 取得:9 https://snapshot.ubuntu.com/ubuntu/20240401T012345Z noble-security InRelease [90.7 kB] (中略) 取得:1 https://snapshot.ubuntu.com/ubuntu/20240401T012345Z noble/main amd64 hello amd64 2.10-3 [26.2 kB] 26.2 kB を 2秒 で取得しました (14.2 kB/s) 以前に未選択のパッケージ hello を選択しています。 (データベースを読み込んでいます ... 現在 180207 個のファイルとディレクトリがインストールされています。) .../hello_2.10-3_amd64.deb を展開する準備をしています ... hello (2.10-3) を展開しています... hello (2.10-3) を設定しています ... man-db (2.12.0-4build2) のトリガを処理しています ... install-info (7.1-3build2) のトリガを処理しています ...
「--update
」--snapshot 20240401T012345Z
」--update
の実行に時間がかかる)
特定の日時はYYYYMMDDThhmmssZ
」date -u -d "$(date -u -Iseconds)" +'%Y%m%dT%H%M%SZ'
」
「--snapshot
-S
)」オプションは、apt install
」apt policy
」.sources
ファイルに次のように記述します。
Types: deb
URIs: http://jp.archive.ubuntu.com/ubuntu
Suites: noble noble-updates noble-backports
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Snapshot: 20240401T012345Z
ちなみにこの機能自体はUbuntu 20.snapshot=yes
」
deb [snapshot=yes] http://archive.ubuntu.com/ubuntu/ jammy main restricted
また、過去にたどれるのは
他にも、環境変数NO_
に任意の値を設定したり、/etc/
などでbinary::apt::APT::Color "0";
」apt install
時にdebファイルを指定した際の補完方法が賢くなったとか、apt検索時のパターンマッチングが強化されなど、細かい変更点はいろいろ存在します。
Ubuntu 24.