6.2. aptitude
、apt-get
、apt
コマンド
APT は巨大なプロジェクトで、当初の予定ではグラフィカルインターフェースを含んでいました。APT はライブラリに基づいており、そのライブラリにはコアアプリケーションが含まれています。apt-get
は最初のコマンドラインベースフロントエンドで、APT プロジェクト内で開発されました。apt
は APT から提供されているもう一つのコマンドラインベースフロントエンドで、apt-get
の持っていた設計上のミスを克服しています。
どちらのツールも同じライブラリから構築されているため、非常によく似ています。しかしながら、apt
のデフォルトの挙動は対話的利用の観点から改善され、多くのユーザの予想通りに動作します。APT の開発者はさらにこれを改善するために apt
のユーザ向けインターフェースを変更する権利を保有しています。逆に、apt-get
のユーザ向けインターフェースは明確に定義されており後方互換性がなくなることはないでしょう。このため、スクリプトでパッケージをインストールする場合には apt-get
を使うと良いでしょう。
APT の数多くのグラフィカルインターフェースは外部プロジェクトとして生まれました。たとえば 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
インストールするパッケージが単純な .deb
ファイルの形になっており、関連するパッケージリポジトリがないなら、APT を使って依存関係を満足させつつパッケージを簡単にインストールできます (設定済みのリポジトリを使って依存関係を満足できる場合に限ります): apt install ./path-to-the-package.deb
。ここで先頭に付けた ./
は重要です。こうすることで引数がファイル名であり、リポジトリから利用できるパッケージの名前ではないことを明確にできるからです。
最新のセキュリティ更新を入手するために、定期的にアップグレードを行うことをお勧めします。アップグレードを行うには (もちろん apt update
を実行した後に) apt upgrade
、apt-get upgrade
、aptitude safe-upgrade
を実行してください。これらのコマンドは他のパッケージを削除せずにアップグレードできるインストール済みパッケージだけを探します。言い換えれば、最低限可能なアップグレードを行います。apt-get
のアップグレードパッケージの選択規則は aptitude
や apt
よりも少し条件が厳しいです。なぜなら 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 コマンドは歴史的かつよく知られており、apt
と aptitude
はユーザの利便性を考慮して dist-upgrade を受け付けます。
既に説明した設定項目に加えて、/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 節「マニュアルページ」をご覧ください)。
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 Stretch なら 9) が書かれています。このメカニズムの実際のケーススタディを通じて、構文を見てみましょう。
Debian の安定版バージョンに含まれるパッケージだけを使いたいと仮定します。安定版以外のバージョンに含まれるパッケージは、明示的に要求されない限り、インストールされるべきではありません。この場合、/etc/apt/preferences
ファイルに以下のエントリを書きます。
a=stable
の含まれるエントリはディストリビューションの名前が stable のパッケージの優先度を 900 にしています。o=Debian
の含まれるエントリは、自分よりも前に評価されたエントリにマッチしなかった、共有元が「Debian」のパッケージの優先度を -10 にしています。
さらにここで、サーバには Perl バージョン 5.24 に依存するローカルプログラムがあり、アップグレードによって Perl の他のバージョンがインストールされないことを保証したいと仮定しましょう。この場合、以下のエントリを使います。
マニュアルページ apt_preferences(5) には /etc/apt/preferences
の記載方法に対する関連文書があります。これを表示するには 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 (優先度は 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
または apt autoremove
を使います。aptitude
にはこのコマンドがありません。なぜなら aptitude
は不要な自動パッケージを見つけ次第自動的に削除するからです。どのプログラムを使った場合も、不要になった自動パッケージは分かりやすく表示されます。
直接的に使うわけではないパッケージを自動パッケージとしてマークするのは良い癖です。こうすれば、そのパッケージがいらなくなった時に自動的に削除されます。
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)