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