Advanced Package Tool に関する覚え書き
先日 Firefox がやらしたじゃないですか。
証明書の期限切れでアドオンが全部排除されるというバグとしてはありがちなやつなんだけど, Mozilla が改修版(v66.0.4)を出してから Ubuntu の APT でアップデートできるようになるまで概ね2日ほどかかってるのよ。
今回の件で自機でのアプリケーションあるいはパッケージ管理について,ちょっと考えてしまった。 そこでまずは APT について調べ直すところから始めることにした。
dpkg と Advanced Package Tool
皆さんご存知の通り Ubuntu は Debian から fork したディストリビューションでアプリケーション管理も Debian のものを踏襲している。
アプリケーションのビルド済みバイナリや関連ファイルにバージョン情報や依存情報等のメタデータを付加したものを(ar/tar/gzip/bzip2 などで)ひとまとめにしたものを「パッケージ」と呼ぶ。
Debian/Ubuntu では .deb
の拡張子が付いたファイルがそのパッケージファイルで,パッケージファイルを利用するためのツールが dpkg である。
ただし dpkg にはプリミティブな機能しかないため一般のユーザが dpkg をそのまま使うことはまずない。 一般ユーザ用のフロントエンド(のひとつ)が APT (Advanced Package Tool) ということになる。
APT はバックエンドにパッケージ管理用のデータベースを持っていて1,このデータベースをもとにパッケージ間の依存関係を維持しながら可能な限り自動で導入や削除を行おうとする。
したがってデータベースにないパッケージは APT では導入できない。 この場合は以下の3つの手段をとることができる。
- サードパーティのリポジトリを登録して APT から導入できるようにする
- deb ファイルを使って直接インストールする
- ビルド済みバイナリを直接展開して導入する。またはソースファイルから直接ビルドを行う
Ubuntu パッケージのリリースサイクル
Ubuntu は概ね半年ごとにアップグレードされ,リリース時の年月がそのままバージョン番号になっている。 たとえば先日2019年4月にリリースされたバージョンには 19.04 が振られている。
Ubuntu に収録されるパッケージは OS リリース時にバージョンが固定され重大な不具合や脆弱性が発覚しない限り更新されることはないようだ。 先日の Firefox の件はむしろ例外的に早い対応だったということになる。
しかし,昨今は活況なソフトウェアほどリリースサイクルが短い傾向があり半年というタイムスケールでは追いつかないことも多い。 自身でリスクを引き受けてでも APT による管理を離れて自前で最新バージョンを維持したいという要求もあると思う。
つまり APT で管理可能なパッケージについても
- APT で導入する
- deb ファイルを使って直接インストールする
- ビルド済みバイナリを直接展開して導入する。またはソースファイルから直接ビルドを行う
という3つの手段をとり得るわけだ。
そこで以降からは管理方法毎によく使うパッケージを分類してみる。 なお,この分類は私の独断と偏見に依る部分が大きいので,他の人にはあまり参考にならないであろう点は先に誤っておく。 ゴメンペコン。
公式リポジトリから APT を使って管理するパッケージ
セキュリティ関連ツールなのでしょうがない
以下のパッケージはセキュリティ関連ツールで,これらに依存するパッケーも多く,特に保守的な運用になっているようだ。 したがって安定的な運用を優先し APT による管理とする。
製品名 | パッケージ名 | 備考 |
---|---|---|
GnuPG | gnupg |
既定でインストール済 |
OpenSSH | openssh-client |
クライアント側。既定でインストール済 |
OpenSSL | openssl |
既定でインストール済 |
以下も参考にどうぞ
APT に任せて安心なパッケージ
以下は何も考えずに APT に任せても大丈夫だろう。 不具合や脆弱性への対応はどうしても遅れるが今のところは許容範囲ということで。
製品名 | パッケージ名 | 備考 |
---|---|---|
Firefox | firefox |
既定でインストール済 |
ifconfig | net-tools 2 |
何故か既定で入ってなかった |
curl | curl |
何故か既定で入ってなかった |
KDiff3 | kdiff3 |
|
Graphviz | graphviz |
|
vim | vim |
既定で入ってるのは vim-tiny で vim を入れると置き換わる |
BOINC | boinc-client , boinc-manager |
クライアント側 |
Firefox については公式サイトで実行イメージがダウンロード可能になっていて,そちらを取ってきて使うこともできるが,完全に APT の管理を離れてしまい,かつ APT で管理されるバージョンと混在になってしまうので考えどころではある。 Firefox Developer Edition を使うなら混在もありかも。
その他
依存関係とか導入手順とかが複雑で自前で管理するのが面倒くさい,て感じのパッケージ。
製品名 | パッケージ名 | 備考 |
---|---|---|
GCC 等 | build-essential |
何故か 18.10 には既定で入ってなかった |
CIFS Client | cifs-utils |
導入方法は拙文を参照のこと |
ClamAV | clamav , clamav-daemon |
導入方法は拙文を参照のこと |
サードパーティ・リポジトリから APT を使って管理するパッケージ
Git
公式リポジトリでも導入可能だが最新版が欲しかったので PPA のリポジトリを使うことにした。 詳しくは
を参照のこと。
Mono
インストールにはサードパーティ・リポジトリの登録と署名検証用の公開鍵の取得が必要。 詳しくは
を参照のこと。
ATOM エディタ
インストールにはサードパーティ・リポジトリの登録と署名検証用の公開鍵の取得が必要。 詳しくは
で紹介している。
また deb ファイルを使って直接インストールすることも可能。 詳しくは
を参照のこと。
deb ファイルを使って直接インストールする
deb ファイルを使って直接インストールするには gdebi を使うのがオススメである。 導入は APT からできる。
$ sudo apt install gdebi-core
これで
$ sudo gdebi foo.deb
とすれば依存パッケージも含めてインストールしてくれる。 内部で APT のデータベースを使ってるのかな。
自前で導入する場合は最新バージョンに常に注意すること。
Hugo
いや,シングルバイナリで依存関係も殆どないので deb ファイルからインストールする必然性は微塵もないのだが,どうも APT からインストールできるパッケージが全く追従できてないみたいなので。
リリースページから最新版の deb ファイルを取ってきてインストールすればよい。
$ sudo gdebi ./hugo_0.55.5_Linux-64bit.deb
LibreOffice
LibreOffice は公式ページにあるバージョンが無難なようである。 詳しくは
ビルド済みバイナリを直接展開して導入する
自前で導入する場合は最新バージョンに常に注意すること。
Go コンパイラ
Go コンパイラ自体は APT でも導入可能だが,お互いのリリースタイミングが悪いのか2世代もバージョンが古い。
これでは使いものにならないので(Go コンパイラの公式サポートは1世代前まで),ダウンロードページから go1.xx.x.linux-amd64.tar.gz
ファイルを取ってきて任意の場所に展開して使う。
$ cd /usr/local/src
$ sudo curl https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz -O
$ cd ..
$ unlink go # 以前の Go が入っている場合
$ sudo tar xvf src/go1.12.5.linux-amd64.tar.gz
$ sudo mv go go1.12.5
$ sudo ln -s go1.12.5 go
$ ./go/bin/go version
go version go1.12.5 linux/amd64
bin/
ディレクトリにはパスを通しておけば大丈夫。
FileZilla
これも APT で導入可能なのだが,だいぶバージョンが古いので,ダウンロードページから取ってきたファイルを展開して使うことにする。
$ cd /usr/local/
$ sudo tar xvf src/FileZilla_3.42.1_x86_64-linux-gnu.tar.bz2
$ sudo chown -R root:root FileZilla3
chown
でオーナーを変えるのを忘れないように。
Git Extensions
Mono がインストールされていることが前提。 詳しくは
を参照のこと。
TeX Live
TeX Live に関しては(大量のパッケージがあるため)最新の環境が必要ないのであれば APT を使うほうがオススメである。
$ apt show texlive
Package: texlive
Version: 2018.20190227-1
Priority: optional
Section: universe/tex
Source: texlive-base
Origin: Ubuntu
...
が,やっぱり最新の環境がほしいので手動でインストールすることにした。
手動でインストールする場合はインストーラ install-tl
を使う。
TeX Live 内の各パッケージの更新には tlmgr を使う。
$ sudo tlmgr update --self --all
詳しくは
- [TeX Live を Ubuntu に(APT を使わずに)導入する](https://text.baldanders.info/remark/2019/04/install-texlive-in-ubuntu/)
を参照のこと。
OpenJDK
詳しくは
を参照のこと。
Thunderbird
詳しくは
を参照のこと。
ソースファイルから直接ビルドを行う
自前で導入する場合は最新バージョンに常に注意すること。
pgpdump のビルド
実は APT で導入できるっぽいのだが,自作の gpgpdump の動作確認用にリファレンス実装として最新版が必要なのよ。 GCC 等のツールチェーンがあれば簡単にビルドできる。
リポジトリからソースコードを取ってきて
$ ./configure
$ make
でビルドできる。
なお圧縮パケットの解凍に bz2 が必要な場合は APT でパッケージ libbz2-dev
をあらかじめインストールしておくこと。
git-credential-libsecret のビルド
git-credential 用に git-credential-libsecret をビルドする。
libsecret 自体のインストールは APT で行う。
$ sudo apt install libsecret-1-dev libgnome-keyring-dev
これで展開されるソースコードを適当な場所にコピーしてビルドする。
$ cp -r /usr/share/doc/git/contrib/credential/libsecret ~/work
$ cd ~/work/libsecret
$ make
gcc -g -O2 -Wall -pthread -I/usr/include/libsecret-1 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -o git-credential-libsecret.o -c git-credential-libsecret.c
gcc -o git-credential-libsecret git-credential-libsecret.o -lsecret-1 -lgio-2.0 -lgobject-2.0 -lglib-2.0
ビルドした git-credential-libsecret をパスの通ったディレクトリに入れれば完了。