過去問ドリル

LinuCレベル1 リポジトリとパッケージ管理 問30

リポジトリとパッケージ管理/Debianパッケージ管理

Debian系のシステムで dpkg -i foo_1.0_amd64.deb を実行したところ、依存するパッケージ libbar がインストールされていないためにエラーとなり、foo は設定が完了していない状態で残った。リポジトリから不足している依存パッケージを取得し、foo のインストールを完了させるコマンドとして適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル1の出題範囲「リポジトリとパッケージ管理」に対応。実際の試験問題ではありません)

正解:B

解説

dpkg は指定した .deb ファイルを展開・設定するだけで、足りない依存パッケージをリポジトリから取得する機能はありません。そのため依存関係を満たせないと、パッケージは設定されないまま残ります。apt-get install -f(-f は --fix-broken)をパッケージ名を付けずに実行すると、壊れた依存関係を修復しようとして、不足しているパッケージをリポジトリから取得してインストールし、foo の設定も完了させます。なお、最初から apt install ./foo_1.0_amd64.deb のようにaptでファイルを指定すれば、依存パッケージもあわせて導入できます。

選択肢ごとの解説

  • A誤り。dpkg --configure -a は、展開済みで設定が終わっていないパッケージの設定を行いますが、依存パッケージを取得する機能はないため、libbar が無いままでは再び失敗します。
  • B正しい。apt-get install -f は壊れた依存関係を修復し、不足している libbar を取得したうえで foo の設定を完了させます。
  • C誤り。dpkg -s foo は、パッケージ foo の状態や依存関係などの情報を表示するだけで、インストールを完了させることはできません。
  • D誤り。apt-get autoclean は、もうダウンロードできない古い .deb ファイルをキャッシュから削除するもので、依存関係の修復は行いません。
LinuCレベル1の問題を演習モードで解く