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

パッケージ管理

aptでパッケージを扱う

TT Labで続きを見る

目標

aptで検索・インストール・削除を行い、holdとpinでバージョンを固定するところまで身につけます。このラボが終わると、apt-cache policyの出力だけを見て、「なぜこのバージョンが選ばれたのか」を説明できるようになります。

なぜ重要なのか

aptはリポジトリにリアルタイムで問い合わせません。/var/lib/apt/lists/にキャッシュされたインデックスだけを見て判断し、同じパッケージが複数のリポジトリにあるときは、優先度で選びます。この仕組みを知ると、「リポジトリにはあるのに見えない」(インデックスが古い)と「社内ミラーを入れたのに公式から取得している」(優先度が同じ)が、一度に説明できます。このラボ環境にはインターネットがなく、/opt/localrepoのオフラインリポジトリだけがあるので、すべてのインストールはそのリポジトリから行われます。

ステップ

  1. /root/pkgディレクトリを作成し、apt-cache policyの全出力を/root/pkg/policy.txtに保存してください。
  2. treeというパッケージを検索して、結果を/root/pkg/search-tree.txtに保存してください。結果の中に、名前がちょうどtreeの行がある必要があります。
  3. treeのインストール候補バージョンだけを、1行で/root/pkg/tree-version.txtに書いてください。(例: 2.1.1-2ubuntu3)
  4. treeとncduの2つのパッケージをインストールしてください。
  5. cowsayをインストールし、その依存関係のうちDependsの行だけを選んで、/root/pkg/cowsay-depends.txtに保存してください。
  6. htopをインストールしたあと、アップグレードの対象から除外(hold)し、その事実を/root/pkg/hold.txtに保存してください。
  7. /etc/apt/preferences.d/labhub.prefを作成し、htopパッケージの優先度を1001に固定してください。Package、Pin、Pin-Priorityの3行がすべてある必要があります。
  8. /root/pkg/report.txtを作成してください。先ほどインストールしたtree、ncdu、htop、cowsayの4つのパッケージについて、이름 버전の形式で1行ずつ書き、最後の行にHOLD=<hold 걸린 패키지 이름>を書いてください(プレースホルダーは名前とバージョン、およびholdがかかったパッケージ名です)。

参考

作業ディレクトリとリポジトリの確認

/root/pkgディレクトリを作成し、apt-cache policyの全出力を/root/pkg/policy.txtに保存してください。

apt-cache policyを引数なしで実行すると、現在設定されているリポジトリと優先度がすべて表示されます。その出力をファイルに保存してください。

パッケージの検索

treeというパッケージを検索して、結果を/root/pkg/search-tree.txtに保存してください。結果の中に、名前がちょうどtreeの行がある必要があります。

apt-cache searchは、名前と説明から検索します。結果のうち、名前がちょうどtreeの行がある必要があります。

インストール候補バージョンの確認

treeのインストール候補バージョンだけを、1行で/root/pkg/tree-version.txtに書いてください。(例: 2.1.1-2ubuntu3)

apt-cache policy <パッケージ名>のCandidateの行にある値です。バージョン文字列だけを1行で書いてください。

パッケージのインストール

treeとncduの2つのパッケージをインストールしてください。

インストール後、dpkg -sで状態を確認してみてください。Statusの行が「install ok installed」になっていれば、本当にインストールされています。

依存関係の一覧を取り出す

cowsayをインストールし、その依存関係のうちDependsの行だけを選んで、/root/pkg/cowsay-depends.txtに保存してください。

先にインストールしておかないと、後のステップのレポートが埋まりません。apt-cache dependsは、Dependsのほかに、RecommendsやSuggestsも一緒に表示するので、Dependsの行だけを残してください。

アップグレードから除外する

htopをインストールしたあと、アップグレードの対象から除外(hold)し、その事実を/root/pkg/hold.txtに保存してください。

apt-markには、hold / unhold / showholdのサブコマンドがあります。印が付いたかどうかの確認までしてください。

ピンファイルで優先度を指定

/etc/apt/preferences.d/labhub.prefを作成し、htopパッケージの優先度を1001に固定してください。Package、Pin、Pin-Priorityの3行がすべてある必要があります。

ピンファイルは、Package / Pin / Pin-Priorityの3行が1セットです。Pinは、version、release、originのどれかで始まります。

インストール状態のレポート

/root/pkg/report.txtを作成してください。先ほどインストールしたtree、ncdu、htop、cowsayの4つのパッケージについて、이름 버전の形式で1行ずつ書き、最後の行にHOLD=<hold 걸린 패키지 이름>を書いてください(プレースホルダーは名前とバージョン、およびholdがかかったパッケージ名です)。

dpkg-queryの-W -fオプションを使うと、欲しいフィールドだけを欲しい形式で取り出せます。holdの一覧は、apt-markにあります。