用离线仓库安装
目标
用导入的 .deb bundle 建立仓库并安装驱动,先确认仅凭第一批导入内容无法安装 toolkit,再加入第二批导入内容完成安装。整个过程与实际隔离网络中的操作一致。
为什么重要
如果用 dpkg -i 逐个安装导入文件,就必须由人工安排安装顺序,而且下次还得再次记住这个顺序。构建成仓库后,apt 会解析依赖图,并且该仓库可以持续复用。此外,**安装模拟(-s)**才是判断导入是否成功的最终答案:若此处出现 unmet dependencies,其列表就是第二批导入清单。
继续使用上一实验(gpu-deps)中创建的 /root/gpu/pool。
步骤
- 在
/root/gpu/pool中添加Release文件。Origin、Label、Suite、Codename、Architectures、Components六个键必须各占一行,并且Architectures中必须包含amd64。 - 通过
/etc/apt/sources.list.d/gpu-airgap.list注册该仓库并更新索引。然后将apt-cache policy nvidia-driver-550的输出保存到/root/gpu/policy.txt。 - 模拟安装
nvidia-driver-550,将输出保存到/root/gpu/sim-driver.txt。以Inst开头的行必须有 11 行。 - 模拟安装
nvidia-container-toolkit,确认其失败,并将输出(包括标准错误)保存到/root/gpu/sim-toolkit-fail.txt。文件中必须提到libnvidia-container1。 - 构建
/opt/fixtures/gpu-airgap/src2/中的包并添加到/root/gpu/pool/,重新生成索引并更新索引。Package:条目必须变为 15 个。 - 实际安装
nvidia-driver-550和nvidia-container-toolkit。 - 用
dpkg -l检查名称以nvidia或libnvidia开头的包状态,并保存到/root/gpu/installed.txt。所有行都必须处于ii状态。 - 按以下 4 行创建
/root/gpu/install-report.txt。DRIVER_VERSION=<nvidia-driver-550 의 설치된 버전>/TOOLKIT_VERSION=<nvidia-container-toolkit 의 설치된 버전>/INSTALLED=<이름이 nvidia 또는 libnvidia 로 시작하는 설치된 패키지 수>/SECOND_INTAKE=libnvidia-container1
参考
- 安装模拟命令为
apt-get install -s <패키지>。失败输出会写到标准错误,请用2>&1一并捕获。 - 可用
dpkg-query -W -f='${Version}' <패키지>提取已安装版本,其中可能包含 epoch。 - 重新生成索引后,务必再次执行
apt-get update。 Release中记录了Packages的大小和哈希。因此,如果第 5 步重新生成了Packages,就也必须重新生成Release。否则哈希不一致,apt 会悄悄忽略新索引,使结果变为Candidate: (none);由于不会报错,问题很难定位。- 常见错误 1:第 5 步只重新生成索引,却忘记执行
apt-get update,导致安装持续失败。 - 常见错误 2:第 8 步填写版本时擅自去掉 epoch(
1:)。请原样填写查询结果。
用导入内容构建仓库
在 /root/gpu/pool 中添加 Release 文件。Origin、Label、Suite、Codename、Architectures、Components 六个键必须各占一行,并且 Architectures 中必须包含 amd64。
继续使用上一实验创建的 pool,同时也要创建 Release 文件。
注册并更新仓库
通过 /etc/apt/sources.list.d/gpu-airgap.list 注册该仓库并更新索引。然后将 apt-cache policy nvidia-driver-550 的输出保存到 /root/gpu/policy.txt。
这是 flat 仓库格式。注册后必须更新索引,才能看到包。
模拟安装驱动
模拟安装 nvidia-driver-550,将输出保存到 /root/gpu/sim-driver.txt。以 Inst 开头的行必须有 11 行。
-s 选项不会修改任何内容,只会输出计划。请统计以 Inst 开头的行数。
确认 toolkit 安装受阻
模拟安装 nvidia-container-toolkit,确认其失败,并将输出(包括标准错误)保存到 /root/gpu/sim-toolkit-fail.txt。文件中必须提到 libnvidia-container1。
用 toolkit 执行同样的模拟会失败。请原样保存错误输出。
加入第二批导入内容
构建 /opt/fixtures/gpu-airgap/src2/ 中的包并添加到 /root/gpu/pool/,重新生成索引并更新索引。Package: 条目必须变为 15 个。
src2 目录中包含缺失的包。构建后放入 pool,并重新生成索引。
实际安装
实际安装 nvidia-driver-550 和 nvidia-container-toolkit。
可以一次性安装驱动和 toolkit。安装后检查状态。
验证安装状态
用 dpkg -l 检查名称以 nvidia 或 libnvidia 开头的包状态,并保存到 /root/gpu/installed.txt。所有行都必须处于 ii 状态。
dpkg -l 的所有状态标记都必须是 ii。若有其他状态,说明安装尚未完成。
安装报告
按以下 4 行创建 /root/gpu/install-report.txt。
DRIVER_VERSION=<nvidia-driver-550 의 설치된 버전> / TOOLKIT_VERSION=<nvidia-container-toolkit 의 설치된 버전> / INSTALLED=<이름이 nvidia 또는 libnvidia 로 시작하는 설치된 패키지 수> / SECOND_INTAKE=libnvidia-container1
汇总已安装包的数量和版本。值必须来自实际查询结果。