aptitude vs apt-get

結論

ubuntu 6.10 以降は apt-get / apt-cache を使えaptitude はやめとけ).

詳細

aptitude はトラブルが多すぎる([2] 2.2.1 apt-get/apt-cache vs. aptitude 参照).また,トラブルが起こった場合に面倒になりすぎる.複雑なソフトウェアは問題を起こしがちだし,問題が起こったときの対策もわかりづらい.設計時に想定していた各種前提が時代にそぐわなくなってきたときの対応も難しい.

aptitude の優位性として以前よくあげられていた特長は既に apt-get に取り込まれているか,他の周辺ツールなどでカバーされているいて消滅している.

  1. 孤児パッケージの自動削除
  2. インタラクティブUI

備考 推奨パッケージ自動インストールなんぞ余計なお世話

aptitude の優位性として,ときどき“推奨パッケージ(recommends)を自動でインストールしてくれる”というのをあげる人もいるけど,はっきりいって余計なお世話です.必要なパッケージ(依存関係のあるパッケージ = depends)はインストールしてもらわなきゃいけないわけですけど,推奨パッケージ(recommends)が本当に必要かどうかは疑わしいです.

apt-get では“コレもインストールするといいかもしれません”のような“オススメ情報”が表示されて,あとはユーザーの判断にまかせるわけですけど,aptitude は聞かずにインストールしてしまいます.また,結局 推奨パッケージをインストールするにしても,ソフトウェア センターのように,一覧からどのようなソフトかを確認して納得したのちに明示的にチェックをつけてインストールするといった流れが適切だと思います.aptitude の推奨パッケージ自動インストールの仕組みで,“ベンダー側が入れさせたいソフト”をゴリ押ししてくるとか,楽天のメルマガかよ,みたいな状態じゃありません?

備考 apt-get autoremove

ubuntu 6.10 から apt-get autoremove がサポートされた[6].これにより,孤児パッケージができないようにする意図で aptitude を使う意味はなくなっている.また,アンインストール時に autoremove オプションを指定する方法ではなく,孤児パッケージの削除だけを実施したい場合は,deborphan や gtkorphan を使うこともできる.

ただし,実際に どのくらいアグレッシブに孤児パッケージを除去しようとするかという意味では,依然として aptitude の方が かなり優位という報告もある[6].ただ,それだけにトラブルも多く発生しており[2],ディスクの大容量化などとあいまって,孤児パッケージなんか気にしないでおけばよいのでは?という考え方もある.

参考情報

各種パッケージ管理ツールの関係

高次← →低次



ubuntu Software Center
Synaptic
aptitude
dselect



apt (apt-get/apt-cache)



dpkg

aptitude と apt-get の併用

aptitude は内部で apt-get を呼び出しているため,実質的なパッケージ管理は apt-get の DB で統合されており,安全に併用できるようになってきている(どういう場合に危険かが特定されてきており,運用回避が可能).ただし,“OSアップグレード”をまたいだ使用は面倒が起こりやすいことも知っておく必要がある[2].

備考

以前は“aptitude と apt-get の併用は危険”といわれていた.これは,古い aptitude が独自にパッケージ管理情報を保持していたためで,他のツールと併用すると aptitude を使わずにインストールしたパッケージの情報が欠落するためである.aptitude はパッケージをアンインストールする場合に,そのパッケージが利用していた依存パッケージ群のうち不要になるものも削除しようとするが,管理情報が欠落していると まだ利用中のパッケージまで不要になったと誤判断してしまう.

この問題は,Debian 5.0 (lenny, 2009-02-14) で apt-get と aptitude が自動インストールされたパッケージ状態を共有するようになったことで解消した[2].現在は aptitude は独自で情報をもつことをやめ,管理を apt 側に任せている([1]「2.5.5. APTに関するパッケージ状態」参照).

雑多なメモ

apt のソフトウェア リストや依存関係は /etc/apt/sources.list に記述されているアドレスからダウンロードされる.このファイルは,「システム」→「システム管理」→「ソフトウェア・ソース」からも書き換えられる.

用語

孤児パッケージ
orphan packages
他のパッケージAをインストールした際に依存関係があったために同時にインストールされたパッケージ群で,Aがアンインストールされたことで,必要ないのに取り残されてしまった状態になっているもののこと.親子関係の親がいなくなった状態.
apt APT (Advanced Packaging Tool). Debian用パッケージ管理システム.具体的には apt-get / apt-cache コマンドのこと.
apt-cache apt が提供するコマンドのひとつで,ソフトウェアを検索する際に使用する.正規表現による検索もできる…が,いまどきネットで ぐぐる方が早いため,きわめて影が薄いかも.

参考資料

[1] Debian.org: 2. Debian package management
[2] Debian.org: 2. Debian package management - 2.2. Basic package management operations
[3] ubuntu: Ubuntu Software Center
[4] Wikipedia.jp: Ubuntuソフトウェアセンター
[5] Debian.org: 初心者のための dselect 入門
“第2章 dselect が起動したら”の部分の記述が興味深い.apt より上位のツール群に共通の問題として“とにかく遅い”ことがあげられる.この分野の初期のチャレンジャーである,dselect のマニュアルの「2.3 選択」が「さて,驚かないでほしいのですが…」からはじまることが今でも共通の問題として残っている.
[6] aptitude versus apt-get
いつの記事か明示されていないが,内容から ubuntu 6.10 リリース前後,2006年10月ごろと思われる.
[7] やまだあきら: 入門 Debian パッケージ,技術評論社,2006.技術評論社
よくまとまっているが,少々古いのが難点… 現在の仕組みがどうなっているのかという意味では既にアテにならないかも(最新状況にあわせた新版などもでていない).ただ,2006年当時(執筆はさらに前?)どうだったかの記録としては有意義かも.apt を中心に,aptitude, apt, dpkg が解説されている.
[8] Ubuntu日本語フォーラム: apt-getからaptitudeへの乗り換え
[9] apt-get から aptitude へ

はたいたかし
https://exlight.net/
2013-01-18