apt リポジトリの参照先をミラーから初期設定に戻した話

(最終更新: )

2024/01/30 追記

この記事を書いた後 IPA に対してこの問題について問い合わせたところ、迅速にご対応頂きました。
そのため、現在ではこの問題は修正されています

ご対応頂いた職員の皆さま、迅速に対応して頂きありがとうございました。

概要

Ubuntu サーバーの apt リポジトリとして、これまでは https://ftp.udx.icscoe.jp/Linux/ubuntu/ を使っていたのですが、初期設定の http://jp.archive.ubuntu.com/ubuntu/ に戻しました。

経緯

ftp.udx.icscoe.jp はIPAの産業サイバーセキュリティセンターが運営するリポジトリミラーサーバーです。100Gbpsの高速回線で様々なディストリビューションのリポジトリミラーを提供しており、パッケージのアップデートやインストールが爆速になるので、これまで好んで使っていました。

しかし先日インフラ関係のエラーにぶち当たった時、もしかしたらパッケージ周りの問題かもしれないと考えてリポジトリを元の jp.archive.ubuntu.com に戻したのですが、およそ60個のパッケージアップデートが一気に降ってきました。

結局問題は別にありアップデートによって解決はしなかったのですが、どうやら ftp.udx.icscoe.jp では最新のパッケージが降ってこないのではということに気が付きました。

調査

状況を鑑みて既に手元にある起動中の VM は jp.archive.ubuntu.com でアップデートしてしまったので、アーカイブ状態で眠らせていた VM を引っ張り出してきて ftp.udx.icscoe.jp でアップデートしてみました。その後、リポジトリを jp.archive.ubuntu.com に変更してアップデートを確認すると、これだけのパッケージがさらにアップデート可能であると表示されます。

list-of-skipped-upgrading-packages-with-icscoe

つまり ftp.udx.icscoe.jp を参照先にしているサーバーは、これらのパッケージアップデートを受け取れていないということを意味します。

しかし、公式が掲載しているミラーサーバーの一覧である Mirrors: Ubuntu を確認すると、リポジトリ自体の Status は Official、各 Version における Status は Up to date となっていることが確認できます。これは実際の結果と矛盾しています。

ubuntu-official-mirror-icscoe-1

ubuntu-official-mirror-icscoe-2

リポジトリの中身を見る

なぜこのようなことが起きているのか、リポジトリの中身を調査します。もし本当に Up to date であれば、ミラーサーバーには最新のパッケージが載っているはずです。アップデートされなかった一覧の中から適当に1つピックアップして、jp.archive.ubuntu.com と比較してみます。今回は udev で行いました。

compare-udev-between-two-repository

驚くべきことに、ちゃんと udev の最新版が配布されていることが分かります。しかし手元の Ubuntu でアップデートを確認しても最新のパッケージは降りてきません。

apt update は何をしているのか

最新のパッケージが存在するのに apt update でそれが取得されないのはなぜなのか、apt CLI の挙動を追って確かめます。

実際に sudo apt update を実行すると、リポジトリの参照先は違えど以下のようなログが出ると思います。

$ sudo apt update
Hit:1 http://jp.archive.ubuntu.com/ubuntu lunar InRelease
Hit:2 http://security.ubuntu.com/ubuntu lunar-security InRelease
Hit:3 http://jp.archive.ubuntu.com/ubuntu lunar-updates InRelease
Hit:4 http://jp.archive.ubuntu.com/ubuntu lunar-backports InRelease

この InRelease ファイルとは何でしょうか?DebianRepository/Format を読むと、このように記載されています。

The Release file lists the index files for the distribution and their hashes (the index file listed are relative to Release file location).
To download the index of the main component, apt would scan the Release file for hashes of files in the main directory.

https://wiki.debian.org/DebianRepository/Format より引用

つまりパッケージに関するハッシュ値を纏めてあるファイルであり、これらのハッシュ値を元にアップデートが存在するかどうかを確認していることが分かります。

実際に手元の InRelease ファイルを確認してみると、このようにファイルごとにMD5ハッシュ値が羅列されています。

/var/lib/apt/lists/jp.archive.ubuntu.com_ubuntu_dists_lunar_InRelease

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Origin: Ubuntu
Label: Ubuntu
Suite: lunar
Version: 23.04
Codename: lunar
Date: Thu, 20 Apr 2023 14:50:49 UTC
Architectures: amd64 arm64 armhf i386 ppc64el riscv64 s390x
Components: main restricted universe multiverse
Description: Ubuntu Lunar 23.04
MD5Sum:
 235621811467d9b3bc7c1154bf1b7b78        806104149 Contents-amd64
 22b145f60a40a9e0e947f49f93116d98         50213822 Contents-amd64.gz
 ef74edd9f84e902310200b709f809b51        800025028 Contents-arm64
 b2c283e2108fb632304e5d32b959ca91         49885109 Contents-arm64.gz
 cf3d7d6e53dbeb084087824a9fd406d6        754780224 Contents-armhf
 e661d6dc9f47522a320938511b160fdc         47471560 Contents-armhf.gz
 846edfe758856c000ce4091d74ba6696        658206584 Contents-i386
 a1fd2bc3862d71827b9c3ce17970f832         39711454 Contents-i386.gz

(あと2700行ほど続く)

つまりこのハッシュ値が変化しなければ、最新のパッケージがダウンロード可能であってもアップデートは存在しないものと見做されます。

InReleaseファイルを比較する

では InRelease ファイルを ftp.udx.icscoe.jp および jp.archive.ubuntu.com で比較してみます。上が jp.archive.ubuntu.com で、下が ftp.udx.icscoe.jp です。

compare-inrelease-between-two-repository-jp-archive

compare-inrelease-between-two-repository-icscoe

jp.archive.ubuntu.com は最終更新日時が1月20日となっており、直近の更新が InRelease ファイルにも反映されていることが分かります。しかし ftp.udx.icscoe.jp のリポジトリから取得した InRelease ファイルで最も最近変更されたファイルは 2023年4月24日 です。ftp.udx.icscoe.jp では InRelease ファイルが更新されていないことが分かります。

パッケージのハッシュ値が更新されていないため、アップデートが公開されていても apt CLI はハッシュ値を元にアップデートが無いものと見做します。これが原因でアップデートが行われないようです。

対応策

リポジトリが壊れている以上、他のリポジトリを参照するしかありません。とりあえず日本における初期設定の jp.archive.ubuntu.com が確実かと思われます。

山形大学のミラーサーバーである linux.yz.yamagata-u.ac.jp なども試してみましたが、同様に InRelease ファイルが更新されていません。しかも最終更新日時が ICSCoE と近いです。2023年4月24日ごろに Origin サーバーに何らかの仕様変更があったのかもしれません。

あとがき

リポジトリ参照先を変えても security.ubuntu.com の部分は変えないこと。重要です。
( 参考: security.ubuntu.comはそのままで )