第4章 インターフェース

目次

4.1. スタートアップ
4.2. 状態レポート
4.3. 状態表示
4.4. Dpkg

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-non-US/ stable/non-US/ 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-non-US/ 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 オプションを使うと状態を表示しないようにできます。

APT はアーカイブのインストールに dpkg を使い、ダウンロードの完了後は dpkg インターフェイスに切り替わります。dpkg もパッケージの処理中にいくつか質問し、パッケージ自体も複数質問するかもしれません。通常それぞれの質問の前にそれが何を聞いているのか説明します。その質問の内容は多岐にわたるものであり、ここで説明できるものでは全くありません。



[2] dselect メソッドは実際に apt-get に対するラッパースクリプト群です。このメソッドでは apt-get 単体に存在している以上の機能を実際に提供しています。

[3] APT はそれでも既知の依存関係を全て検討し、パッケージが壊れた状態となることを回避しようとします。