Product SiteDocumentation Site

6.2. aptitudeapt-getapt コマンド

APT は巨大なプロジェクトで、当初の予定ではグラフィカルインターフェースを含んでいました。APT はライブラリに基づいており、ライブラリにはコアアプリケーションが含まれています。apt-get は最初のフロントエンド — コマンドラインベース — で、APT プロジェクト内で開発されました。apt は APT から提供されているもう一つのコマンドラインベースフロントエンドで、apt-get の持っていた設計上のミスを克服しています。
外部プロジェクトから、数多くのグラフィカルインターフェースが生まれました。たとえば synapticaptitude (テキストとグラフィカルモードインターフェース — まだ完成していません — の両方を含んでいます)、wajig などです。最も推奨されるインターフェースは apt で、この節では apt を例に使います。apt のコマンドライン構文と apt-getaptitude のコマンドライン構文はよく似ていることに注意してください。aptapt-getaptitude の間に大きな違いがある場合は、その違いを詳しく述べます。

6.2.1. 初期設定

APT を使う作業では、事前に利用できるパッケージのリストを更新しなければいけません。そして、これを行うには apt update を使ってください。ネットワークのスピードに依存しますが、この操作には少し時間がかかります。なぜなら、Packages/Sources/Translation-language-code などのファイルをダウンロードするからです。これらのファイルは Debian の開発が進むにつれて徐々に大きくなります (main セクションの場合、データのサイズは少なく見積もっても 10 MB です)。もちろん CD-ROM セットからインストールする場合はダウンロードに時間は必要ありません — この場合、操作はとても速くなります。

6.2.2. インストールと削除

APT を使うと、システムからパッケージを追加したり削除したりできます。それぞれの操作は apt install packageapt 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

6.2.3. システムのアップグレード

最新のセキュリティ更新を入手するために、定期的にアップグレードを行うことをお勧めします。アップグレードを行うには、(もちろん apt update を実行した後で) apt upgradeapt-get upgradeaptitude safe-upgrade を実行してください。このコマンドは他のパッケージを削除せずにアップグレードできるインストール済みパッケージだけを探します。言い換えれば、最低限可能なアップグレードを行います。apt-get のアップグレードパッケージの選択ルールは aptitudeapt よりも少し条件が厳しいです。なぜなら 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 コマンドは歴史的かつよく知られており、aptaptitude はユーザの利便性を考慮して dist-upgrade を受け付けます。

6.2.4. 設定オプション

既に説明した設定項目に加えて、/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 節「マニュアルページ」をご覧ください)。

6.2.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 Jessie なら 8) を規定しています。このメカニズムの実際のケーススタディを通じて、構文を見てみましょう。
Debian の安定版バージョンからのパッケージだけを使いたいと仮定しましょう。他のバージョンから提供されるパッケージは、はっきりと要求されない限り、インストールされるべきではありません。この場合、/etc/apt/preferences ファイルに以下のエントリを書きます。
Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release o=Debian
Pin-Priority: -10
a=stable で選択するディストリビューションの名前を定義します。o=Debian で提供者が「Debian」のパッケージに範囲を限定します。
さてここで、サーバには Perl バージョン 5.14 に依存するローカルプログラムがあり、アップグレードによって他のバージョンがインストールされないことを保証したいと仮定しましょう。この場合、以下のエントリを使います。
Package: perl
Pin: version 5.14*
Pin-Priority: 1001
マニュアルページ apt_preferences(5) にはこの設定ファイルに対する関連文書があり、man apt_preferences で表示できます。

6.2.6. 複数ディストリビューションの利用

apt はこのように素晴らしく、他のディストリビューションからパッケージを選ぶ際に力を発揮するツールです。たとえば、安定版システムをインストールした後にテスト版不安定版に収録されているあるソフトウェアのパッケージを試したいが、システムを最初の状態から大きく変更したくないという場合です。
ディストリビューションの異なるパッケージを混在させると、時々問題に遭遇するかもしれませんが、apt はパッケージをうまく共存させ、危険のおよぶ範囲をうまく限定します。進むべき最善の道は、/etc/apt/sources.list で使われているすべてのディストリビューションをリストアップ (常に 3 つのディストリビューションを使う人がいるかもしれませんが、不安定版は経験豊富なユーザ向けであることを忘れないでください) して、APT::Default-Release パラメータ (第 6.2.3 節「システムのアップグレード」参照) で基準ディストリビューションを定義することです。
安定版が基準ディストリビューションと仮定しますが、併せてテスト版不安定版sources.list ファイルに書かれているとします。この場合、テスト版 からのパッケージをインストールするには apt install package/testing を使います。依存関係の解決に失敗してインストールできなかった場合、-t testing パラメータを付けて テスト版を使って依存関係を解決させることが可能です。不安定版でも同じことが言えます。
この状況では、アップグレード (upgradefull-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 markautoaptitude 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)