第4章 インターフェース
戻る |  |

# 第4章 インターフェース

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

## 4.1. スタートアップ

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 を使って (恐らく強制するオプションを指定して) 状況を修正する必要があります。

## 4.2. 状態レポート

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

### 4.2.1. 追加パッケージリスト

    以下の特別パッケージがインストールされます:
      libdbd-mysql-perl xlib6 zlib1 xzx libreadline2 libdbd-msql-perl
      mailpgp xdpkg fileutils pinepgp zlib1g xlib6g perl-base
      bin86 libgdbm1 libgdbmg1 quake-lib gmp2 bcc xbuffy
      squake pgp-i python-base debmake ldso perl libreadlineg2
      ssh

追加パッケージリストはコマンドラインで指示した以外にインストールやアップグレードされるパッケージを全て表示します。これは `install` コマンドの場合にのみ生成されます。一覧に挙げられるパッケージは自動インストールの結果による場合が多くなります。

### 4.2.2. 削除するパッケージ

    以下のパッケージは「削除」されます:
    The following packages will be REMOVED:
      xlib6-dev xpat2 tk40-dev xkeycaps xbattle xonix
      xdaliclock tk40 tk41 xforms0.86 ghostview xloadimage xcolorsel
      xadmin xboard perl-debug tkined xtetris libreadline2-dev perl-suid
      nas xpilot xfig

削除するパッケージリストはシステムから削除されるパッケージを全て表示します。これはどの操作でも起きるもので、重要なものが失われることのないように注意深く確認すべきです。`-f` オプションを使った場合はパッケージの削除を伴うことが特に多く、そのためこのオプションを指定した場合は特に注意を払うようにしてください。この一覧にはインストールの中止等により一部だけがインストールされているために削除されるパッケージが含まれることがあります。

### 4.2.3. 新規パッケージリスト

    以下のパッケージが新たにインストールされます:
      zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base

新規パッケージリストでは単純にこれから起きることを再通知します。このパッケージ一覧は現在システムにインストールされておらず、APT 処理後には存在することになります。

### 4.2.4. 一時固定リスト

    以下のパッケージは保留されます
      compface man-db tetex-base msql libpaper svgalib1
      gs snmp arena lynx xpat2 groff xscreensaver

システム全体をアップグレードする場合、新しいパッケージが必要であったり既にインストールされているパッケージと競合するためにパッケージの新しいバージョンがインストールできないということがあります。この場合、そのパッケージは一時固定リストに表示されます。この一覧に挙げられたパッケージをインストールする最善の方法は `apt-get install` または dselect を使ってその問題を解決することです。

### 4.2.5. 保留パッケージの警告

    以下の変更禁止パッケージは変更されます:
      cvs

保留となっているパッケージをインストールするように APT に指示することもできます。その際、保留となっているパッケージを変更することを警告します。これは dist-upgrade または install を指示したときにしか起きないはずです。

### 4.2.6. 最後のまとめ

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

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

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

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

## 4.3. 状態表示

アーカイブやパッケージファイルのダウンロード中、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` オプションを使うと状態を表示しないようにできます。

## 4.4. Dpkg

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

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

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

戻る |  |
第3章 DSelect | ホーム |