Product SiteDocumentation Site

6.2. aptitudeapt-getapt コマンド

APT は巨大なプロジェクトで、当初の予定ではグラフィカルインターフェースを含んでいました。APT はライブラリに基づいており、そのライブラリにはコアアプリケーションが含まれています。apt-get は最初のコマンドラインベースフロントエンドで、APT プロジェクト内で開発されました。apt は APT から提供されているもう一つのコマンドラインベースフロントエンドで、apt-get の持っていた設計上のミスを克服しています。
APT の数多くのグラフィカルインターフェースは外部プロジェクトとして生まれました。たとえば 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 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

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

最新のセキュリティ更新を入手するために、定期的にアップグレードを行うことをお勧めします。アップグレードを行うには (もちろん apt update を実行した後に) apt upgradeapt-get upgradeaptitude safe-upgrade を実行してください。これらのコマンドは他のパッケージを削除せずにアップグレードできるインストール済みパッケージだけを探します。言い換えれば、最低限可能なアップグレードを行います。apt-get のアップグレードパッケージの選択規則は aptitudeapt よりも少し条件が厳しいです。なぜなら apt-get upgrade は現在のパッケージ構成を変えないからです。つまりパッケージの新パージョンで導入された新しい依存関係により現在インストールされていないパッケージをインストールする必要が生じた場合はパッケージの新パージョンをインストールしないからです。
通常 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 full-upgrade を実行した場合、apt はアップグレードに伴う新しい依存関係により不要となったパッケージを削除します。また、apt full-upgrade は 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"; } のように書いたファイルを /etc/apt/apt.conf.d/ ディレクトリに追加します。
ウェブにアクセスするには必ずプロキシを介す必要がある場合、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 より少ない優先度を持つパッケージは、インストール済みバージョンまたはターゲットリリース以外のディストリビューションに含まれるバージョンが自分のバージョンよりも新しい場合に限り、インストールされます。500 以上で 990 より少ない優先度を持つパッケージは、インストール済みのバージョンまたはターゲットリリースに含まれるバージョンが自分のバージョンよりも新しい場合に限り、インストールされます。990 以上で 1000 より少ない優先度を持つパッケージは、インストール済みバージョンが自分のバージョンよりも新しい場合を除いて、インストールされます。1000 以上の優先度を持つパッケージは、自分をインストールすることでパッケージのバージョンが低くなる場合でも、常にインストールされます。
/etc/apt/preferences の設定を評価する際、APT は最初に最も具体的なエントリ (明示的に対象のパッケージを指定しているエントリ)、その後に一般的なエントリ (たとえばあるディストリビューションのすべてのパッケージを対象にするエントリ) を評価します。一般的なエントリが複数存在する場合、最初にマッチしたものを使います。利用できる選択基準としてパッケージの名前とパッケージを配布しているパッケージソースがあります。各パッケージソースは APT が Packages と一緒にダウンロードする Release ファイルに含まれる情報によって区別されます。Release ファイルには、パッケージ供給元の名前 (公式ミラーのパッケージの場合、通常「Debian」ですが、人名やサードパーティリポジトリの組織名になる場合もあります)、ディストリビューションの名前 (Debian の提供する標準的なディストリビューションの場合、通常 Stable (安定版)、Testing (テスト版)、Unstable (不安定版)、Experimental (実験版))、バージョンの名前 (たとえば 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 の含まれるエントリはディストリビューションの名前が stable のパッケージの優先度を 900 にしています。o=Debian の含まれるエントリは、自分よりも前に評価されたエントリにマッチしなかった、共有元が「Debian」のパッケージの優先度を -10 にしています。
さらにここで、サーバには Perl バージョン 5.14 に依存するローカルプログラムがあり、アップグレードによって Perl の他のバージョンがインストールされないことを保証したいと仮定しましょう。この場合、以下のエントリを使います。
Package: perl
Pin: version 5.14*
Pin-Priority: 1001
マニュアルページ apt_preferences(5) には /etc/apt/preferences の記載方法に対する関連文書があります。これを表示するには 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 (優先度は 990。つまり 1000 より低いです) は、インストール済みバージョンよりもバージョンが低いため、無視されます。残るのはバージョン 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)