TT Lab
はじめる
学ぶ 学習パス コース

パッケージ管理

dpkgで一層下を見る

TT Labで続きを見る

目標

dpkgでシステムを照会し、自分で.debをビルドしてインストールまで行います。aptなしでパッケージを扱ってみると、aptが何を肩代わりしてくれていたのかが明確になります。

なぜ重要なのか

dpkgはリポジトリを知りません。与えられたファイルを展開し(unpack)、依存が満たされれば仕上げ(configure)をするだけです。そのためdpkg -iは、依存関係を自動では取ってこず、iU状態で止まります。この分業を知ると、エアギャップ環境でなぜ「インストール順序」が重要なのか、apt-get -f installが何を直すのかがすべて説明できます。そしてdpkg -Sでファイルの出どころを確認する習慣は、見知らぬサーバーで最初に使う武器です。

ステップ

  1. /root/dpkgディレクトリを作成し、現在のインストール完了(ii)状態のパッケージの数だけを、数字1行で/root/dpkg/count.txtに書いてください。
  2. coreutilsパッケージがインストールしたファイルのうち、/usr/bin/の下にあるものだけを選んで、/root/dpkg/coreutils-bin.txtに保存してください。
  3. /usr/bin/lsを所有するパッケージ名だけを、1行で/root/dpkg/owner.txtに書いてください。
  4. dpkg-queryで、bashパッケージの이름 버전 아키텍처を空白区切りの1行にして、/root/dpkg/bash-fields.txtに保存してください(プレースホルダーは名前・バージョン・アーキテクチャです)。
  5. /opt/fixtures/pkg/labhub-toolディレクトリを.debにビルドして、/root/dpkg/labhub-tool_1.2.0-labhub1_all.debとして保存してください。
  6. ビルドしたパッケージの制御情報を/root/dpkg/deb-info.txtに、ファイル一覧を/root/dpkg/deb-contents.txtに保存してください。
  7. そのパッケージをインストールし、labhub-toolコマンドを実行した結果を/root/dpkg/run.txtに保存してください。
  8. /root/dpkg/report.txtを、次の4行で作成してください。 PACKAGE=labhub-tool / VERSION=<설치된 버전> / FILES=<이 패키지가 깐 실제 파일 개수(디렉터리 제외)> / OWNER_OF_LS=<3번에서 찾은 패키지 이름>(プレースホルダーは順に、インストールされたバージョン、ディレクトリを除いてこのパッケージが入れた実際のファイル数、ステップ3で見つけたパッケージ名です)

参考

作業ディレクトリとインストール一覧

/root/dpkgディレクトリを作成し、現在のインストール完了(ii)状態のパッケージの数だけを、数字1行で/root/dpkg/count.txtに書いてください。

dpkg -lの出力で、実際のパッケージの行は状態表示(iiなど)で始まります。ヘッダーの5行はパッケージではありません。

パッケージが入れたファイルの一覧

coreutilsパッケージがインストールしたファイルのうち、/usr/bin/の下にあるものだけを選んで、/root/dpkg/coreutils-bin.txtに保存してください。

dpkg -Lはディレクトリも一緒に出力します。実行ファイルだけが必要なら、パスで絞り込む必要があります。

このファイルは誰が入れたか

/usr/bin/lsを所有するパッケージ名だけを、1行で/root/dpkg/owner.txtに書いてください。

dpkg -Sは「パッケージ: パス」の形式で答えます。必要なのはコロンの前の部分です。

必要なフィールドだけを取り出す

dpkg-queryで、bashパッケージの이름 버전 아키텍처を空白区切りの1行にして、/root/dpkg/bash-fields.txtに保存してください(プレースホルダーは名前・バージョン・アーキテクチャです)。

dpkg-query -W -fのフォーマット文字列では、フィールドをドル記号と波括弧で囲みます。改行はバックスラッシュとnです。

フィクスチャで.debをビルドする

/opt/fixtures/pkg/labhub-toolディレクトリを.debにビルドして、/root/dpkg/labhub-tool_1.2.0-labhub1_all.debとして保存してください。

dpkg-deb --buildは、DEBIAN/controlが入っているディレクトリを丸ごとパッケージにします。出力ファイル名は、2番目の引数で指定できます。

ビルドしたパッケージを調べる

ビルドしたパッケージの制御情報を/root/dpkg/deb-info.txtに、ファイル一覧を/root/dpkg/deb-contents.txtに保存してください。

dpkg-debには-I(情報)と-c(内容の一覧)のオプションがあります。2つの出力は性質がまったく違います。

インストールして状態を確認

そのパッケージをインストールし、labhub-toolコマンドを実行した結果を/root/dpkg/run.txtに保存してください。

dpkg -iでインストールしたあと、dpkg -sのStatusの行を確認してください。依存関係が解決しないと、iU状態のまま残ります。

パッケージの総合レポート

/root/dpkg/report.txtを次の4行で作成してください。 PACKAGE=labhub-tool / VERSION=<설치된 버전> / FILES=<이 패키지가 깐 실제 파일 개수(디렉터리 제외)> / OWNER_OF_LS=<3번에서 찾은 패키지 이름>(プレースホルダーは順に、インストールされたバージョン、ディレクトリを除いてこのパッケージが入れた実際のファイル数、ステップ3で見つけたパッケージ名です)

前のステップで作ったファイルを再利用してください。ファイル数は、dpkg -Lの結果から実際のファイルだけを数えればよいです。