オフライン搬入バンドルを作る
目標
パッケージ1つとその依存関係の全体を「持ち込みバンドル」にまとめ、チェックサムのマニフェストで検証したうえで、そのバンドルだけでインストールを再現します。エアギャップ環境への持ち込み手順の縮小版です。
なぜ重要なのか
エアギャップ環境で最もよくある失敗は、「取得して持っていったのに依存関係が足りず、再び外に出なければならない」ことです。持ち込みの審査が1日に1回しかない組織では、1往復が1日です。そのため熟練者は、外側で依存関係グラフを丸ごと解いた結果を持って入ります。そして、媒体を通過したファイルが無傷かを確認する方法が必要です。チェックサムは転送中の破損を捉え、署名は出どころを保証します。このラボは、その手順の骨格を身につけます。
ステップ
/root/offlineディレクトリを作成し、cowsayをインストールするときに取得が必要なファイルのURI一覧を、/root/offline/uris.txtに保存してください。(実際にインストールしてはいけません。)cowsayとその依存関係をダウンロードだけして、取得した.debファイルを/root/offline/pool/に集めてください。最低でも2つ以上ある必要があります。/root/offline/poolの中のすべての.debについて、SHA-256のマニフェストを/root/offline/manifest.sha256として作成してください。- そのマニフェストで検証を行い、結果を
/root/offline/verify.txtに保存してください。すべての行が正常(OK)である必要があります。 /root/offline/poolをリポジトリにするために、PackagesとPackages.gzを生成してください。/etc/apt/sources.list.d/labhub-airgap.listでこのリポジトリを登録し、インデックスを更新してください。cowsayを再インストールして、持ち込んだものでもインストールできることを確認し、インストール後のcowsay labhubの実行結果を/root/offline/run.txtに保存してください。/root/offline/report.txtを次の4行で作成してください。PACKAGES=<pool 안 .deb 개수>/BYTES=<pool 안 .deb 파일 크기 합계(바이트)>/VERIFY=OK/SNAPSHOT=<오늘 날짜 YYYY-MM-DD>(プレースホルダーは順に、pool内の.debの数、pool内の.debファイルの合計バイト数、今日の日付です)
参考
- 取得したファイルは、通常
/var/cache/apt/archives/に溜まります。事前にapt-get cleanをしておくと、今回取得したものだけが残るので、区別しやすくなります。 - サイズの合計は、
du -bc /root/offline/pool/*.deb | tail -1またはstat -c %sの合計で求められます。 - よくある間違い1: ステップ3のマニフェストを絶対パスで作ると、ステップ4の検証が別のディレクトリで壊れます。
cdしたあとに相対パスで作るほうが安全です。 - よくある間違い2: ステップ1で実際にインストールしてしまうと、ステップ2で「すでに最新」と言われて、何も取得されません。
- よくある間違い3: ステップ6で
Permission deniedが出てインデックスの更新が失敗する場合です。aptは、ファイルを取得するときだけ_aptという非特権ユーザーに権限を落としますが、/rootが700なので、そのユーザーが通過できません。chmod o+x /rootで「入る」ための1マスだけを開ければよいのです(一覧の表示は、依然として閉じたままです)。
何を取得すべきかを先に計算
/root/offlineディレクトリを作成し、cowsayをインストールするときに取得が必要なファイルのURI一覧を、/root/offline/uris.txtに保存してください。(実際にインストールしてはいけません。)
apt-get installには、実際には取得せず、取得するURIの一覧だけを出力するオプションがあります。シミュレーション系のオプションを探してみてください。
パッケージのダウンロード
cowsayとその依存関係をダウンロードだけして、取得した.debファイルを/root/offline/pool/に集めてください。最低でも2つ以上ある必要があります。
インストールまではせず、ダウンロードだけを行うオプションがあります。取得したファイルは、aptのキャッシュディレクトリに溜まります。
チェックサムのマニフェスト生成
/root/offline/poolの中のすべての.debについて、SHA-256のマニフェストを/root/offline/manifest.sha256として作成してください。
sha256sumを複数のファイルに一度にかけると、「ハッシュ 空白 ファイル名」の形式が出力されます。あとで検証するときに、そのまま使える形式です。
マニフェストで検証
そのマニフェストで検証を行い、結果を/root/offline/verify.txtに保存してください。すべての行が正常(OK)である必要があります。
sha256sumには、ファイルの代わりにマニフェストを読んで検査するオプションがあります。検証は、マニフェストがあるディレクトリで実行しないと、パスが合いません。
持ち込んだものでリポジトリのインデックスを作る
/root/offline/poolをリポジトリにするために、PackagesとPackages.gzを生成してください。
前のラボと同じ方法です。ただし、今回はファイルが複数あるので、インデックスのPackageエントリの数を確認してみてください。
持ち込みリポジトリの登録
/etc/apt/sources.list.d/labhub-airgap.listでこのリポジトリを登録し、インデックスを更新してください。
リポジトリ名を前のラボと違うものにしてください。2つのリポジトリが同時に有効でも問題ありません。
持ち込みリポジトリから再インストール
cowsayを再インストールして、持ち込んだものでもインストールできることを確認し、インストール後のcowsay labhubの実行結果を/root/offline/run.txtに保存してください。
すでにインストール済みのパッケージを同じバージョンでもう一度インストールするには、再インストールのオプションが必要です。
持ち込みレポート
/root/offline/report.txtを次の4行で作成してください。
PACKAGES=<pool 안 .deb 개수> / BYTES=<pool 안 .deb 파일 크기 합계(바이트)> / VERIFY=OK / SNAPSHOT=<오늘 날짜 YYYY-MM-DD>(プレースホルダーは順に、pool内の.debの数、pool内の.debファイルの合計バイト数、今日の日付です)
マニフェストの行数、合計バイト数、検証結果をまとめればよいです。合計バイト数は、duやstatで求められます。