做出离线引入包
目标
将一个软件包及其全部依赖项打成一个“导入包”,用校验和清单验证后,仅用这个包重现安装过程。这是隔离网络导入流程的缩小版。
为什么重要
隔离网络中最常见的失败是“已经下载带进去,却因缺少依赖项而不得不再次出来”。在每天只进行一次导入审核的组织里,一个来回就意味着一天。因此,熟练的工程师会把在外部完整解析依赖关系图所得的结果带进去。同时,还需要一种方法确认通过介质传输的文件是否完好——校验和能够发现传输损坏,签名则能保证来源。本实验将帮助你掌握这套流程的骨架。
步骤
- 创建
/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>
参考
- 下载的文件通常会累积在
/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只开放一级“进入”权限即可(仍然不能列出目录内容)。
先计算需要下载的内容
创建 /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 注册该软件源并更新索引。
请使用与上一个实验不同的软件源名称。两个软件源同时有效也没有问题。
从导入的软件源重新安装
重新安装 cowsay,确认也能使用导入的软件包完成安装;安装后,将 cowsay labhub 的执行结果保存为 /root/offline/run.txt。
要以相同版本重新安装已经安装的软件包,需要使用重新安装选项。
导入报告
将 /root/offline/report.txt 创建为以下 4 行。
PACKAGES=<pool 안 .deb 개수> / BYTES=<pool 안 .deb 파일 크기 합계(바이트)> / VERIFY=OK / SNAPSHOT=<오늘 날짜 YYYY-MM-DD>
汇总清单行数、总字节数和验证结果即可。总字节数可以使用 du 或 stat 计算。