APT ユーザガイド



バージョン 3.1.3



目次

1. 全般
1.1. パッケージシステムの構造
2. apt-get
3. DSelect
4. インターフェース
4.1. スタートアップ
4.2. 状態レポート
4.2.1. 追加パッケージリスト
4.2.2. 削除するパッケージ
4.2.3. 新規パッケージリスト
4.2.4. 一時固定リスト
4.2.5. 保留パッケージの警告
4.2.6. 最後のまとめ
4.3. 状態表示
4.4. Dpkg
   

APT パッケージは現在、APT dselect メソッドと apt-get コマンドラインユーザインターフェイスの2つを収録しています。両方ともインターネットから新しいパッケージをダウンロードするのと同様、パッケージをインストール、削除する方法を提供しています。

   

Debian パッケージシステムには各パッケージに関連する膨大な情報があり、システムに手際良く簡単に統合することを支援します。その最も重要な機能は依存システムです。

   

依存システムにより、システムにあるライブラリ等の共有要素を個々のプログラムを使えるようになります。簡単に言うと、プログラムのうちまれに利用される部分を別個のパッケージに配置して、平均的ユーザがインストールを必要とするものの数を減らします。また、メール転送エージェントや X サーバ等の選択ができるようにもなります。

   

依存システムの理解はまず単純な依存の概念を把握することから始まります。単純な依存というのは、あるパッケージが適切に機能するためには別のパッケージが同時にインストールされている必要があるということです。

   

例えば mailcrypt は emacs を拡張するプログラムで、GPG によるメールの暗号化を支援します。GPGP がインストールされていなければ mailcrypt は役に立たないので mailcrypt には GPG に単純に依存しています。また、これは emacs の拡張なので emacs に単純に依存し、emacs がないと何の役にも立ちません。

   

理解しておかないといけないもう一つの重要な依存に競合する依存があります。これはあるパッケージが別のパッケージと同時にインストールされていると機能せず、システムにとってひどく有害なこともあります。例として sendmail や exim、qmail 等のメール転送エージェントで考えてみましょう。メール転送エージェントはどれもメールを受け取るのにネットワークを待ち受ける必要があるため、2つインストールすることは不可能です。複数インストールするとシステムに重大な被害を与える可能性があるため、メール転送エージェントはどれも他のあらゆるメール転送エージェントと競合依存となっています。

   

複雑な例としては、別のパッケージのように装うパッケージがあります。exim と sendmail について見てみると、その多くの目的は同一で、両方ともメールを配送し、一般的インターフェイスを解釈します。そこで、パッケージシステムにはどちらも mail-transport-agents だと宣言する方法があります。そうして exim と sendmail は両方とも mail-transport-agent を提供すると宣言し、他のメール転送エージェントを必要とするパッケージは mail-transport-agent に依存します。手作業によりパッケージを修正しようとしたときに多大な混乱が生まれる可能性があります。

   

既にインストールされている、あるいはされていないパッケージについて、1つの依存が生まれる可能性は常にあります。APT はインストールするパッケージの選択を支援する自動化でのアルゴリズムをいくつか提供することで依存問題の解決支援に努めます。

   

apt-get はコマンドラインからパッケージをインストールする簡単な方法を提供します。dpkg とは異なり、apt-get は .deb ファイルを解釈せず、連携するのはパッケージ特有の名前で、インストールできるのはソースにある .deb アーカイブだけです。

   

apt-get を使う前にまずやるべきことは[1]パッケージ一覧をソースから取得することで、それにより利用できるパッケージがわかるようになります。これには apt-get update を実行します。例えば

   
# apt-get update
取得 http://ftp.de.debian.org/debian/ stable/binary-i386/ Packages
取得 http://llug.sep.bnl.gov/debian/ testing/contrib Packages
パッケージリストを読み込んでいます... 完了
   

更新後は複数のコマンドを使えます:

   
upgrade

upgrade を行うとシステム全体を穏やかにアップグレードします。アップグレードでは新しいパッケージのインストールや既存のパッケージの削除、アップグレードすると他のパッケージを破壊する可能性のある場合のそのパッケージのアップグレードは行いません。これは毎日実行してシステムを比較的安全にアップグレードできます。upgrade を行うとアップグレードできないパッケージがある場合にその一覧を表示します。これは通常新しいパッケージに依存しているか他のパッケージと競合しているということになります。dselectapt-get install を使うとそういったパッケージを強制的にインストールできます。

install

install を使ってパッケージを名前によりインストールします。パッケージは自動的に取得、インストールされます。これはインストールするパッケージの名前が既にわかっていて GUI を使って選択したくない場合に有用です。インストールするパッケージはいくらでも指定でき、全て取得されます。install では対象パッケージ一覧から自動的に依存問題の解決に努めてまとめを提示し、指示以外の変更がある場合は確認を促します。

dist-upgrade

dist-upgrade は完全なアップグレードを行うように設計されていて、Debian のリリース間のアップグレードを単純化します。洗練されたアルゴリズムを使って、システムをできるだけ最新のリリースにするためにインストール、アップグレード、削除する最善のパッケージ群を決定します。状況によっては dselect で手作業により時間を掛けて依存を解決するよりも dist-upgrade を使う方が希望には合うかもしれません。dist-upgrade 完了後は dselect を使って、残っているパッケージがあればインストールできます。

dist-upgrade が実行する内容をよく観察するのは重要です。かなり驚くような判断がなされることもあります。

   

apt-get にはコマンドラインオプションが複数あり、man ページの apt-get(8) で詳細に説明されています。最も有用なオプションは取得したファイルをインストールしない -d です。システムが大量のパッケージをダウンロードする必要がある場合、何かうまくいかなかったときにインストールを開始するのは望ましくはないでしょう。-d を指定すると、ダウンロードしたときのコマンドを単純に再び、-d を付けずに実行することでダウンロードしたアーカイブをインストールできます。



   

[1] http プロキシサーバを使っている場合はまず http_proxy 環境変数をセットする必要があります。sources.list(5) を見てください

   

APT の dselect メソッドは dselect パッケージ選択 GUI を使った完全な APT システムを提供します。インストールや削除するパッケージの選択には dselect を使い、実際のインストールは APT が行います。

   

APT メソッドを有効にするには、dselect でアクセス(a) を選択し、それから APT メソッドを選択する必要があります。そうするとアーカイブの取得先の場所となるソース群を聞かれます。これにはリモートのインターネットサイトやローカルの Debian ミラー、CD-ROM を指定できます。各ソースで Debian アーカイブ全体のうちの一部を提供でき、APT は自動的に組み合わせてパッケージ群一式を構成します。CD-ROM がある場合はまずそれを指定し、それからミラーを指定するのが良い方法で、そうすることで最新のバグ修正にアクセスできるようになります。APT はインターネットからダウンロードする前に CD-ROM にあるパッケージを自動的に利用します。

   
   ディストリビューションソース位置一覧の準備

 Debian ディストリビューションの基底 URL を指定してください。
 認識できるアクセス方法: http file

 例:
      file:/mnt/debian,
      https://deb.debian.org/debian,
      http://deb.debian.org/debian,


 URL [http://llug.sep.bnl.gov/debian]:
   

ソースの準備は基礎となる Debian アーカイブの質問から始まり、デフォルトは HTTP ミラーとなっています。その次は取得するディストリビューションを質問します。

   
 取得するディストリビューションのタグやパッケージファイルへのパスを
 / で終える形式で指定してください。ディストリビューションのタグには
 以下のようなものがあります: stable unstable testing

 ディストリビューション [stable]:
   

The distribution refers to the Debian version in the archive, stable refers to the latest released version and unstable refers to the developmental version.

   
 取得するコンポーネントを指定してください
 コンポーネントには以下のようなものがあります: main contrib non-free non-free-firmware

 コンポーネント [main contrib non-free non-free-firmware]:
   

コンポーネント一覧は取得するサブディストリビューションの一覧を参照します。このディストリビューションはソフトウェアのライセンスを基にして分けられています。main にあるのは DFSG フリーのパッケージですが contrib や non-free には利用目的や配布形態に様々な制限を課せられているものが収録されています。

   

ソースはいくらでも追加できます。準備スクリプトは必要なソースを全て指定するまで聞き続けます。

   

dselect を使う前にメニューから更新(u)を選択して利用可能なパッケージ一覧を更新する必要があります。これは apt-get update の上位集合で、取得した情報を dselect から利用できるようにします。以前に apt-get update を実行していても更新(u)を実行する必要があります。

   

その後は選択(s)を使って選択し、導入(i)を使ってインストールします。APT メソッドを使っている場合は設定(c)や削除(r)コマンドに意味はなく、導入(i)コマンドがその両方を実行します。

   

デフォルトで APT はインストールに成功したパッケージ (.deb) ファイルを自動的に削除します。この挙動を変更するには /etc/apt/apt.conf 中に Dselect::clean "prompt"; と記述します。

   

APT の dselect メソッドと apt-get は共に同一のインターフェイスを共有しています。通常は行う内容を告知して実行する簡単なシステムです。[2] 実行内容のまとめを告知した後 APT が参考になる状態メッセージをいくらか表示するため、どれくらい進んでいるのか、あるいは残り作業がどれくらいあるのか見積もることができるようになっています。

   

update 以外のあらゆる操作で、APT はいくつか処理を行い内部状態を準備します。また、システムの状態についてもいくらか確認します。この処理は apt-get check によりいつでも実行できます。

   
# apt-get check
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
   

これが最初に行うのはパッケージファイルを全てメモリに読み込むことです。APT はキャッシュを使うようになっているので、この処理は次に実行するときには早く終わります。見つけられないパッケージファイルがある場合は無視され、apt-get 終了時に注意を表示します。

   

最後の処理はシステムの依存関係の詳細な分析です。インストール、あるいは展開されたパッケージの依存関係を全て確認し、問題ないか判断します。問題が見つかった場合は報告し、apt-get の実行を拒否します。

   
# apt-get check
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
下のパッケージには満たせない依存関係があります:
  9fonts: 依存: xlib6g しかし、インストールされていません
  uucp: 依存: mailx しかし、インストールされていません
  blast: 依存: xlib6g (>= 3.3-5) しかし、インストールされていません
  adduser: 依存: perl-base しかし、インストールされていません
  aumix: 依存: libgpmg1 しかし、インストールされていません
  debiandoc-sgml: 依存: sgml-base しかし、インストールされていません
  bash-builtins: 依存: bash (>= 2.01) しかし、2.0-3 はインストールされています
  cthugha: 依存: svgalibg1 しかし、インストールされていません
           依存: xlib6g (>= 3.3-5) しかし、インストールされていません
  libreadlineg2: 競合:libreadline2 (<< 2.1-2.1)
   

この例ではシステムに libreadlineg2 に関する重大な問題を含めて多数の問題があります。未解決の依存関係があれば各パッケージごとにそのパッケージに問題があることを示し、併せて未解決の依存関係を1行で出力します。そのパッケージの依存問題の理由について簡潔な説明も添えられます。

   

システムがこのように壊れた状態となる原因は2つあります。1つ目はアップグレード実行時にパッケージ間の難解な依存関係を dpkg がいくらか欠いていることによります。[3]2つ目はパッケージのインストール処理中に何か失敗した場合です。この状況では依存するパッケージがインストールされないままパッケージが展開されている可能性があります。

   

APT がパッケージのインストール順序に特定の制約を設けていることにより2つ目の状況は1つ目の状況と比べて重大ですらなくなります。どちらの場合でも apt-get-f オプションを指定することで APT は解決方法を推測し、処理を続けます。APT dselect メソッドでは常に -f オプションを有効にして、メンテナスクリプトでの問題が起きた場合でも簡単に処理を継続できるようにしています。

   

しかし、1つ目の状況により重大な壊れ方になっているシステムの修正に -f オプションを使った場合はインストールにすぐに失敗、あるいはインストール順序がおかしくなる可能性があります。どちらの場合も、APT が処理を十分に進められるところまで手作業により dpkg を使って (恐らく強制するオプションを指定して) 状況を修正する必要があります。

   

処理を続ける前に apt-get は実行しようとする処理について報告します。通常この報告は実行される操作の種類を反映したものになりますが、一般的要素がいくつかあります。どの場合でもこの処理一覧は最終的な状態を示し、-f オプションその他の実行されるコマンドに関連する動作を考慮したものとなります。

   

最後に、APT は発生する全変更のまとめを表示します。

   
アップグレード: 206 個、新規インストール: 8 個、削除: 23 個、保留: 51 個。
12 個のパッケージが完全にインストールまたは削除されていません。
66.7MB 中 65.7MB のアーカイブを取得する必要があります。
この操作後に追加で 26.5MB のディスク容量が消費されます。
   

まとめの1行目は単純に一覧を全て短くまとめたもので、アップグレードされる (既にインストールされていて新しいバージョンが利用可能な) パッケージの数についても示します。2行目は設定が完了していないパッケージの数を示し、インストールを中止した場合にこれに集計されることがあります。最終行はそのインストールで必要となる容量の要件を示します。最初の数値の組はアーカイブファイルのサイズを示します。この1つ目の数値はリモートから取得してくる必要のあるバイト数、2つ目は必要となる全アーカイブの合計サイズを示します。次の数値は現在インストールされているパッケージと新しくインストールしたパッケージのサイズの違いを示します。これは処理が全て終わった後に /usr で消費される容量にほぼ相当します。パッケージを大量に削除する場合は解放される容量を示すこともあります。

   

他の報告として、-u オプションを使うとアップグレードされるパッケージを表示します。これは前に示した例と似たものです。

   

アーカイブやパッケージファイルのダウンロード中、APT は状態を示す一連のメッセージを表示します。

   
# apt-get update
取得:1 http://ftp.de.debian.org/debian/ stable/main Packages
取得:2 http://llug.sep.bnl.gov/debian/ testing/contrib Packages
ヒット http://llug.sep.bnl.gov/debian/ testing/main Packages
取得:4 http://ftp.de.debian.org/debian/ unstable/binary-i386/ Packages
取得:5 http://llug.sep.bnl.gov/debian/ testing/non-free Packages
11% [5 testing/non-free `Waiting for file' 0/32.1k 0%] 2203b/s 1m52s
   

APT がファイルの取得を開始すると、最終行でダウンロードの進捗状況を示しつつ取得で始まる行が表示されます。進捗の最初のパーセント値は全ファイルに対する取得済みの全体での割合を示します。残念ながらパッケージファイルのサイズは不明なので apt-get update は不正確な予測を行う可能性があります。

   

状態を示す行の次の節は各ダウンロードスレッドごとに1度ずつ繰り返され、進行中の操作や処理についての有用な情報をいくらか示します。この節は単純に Forking となっていることもあり、その場合は OS がダウンロード用のモジュールを読み込んでいることを示します。[ の後の最初の語は履歴に表示されている取得番号です。その次の語はダウンロード対象の名前の短縮形です。アーカイブの場合は取得中のパッケージの名前が入ります。

   

単一引用符内はダウンロードのやりとりの進捗を示す有益な文字列です。標準的には...へ接続していますからファイルを待っていますへ、それから...をダウンロードしていますまたは...を再開していますへと進みます。最後の値はリモートサイトからダウンロードしたバイト数です。ダウンロードが始まるとこれは 102/10.2k のように表示され、この場合10.2キロバイトのうち102バイトが取得済みであることを示します。合計サイズは常に4ケタで表示され、表示空間を保つようになっています。サイズ表示の後はそのファイル自体の進捗状況を百分率で示したものです。その2つ後は瞬間的な平均速度です。この値は5秒ごとに更新され、その間のデータ転送速度を反映します。最後は推定転送時間を表示しています。これは定期的に更新され、表示している転送速度で全て完了する時間を表示します。

   

状態表示は0.5秒ごとに更新してダウンロードの進捗状況を絶えず通知し、取得行は新しいファイルの処理が始まるたびに流れていきます。状態表示は絶えず更新されるためファイルへの記録には適しません。-q オプションを使うと状態を表示しないようにできます。