6.2. aptitude
と apt-get
コマンド
APT は巨大なプロジェクトで、当初の予定ではグラフィカルインターフェースを含んでいました。APT はライブラリに基づいており、ライブラリにはコアアプリケーションが含まれています。apt-get
は最初のフロントエンド - コマンドラインベース - で、APT プロジェクト内で開発されました。
外部プロジェクトから、数多くのグラフィカルインターフェースが生まれました: synaptic
、aptitude
(テキストとグラフィカルモードインターフェース - まだ完成していません- の両方を含んでいます)、wajig
などです。最も推奨されるインターフェースは Debian のインストール中に使われる apt-get
で、この節ではこれを例に使います。aptitude
のコマンドライン構文はよく似ていることに注意してください。apt-get
と aptitude
に大きな違いがある場合は、違いを詳しく述べます。
APT を使う作業では、事前に利用可能なパッケージのリストを更新しなければいけません; これを行うには apt-get update
を使ってください。ネットワークのスピードに依存しますが、この操作には少し時間がかかります。なぜなら、Packages
/Sources
/Translation-language-code
などのファイルをダウンロードするからです。これらのファイルは Debian の開発が進むにつれて徐々に大きくなります (main
セクションの場合、データのサイズは少なく見積もっても 10 MB です)。もちろん CD-ROM セットからインストールする場合はダウンロードに時間は必要ありません - この場合、操作はとても速くなります。
APT を使うと、システムからパッケージを追加したり削除したりできます。それぞれの操作は apt-get install package
と apt-get remove package
のようにして行います。どちらの場合も APT は自動的に、追加するパッケージの動作に必要なパッケージをインストールし、削除するパッケージの動作に必要だったパッケージを削除します。apt-get purge package
コマンドを実行すれば完全にアンインストール、設定ファイルも削除、します。
sources.list
が複数のディストリビューションを参照しているのなら、パッケージのバージョンを指定してインストールする事も可能です。特定のバージョンを指定するには、
apt-get install package=version
を使いますが、
apt-get install package/distribution
のようにして、ディストリビューション (
安定版、
テスト版、
不安定版) を指定するやり方のほうが通常好まれます。
sources.list
ファイルに書かれたどこかのソースから古いバージョンをまだ入手できるなら、このコマンドを使ってパッケージを古いバージョンに戻す事が可能です (例えば古いバージョンが上手く動作すると知っている場合など)。そうでないなら、
snapshot.debian.org
アーカイブを使ってください (傍注
GOING FURTHER 古いパッケージバージョン: snapshot.debian.org
参照)。
例6.3 spamassassin の不安定版バージョンをインストール
#
apt-get install spamassassin/unstable
最新のセキュリティ更新を入手するために、定期的にアップグレードする事をお勧めします。アップグレードするには、(もちろん apt-get update
を実行した後で) apt-get upgrade
または aptitude safe-upgrade
を実行してください。このコマンドは他のパッケージを削除せずにアップグレード可能なインストール済みパッケージを探します。言い換えれば、最低限可能なアップグレードを行います。apt-get
のアップグレードパッケージの選択ルールは aptitude
よりも少し条件が厳しいです。これは apt-get
は既にインストール済みのパッケージだけをアップグレードするからです。
通常 apt-get
は最新のバージョン (実験版 と 安定版バックポート のパッケージは除きます。これらは普通バージョン番号にかかわらず無視されます) を選択します。sources.list
の中でテスト版や不安定版を指定した場合、apt-get upgrade
は安定版システムのほとんどをテスト版や不安定版に変更します。これはあなたが望んでいないことかもしれません。
apt-get
がアップグレードされたパッケージを検索する際に特定のディストリビューションを検索させるには、ディストリビューションの名前を後ろにつけて -t
または --target-release
オプションを使ってください (例: apt-get -t stable upgrade
)。apt-get
を使う時に毎回このオプションを指定するのを避けるには、/etc/apt/apt.conf.d/local
ファイルに APT::Default-Release "stable";
を追加してください。
より重要なアップグレード、例えば Debian のメジャーバージョンから次バージョンに変更するなどの場合、apt-get dist-upgrade
(「ディストリビューションアップグレード」) を使ってください。この命令で、アップグレード伴う新しい依存関係で時代遅れのパッケージを削除することになったとしても、apt-get
はアップグレードを完了します。この命令はまた Debian 不安定版 リリースを日常的に使い、毎日開発進化についていくユーザが使うコマンドです。これは説明がほとんど必要ないくらいとても単純です: APT の評判はこの偉大なる機能性が担っています。
aptitude full-upgrade
は aptitude
で上の命令に対応するコマンドですが、dist-upgrade
も認識されます (将来廃止予定です)。
既に説明した設定項目に加えて、/etc/apt/apt.conf.d/
ディレクトリにファイルを追加して APT の特定の機能を設定できます。例えば、APT に dpkg
がファイルの衝突によるエラーを無視するよう設定するには、DPkg::Options { "--force-overwrite"; }
を指定してください。
プロキシを介さないとウェブにアクセスできないのなら、
Acquire::http::proxy "http://yourproxy:3128"
の行を追加してください。FTP プロキシは
Acquire::ftp::proxy "ftp://yourproxy"
のように追加してください。より多くの設定オプションを確認するには、
man apt.conf
コマンドで
apt.conf(5) マニュアルページをご覧ください (マニュアルページの詳細は
「マニュアルページ」をご覧ください)。
APT の設定で最も重要な側面の 1 つに各パッケージソースに対する優先度の管理があります。例えば、テスト版、不安定版、実験版から入手できる新しいパッケージを 1 つか 2 つあるディストリビューションにインストールしたいと思うかもしれません。利用可能なパッケージに対して優先度を割り当てる事が可能です (同じパッケージに対してバージョンやそれを提供しているディストリビューションに依存する異なる優先度を設定する事も可能です)。優先度の設定は APT の挙動に影響を与えます: 各パッケージについて、APT は常に最も優先度の高いバージョンをインストールします (例外は、最も優先度の高いバージョンがインストール済みのバージョンよりも古い場合か 1000 より低い優先順位を持っている場合です)。
APT はいくつかのデフォルト優先度を定義しています。インストール済みパッケージのバージョンは優先度 100 です。インストールされていないパッケージのバージョンはデフォルトで優先度 500 ですが、ターゲットリリース (-t
コマンドラインオプションか APT::Default-Release
の設定ディレクティブによって定義します) に含まれるバージョンの場合、優先度 990 になります。
優先度を変更するには、/etc/apt/preferences
ファイルに、影響を受けるパッケージの名前、バージョン、パッケージの提供者、新しい優先度を指定するエントリを追加してください。
APT は優先度が 1000 より高い場合を除いて、パッケージの古いバージョン (言い換えれば、現在インストールされているバージョンよりバージョン番号が低いパッケージ) をインストールしません。APT は常にこの制限に基づいて最も高い優先度のパッケージをインストールします。2 つのバージョンが同じ優先度の場合、APT は最新の (バージョン番号が最も高い) バージョンをインストールします。バージョンと優先度が同じで、パッケージの内容が異なる場合、APT はインストールされていないバージョンをインストールします (このルールはあるパッケージがリビジョン番号を変化させずに更新された場合に対応させるために作られました。通常は増加させなければいけません)。
より具体的に言えば、優先度が 0 より低いパッケージは決してインストールされません。0 から 100 までの優先度を持つパッケージは、パッケージの他のバージョンがインストール済みでない場合にだけ、インストールされます。100 から 500 までの優先度を持つパッケージは、インストール済みのバージョンに新しいものが存在しないか、他のディストリビューションに利用可能なバージョンが存在する場合にだけ、インストールされます。501 から 990 までの優先度を持つパッケージは、インストール済みのバージョンに新しいものが存在しないか、ターゲットディストリビューションに利用可能なバージョンが存在する場合にだけ、インストールされます。990 から 1000 までの優先度を持つパッケージは、インストール済みバージョンが古い場合に、インストールされます。1000 より大きい優先度を持つパッケージは、古いバージョンにダウングレードすることになったとしても、常にインストールされます。
APT が /etc/apt/preferences
の設定を評価する際、最初に具体的なエントリ (該当するパッケージに関連するエントリ)、その後に一般的なエントリ (例えばあるディストリビューションのすべてのパッケージを含めたものなど) を評価します。一般的なエントリが複数存在する場合、最初にマッチしたものを使います。利用可能な選択基準には、パッケージの名前とパッケージを配布しているパッケージソースが含まれます。各パッケージソースは APT が Packages
と一緒にダウンロードする Release
ファイルに含まれる情報によって区別されます。このファイルは提供者 (公式ミラーのパッケージの場合、通常「Debian」ですが、人名やサードパーティリポジトリの組織名になる場合もあります) を規定しています。また、このファイルはディストリビューションの名前 (Debian の提供する標準的ディストリビューションの場合、通常 安定版、テスト版、不安定版、実験版) とバージョン (例えば Debian Lenny なら 5.0) を規定しています。このメカニズムの実際のケーススタディを通じて、構文を見てみましょう。
Debian の安定版バージョンからのパッケージだけを使いたいと仮定しましょう。他のバージョンから提供されるパッケージは、はっきりと要求されない限り、インストールされるべきではありません。この場合、/etc/apt/preferences
ファイルに以下のエントリを書きます:
a=stable
で選択するディストリビューションの名前を定義します。o=Debian
で提供者が「Debian」のパッケージに範囲を限定します。
さてここで、サーバには Perl バージョン 5.14 に依存するローカルプログラムがあり、アップグレードによって他のバージョンがインストールされない事を保証したいと仮定しましょう。この場合、以下のエントリを使います:
マニュアルページ apt_preferences(5) にはこの設定ファイルに対する関連文書があり、man apt_preferences
で表示できます。
apt-get
はこのように素晴らしく、他のディストリビューションからパッケージを選ぶ際に力を発揮するツールです。例えば、安定版システムをインストールした後にテスト版や不安定版に収録されているあるソフトウェアのパッケージを試したいが、システムを最初の状態から大きく変更したくないという場合です。
ディストリビューションの異なるパッケージを混在させると、時々問題に遭遇するかもしれませんが、
apt-get
はパッケージを上手く共存させ、危険の及ぶ範囲を上手く限定します。進むべき最善の道は、
/etc/apt/sources.list
で使われているすべてのディストリビューションをリストアップ (常に 3 つのディストリビューションを使う人がいるかもしれませんが、
不安定版は経験豊かなユーザ向けである事を忘れないでください) して、
APT::Default-Release
パラメータ (
「システムのアップグレード」参照) で基準ディストリビューションをを定義する事です。
安定版が基準ディストリビューションと仮定しますが、併せてテスト版と不安定版も sources.list
ファイルに書かれているとします。この場合、テスト版 からのパッケージをインストールするには apt-get install package/testing
を使います。依存関係の解決に失敗してインストールできなかった場合、-t testing
パラメータをつけて テスト版を使って依存関係を解決させる事が可能です。不安定版でも同じ事が言えます。
この状況では、アップグレード (upgrade
と dist-upgrade
) は、他のディストリビューションでパッケージがアップグレードされていない限り、安定版のパッケージを使って終了します: 他のディストリビューションに利用可能な更新があれば、アップグレードします。以下では、APT によって設定されたデフォルト優先度の助けを借りてこの挙動を説明します。パッケージの優先度を確認するには、遠慮なく apt-cache policy
(傍注参照) を使ってください。
APT はインストール済みのパッケージに比べてバージョンが高いか同じのパッケージだけを考慮するという事実を知れば、すべてを理解できます (ここでは /etc/apt/preferences
の中に一部のパッケージに対して 1000 より高い優先度を強制する設定が無いと仮定します)。
あるパッケージの、安定版から提供されるバージョン 1 がインストール済みで、テスト版と不安定版から提供されるバージョン 2 と 3 が利用可能と仮定しましょう。インストール済みバージョンの優先度は 100 ですが、安定版から提供されるバージョン (インストール済みと全く同じバージョン) の (ターゲットリリースから提供されるバージョンの) 優先度は 990 です。テスト版と不安定版から提供されるバージョンの優先度 (インストールされていないバージョンに対するデフォルト優先度) は 500 です。この場合、バージョン 1 が最も高い優先度 990 を持ちます。パッケージは「安定版のまま」です。
テスト版から提供されるバージョン 2 がインストール済みの場合について見てみましょう。安定版から提供されるバージョン 1 と不安定版から提供されるバージョン 3 が利用可能です。バージョン 1 (優先度は 1000 より低く 990) は、インストール済みバージョンよりもバージョンが低いため、無視されます。残るのはバージョン 2 か 3 ですが、両方の優先度は 500 です。優先度をが同じ場合、APT は最も新しいバージョン、不安定版から提供されるバージョン、を選択します。テスト版から提供されたインストール済みバージョンを不安定版から提供されるバージョンに移行したくない場合、不安定版から提供されるバージョンに 500 よりも低い優先度 (例えば 490 など) を割り当てないといけません。これを行うには、/etc/apt/preferences
を以下のように修正してください:
Package: *
Pin: release a=unstable
Pin-Priority: 490
6.2.7. 自動的にインストールされたパッケージの追跡
apt-get
の本質的な機能の 1 つに、依存関係によってのみインストールされたパッケージの追跡があります (当初これは aptitude
に固有の機能でした)。これらのパッケージは「自動」と呼ばれ、例えばライブラリなどがその一例です。
あるパッケージを削除する際に、パッケージマネージャは、この追跡情報を元に、もはや不要になった自動パッケージ (「手作業でインストール」されていないパッケージ) を選び出す事ができる。不要になった自動パッケージを削除するには apt-get autoremove
を使います。aptitude
にはこのコマンドがありませんが、これは不要な自動パッケージは見つかり次第自動的に削除されるからです。どちらのプログラムでも、不要になったパッケージは分かりやすく表示されます。
直接的に使うわけではないパッケージを自動パッケージとしてマークするのは良い癖です。こうすれば、そのパッケージがいらなくなった時に自動的に削除されます。
apt-mark auto package
はパッケージを自動パッケージとしてマークし、逆に
apt-mark manual package
は手動パッケージとしてマークします。
aptitude markauto
と
aptitude unmarkauto
は同様に動きますが、多くのパッケージを同時にマークする機能を持っています (
「aptitude
」参照)。
aptitude
のコンソールベース対話型インターフェースを使うと、多くのパッケージの「自動パッケージフラグ」を容易に確認できます。
自動的にインストールされたパッケージがシステムに存在する理由を知りたい場合があるかもしれません。この情報をコマンドラインから得るには、aptitude why package
を使ってください (apt-get
に同様の機能はありません):
$ aptitude why python-debian
i aptitude 推奨 apt-xapian-index
i A apt-xapian-index 依存 python-debian (>= 0.1.15)