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
オプションその他の実行されるコマンドに関連する動作を考慮したものとなります。
以下の特別パッケージがインストールされます: 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
コマンドの場合にのみ生成されます。一覧に挙げられるパッケージは自動インストールの結果による場合が多くなります。
以下のパッケージは「削除」されます: 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
オプションを使った場合はパッケージの削除を伴うことが特に多く、そのためこのオプションを指定した場合は特に注意を払うようにしてください。この一覧にはインストールの中止等により一部だけがインストールされているために削除されるパッケージが含まれることがあります。
以下のパッケージが新たにインストールされます: zlib1g xlib6g perl-base libgdbmg1 quake-lib gmp2 pgp-i python-base
新規パッケージリストでは単純にこれから起きることを再通知します。このパッケージ一覧は現在システムにインストールされておらず、APT 処理後には存在することになります。
以下のパッケージは保留されます compface man-db tetex-base msql libpaper svgalib1 gs snmp arena lynx xpat2 groff xscreensaver
システム全体をアップグレードする場合、新しいパッケージが必要であったり既にインストールされているパッケージと競合するためにパッケージの新しいバージョンがインストールできないということがあります。この場合、そのパッケージは一時固定リストに表示されます。この一覧に挙げられたパッケージをインストールする最善の方法は
apt-get install
または dselect
を使ってその問題を解決することです。
以下の変更禁止パッケージは変更されます: cvs
保留となっているパッケージをインストールするように APT に指示することもできます。その際、保留となっているパッケージを変更することを警告します。これは dist-upgrade または install を指示したときにしか起きないはずです。
最後に、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 もパッケージの処理中にいくつか質問し、パッケージ自体も複数質問するかもしれません。通常それぞれの質問の前にそれが何を聞いているのか説明します。その質問の内容は多岐にわたるものであり、ここで説明できるものでは全くありません。