パッケージインデックスファイルの圧縮提案
「Ubuntu 18.04」にてパッケージインデックスファイルの圧縮を有効にしてみてはどうか、提案が行われました。パッケージインデックスファイル
パッケージインデックスファイルはパッケージの情報(リポジトリーの情報)が記述されたファイルであり、「/var/lib/apt/lists」フォルダー以下に配置されます。パッケージインデックスファイルは、「apt update」を実行した時に更新されます。
例えば「gedit」パッケージの情報を見てみると、以下のように記述されています。
Package: gedit
Priority: optional
Section: gnome
Installed-Size: 1826
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
Architecture: amd64
Version: 3.22.0-2ubuntu1
Replaces: gedit-common (<< 3.18.1-1ubuntu1)
Depends: python3:any (>= 3.3.2-2~), python3.5, libatk1.0-0 (>= 1.12.4), libc6 (>= 2.4), libcairo2 (>= 1.2.4), libgdk-pixbuf2.0-0 (>= 2.25.2), libgirepository-1.0-1 (>= 0.9.3), libglib2.0-0 (>= 2.44), libgspell-1-1 (>= 1.0.0), libgtk-3-0 (>= 3.21.4), libgtksourceview-3.0-1 (>= 3.21.5), libpango-1.0-0 (>= 1.14.0), libpeas-1.0-0 (>= 1.14.1), libx11-6, libxml2 (>= 2.7.4), gir1.2-gtk-3.0, gir1.2-gtksource-3.0, gedit-common (>= 3.22), gedit-common (<< 3.23), gsettings-desktop-schemas, python3-gi (>= 3.0), python3-gi-cairo (>= 3.0), gir1.2-peas-1.0, gir1.2-glib-2.0, gir1.2-pango-1.0, iso-codes
Recommends: zenity, yelp
Suggests: gedit-plugins
Filename: pool/main/g/gedit/gedit_3.22.0-2ubuntu1_amd64.deb
Size: 400006
MD5sum: a376289cc946e1d9704640e516c73503
SHA1: bd2c5830198eff102677b5aea06b107442b519e0
SHA256: 3b0ec657752ea7f6074630ee520b15f39f69fa29448f95436ab477d1332f85f5
Description: official text editor of the GNOME desktop environment
Homepage: https://wiki.gnome.org/Apps/Gedit
Description-md5: 5091aaf6659e6bf7ca9b32695a59f9cd
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
Supported: 9m
Task: ubuntu-desktop, ubuntu-usb, edubuntu-desktop, edubuntu-usb, ubuntu-gnome-desktop, ubuntukylin-desktop, ubuntu-budgie-desktop
Priority: optional
Section: gnome
Installed-Size: 1826
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org>
Architecture: amd64
Version: 3.22.0-2ubuntu1
Replaces: gedit-common (<< 3.18.1-1ubuntu1)
Depends: python3:any (>= 3.3.2-2~), python3.5, libatk1.0-0 (>= 1.12.4), libc6 (>= 2.4), libcairo2 (>= 1.2.4), libgdk-pixbuf2.0-0 (>= 2.25.2), libgirepository-1.0-1 (>= 0.9.3), libglib2.0-0 (>= 2.44), libgspell-1-1 (>= 1.0.0), libgtk-3-0 (>= 3.21.4), libgtksourceview-3.0-1 (>= 3.21.5), libpango-1.0-0 (>= 1.14.0), libpeas-1.0-0 (>= 1.14.1), libx11-6, libxml2 (>= 2.7.4), gir1.2-gtk-3.0, gir1.2-gtksource-3.0, gedit-common (>= 3.22), gedit-common (<< 3.23), gsettings-desktop-schemas, python3-gi (>= 3.0), python3-gi-cairo (>= 3.0), gir1.2-peas-1.0, gir1.2-glib-2.0, gir1.2-pango-1.0, iso-codes
Recommends: zenity, yelp
Suggests: gedit-plugins
Filename: pool/main/g/gedit/gedit_3.22.0-2ubuntu1_amd64.deb
Size: 400006
MD5sum: a376289cc946e1d9704640e516c73503
SHA1: bd2c5830198eff102677b5aea06b107442b519e0
SHA256: 3b0ec657752ea7f6074630ee520b15f39f69fa29448f95436ab477d1332f85f5
Description: official text editor of the GNOME desktop environment
Homepage: https://wiki.gnome.org/Apps/Gedit
Description-md5: 5091aaf6659e6bf7ca9b32695a59f9cd
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
Supported: 9m
Task: ubuntu-desktop, ubuntu-usb, edubuntu-desktop, edubuntu-usb, ubuntu-gnome-desktop, ubuntukylin-desktop, ubuntu-budgie-desktop
「APT」の各種ツール群は、このパッケージインデックスファイルを参照することで、実際にパッケージをインストールせずとも、どのようなパッケージが利用できるのか、パッケージのバージョン番号、パッケージの説明や依存関係など様々な情報を取得することができます。
さてパッケージインデックスファイルはテキストファイルであるため、圧縮により大きくディスクスペースを節約することができます。
提案では、これらパッケージインデックスファイルを「LZ4」で圧縮し、そしてその圧縮の有効化を「apt 1.6~alpha1」で行いたいとのことです。
これは「Acquire::gzipIndexes」設定を「true」に変更することで、圧縮を有効にします。
どれだけディスクスペースを節約できるのか
提案者の環境では圧縮の有効化により、「/var/lib/apt/lists」フォルダーのサイズが1.3GBから241MBまで減らせたとのことです。Ubuntu 17.10 64bit版のサイズ
ほぼクリーンインストールした環境と変わらない「Ubuntu 17.10 64bit版」で「/var/lib/apt/lists」フォルダーのサイズを見てみたところ、約170MB程度でした。PPAや外部レポジトリーの追加など、参照するリポジトリー数が増えればパッケージインデックスファイルも増えます。
圧縮の有効化による課題
パッケージインデックスファイルの圧縮を有効化に際し、以下の課題が挙げられています。一部のツールが動作しなくなる
パッケージインデックスファイルがテキストファイルであることを前提に動作するソフトウェアは、パッケージインデックスファイルの圧縮化により動作しなくなります。そのため圧縮の有効化と共にこれらのソフトウェア群も修正する必要があります。
提案者はDebianを利用しており、圧縮化に影響を受けるソフトウェア群を以下で列挙しています。
パフォーマンスの低下
パッケージインデックスファイルの中身を参照するということは、圧縮されたパッケージインデックスファイルを展開してから、中身を参照しなければなりません。そのため今まで必要なかった「展開」という処理が必要になります。