検証とロールバック
目標
持ち込み物の完全性を検証して、改ざんを検出し、バージョンを固定して、実際にロールバックまで行います。
なぜ重要なのか
エアギャップ環境では、ロールバック経路のない変更は行いません。何かを削除したのに、もう一度取得するには、持ち込み審査をまた通す必要があり、それが数日です。そのため、作業手続きの半分は、「何を変えたかを記録して、どう元に戻すかをあらかじめ決めること」です。
そして、検証は、層を順番に行う必要があります。最終確認だけを試して失敗すると、どの層が問題なのかわかりません。カーネル → ユーザー空間 → コンテナへの注入 → 実際の実行の順に上がっていけば、失敗した場所が、そのまま原因です。
ステップ
/root/gpu/poolの中のすべての.debに対する、SHA-256マニフェストを/root/gpu/manifest.sha256として作成して、検証を行い、結果を/root/gpu/verify-ok.txtに保存してください。すべての行が、正常である必要があります。/root/gpu/tamper/ディレクトリを作成して、.debを1つコピーしたあと、コピーを改ざんして、そのコピーに対する検証が失敗することを確認し、出力を/root/gpu/verify-fail.txtに保存してください。元のpoolは、そのままである必要があります。- インストールされた
nvidia-container-toolkitのファイルの完全性を確認して、結果を/root/gpu/dpkg-verify.txtに保存してください。 /root/gpu/verify-plan.txtを、次の4行で作成してください。実際のGPUがある環境での、検証の順序です。L1=lsmod/L2=nvidia-smi/L3=nvidia-ctk/L4=podman-runnvidia-driver-550とnvidia-container-toolkitを、アップグレードの対象から外して、固定の一覧を/root/gpu/holds.txtに保存してください。2つのパッケージが、両方見える必要があります。- aptのインストールトランザクションの記録から、今回のインストールに関連する部分を
/root/gpu/history.txtに保存してください。nvidiaという文字列が、含まれている必要があります。 nvidia-container-toolkitを、設定ファイルまで完全に削除(ロールバック)して、削除後の状態を/root/gpu/after-rollback.txtに保存してください。そのパッケージが、インストール状態ではなく、nvidia-driver-550は、今もインストール状態である必要があります。/root/gpu/final-report.txtを、次の6行で作成してください。BUNDLE_VERIFY=OK/TAMPER_DETECTED=yes/HELD=2/DRIVER_STILL=installed/TOOLKIT_NOW=removed/SNAPSHOT=<오늘 날짜 YYYY-MM-DD>(プレースホルダーは今日の日付YYYY-MM-DDです)
参考
- マニフェストは、
cd /root/gpu/pool && sha256sum *.deb > ../manifest.sha256の形で作成して、検証も、同じディレクトリでsha256sum -c ../manifest.sha256で行います。 - 改ざんは、
printf 'x' >> <사본>のように、バイトを追加すれば済みます(プレースホルダーはコピーです)。 - ファイルの完全性の確認は、
dpkg -V <패키지>です(プレースホルダーはパッケージです)。出力が空なら、正常です。 - 固定の解除は、
apt-mark unhold <패키지>です(プレースホルダーはパッケージです)。ステップ7の前に、必要になることがあります。 - よくある間違い1: ステップ2で、pool内の元のファイルを改ざんして、以降のステップがすべて壊れること。
- よくある間違い2: ステップ7で、
removeだけを使うと、設定ファイルが残って、rcの状態になります。完全な削除が必要です。
完全性マニフェストを生成する
/root/gpu/poolの中のすべての.debに対する、SHA-256マニフェストを/root/gpu/manifest.sha256として作成して、検証を行い、結果を/root/gpu/verify-ok.txtに保存してください。すべての行が、正常である必要があります。
pool内のすべての.debについて、チェックサムを作成します。検証の便宜のために、相対パスで作成してください。
改ざんの検出を再現する
/root/gpu/tamper/ディレクトリを作成して、.debを1つコピーしたあと、コピーを改ざんして、そのコピーに対する検証が失敗することを確認し、出力を/root/gpu/verify-fail.txtに保存してください。元のpoolは、そのままである必要があります。
元ではなく、コピーを改ざんしてください。検証コマンドの失敗の出力を、そのまま保存します。
インストールされたファイルの完全性を確認する
インストールされたnvidia-container-toolkitのファイルの完全性を確認して、結果を/root/gpu/dpkg-verify.txtに保存してください。
dpkgには、インストール時点のハッシュと、現在のファイルを比較するオプションがあります。出力が空なら、正常です。
検証計画の文書
/root/gpu/verify-plan.txtを、次の4行で作成してください。実際のGPUがある環境での、検証の順序です。
L1=lsmod / L2=nvidia-smi / L3=nvidia-ctk / L4=podman-run
層を順番に並べます。各層で何を確認するかを、キー=値で書いてください。
バージョンを固定する
nvidia-driver-550とnvidia-container-toolkitを、アップグレードの対象から外して、固定の一覧を/root/gpu/holds.txtに保存してください。2つのパッケージが、両方見える必要があります。
ドライバーとツールキットを、両方固定します。固定の一覧を照会して、確認してください。
インストールトランザクションを確認する
aptのインストールトランザクションの記録から、今回のインストールに関連する部分を/root/gpu/history.txtに保存してください。nvidiaという文字列が、含まれている必要があります。
aptの履歴ログに、各トランザクションの時刻とコマンドラインが残ります。
ロールバックを実行する
nvidia-container-toolkitを、設定ファイルまで完全に削除(ロールバック)して、削除後の状態を/root/gpu/after-rollback.txtに保存してください。そのパッケージが、インストール状態ではなく、nvidia-driver-550は、今もインストール状態である必要があります。
ツールキットだけを元に戻します。設定ファイルまで削除するオプションを使い、固定が掛かっていれば、先に解除する必要があります。
持ち込み・インストール・検証・ロールバックのレポート
/root/gpu/final-report.txtを、次の6行で作成してください。
BUNDLE_VERIFY=OK / TAMPER_DETECTED=yes / HELD=2 / DRIVER_STILL=installed / TOOLKIT_NOW=removed / SNAPSHOT=<오늘 날짜 YYYY-MM-DD>(プレースホルダーは今日の日付YYYY-MM-DDです)
全過程の結果を集めます。値は、実際に確認したものである必要があります。