LabHub
学习 学习路径 课程

包管理

做一个自己的仓库

在 LabHub 中继续学习

目标

从头创建一个没有互联网的apt存储库,在那里安装软件包。用手确认存储库实际上是“目录+索引文件”。

为什么重要

无论是封闭网络还是内部标准图像,还是CI缓存,最终需要的都是可控的存储库。apt从存储库读取的是Packages索引和Release因为只有元数据,所以只要制作这两个就可以了。file:///路径也会成为完整的存储库。了解这个结构,就可以立即区分“装了软件包但看不到”的原因是索引生成丢失还是客户端缓存。实际存储库会在这里添加GPG签名,但这次练习是为了专注于结构,所以用信任选项代替。

阶段

  1. /root/repo创建目录,/opt/fixtures/pkg/labhub-tool/opt/fixtures/pkg/labhub-extra分别.deb用罗构建/root/repo请放进去。
  2. /root/repo/Packages请制作目录。两个包裹的Package:所有项目都必须包含在内。
  3. /root/repo/Packages.gz请制作压缩文件。
  4. /root/repo/Release请创建文件。OriginLabelSuiteCodenameArchitecturesComponents六个键要分别排成一行Architectures对于价格来说all必须包括这个。
  5. /etc/apt/sources.list.d/labhub-local.list请注册这个存储库。路径是/root/repo,是flat格式。
  6. 更新索引,apt-cache policy labhub-extra的输出/root/repo-check/policy.txt请保存为。
  7. labhub-extra请用apt安装。根据依赖关系labhub-tool也必须一起安装。
  8. /root/repo-check/origin.txt请用两行写出来。 labhub-tool=<설치된 버전>/labhub-extra=<설치된 버전>

参考

准备套餐池

/root/repo创建目录,/opt/fixtures/pkg/labhub-tool/opt/fixtures/pkg/labhub-extra分别.deb用罗构建/root/repo请放进去。

分别构建两个图片,并将其收集到同一目录中。文件名可以自由选择,但扩展名必须为.deb。

创建Packages索引

/root/repo/Packages请制作目录。两个包裹的Package:所有项目都必须包含在内。

dpkg-scanpackages 接受第一个参数为要扫描的目录,第二个参数为override文件。如果没有override,则给出/dev/null。

制作索引压缩文件

/root/repo/Packages.gz请制作压缩文件。

apt首先寻找Packages.gz。最好同时留下原始文件,方便调试。

制作Release文件

/root/repo/Release请创建文件。OriginLabelSuiteCodenameArchitecturesComponents六个键要分别排成一行Architectures对于价格来说all必须包括这个。

Origin、Label、Suite、Codename、Architectures、Components这六个键依次输入一行。值可以自由设定,但Architectures中必须包含all。

存储库注册

/etc/apt/sources.list.d/labhub-local.list请注册这个存储库。路径是/root/repo,是flat格式。

flat存储库在路径后面加上./。因为没有签名,所以需要信任选项。

更新和确认索引

更新索引,apt-cache policy labhub-extra的输出/root/repo-check/policy.txt请保存为。

apt-get update后,用apt-cache policy查看候选者来自哪个存储库。输出应该显示存储库路径。

在这里暂停一下。Could not open file ... (13: Permission denied)如果出现,那就是权限问题。apt只下载部分_apt作为非特权用户降低执行(APT::Sandbox::User),/root是700,所以那个用户不能进入。存储器是/root在下面,只要打开通过权限就可以了——chmod o+x /root.查看列表的权限(r)仍然关闭着。

关闭沙盒的方法(-o APT::Sandbox::User=root虽然也有),但那是掩盖问题的。在实际工作中,将存储库/srv/var/www放在的原因就是这个。

在我的存储器中安装

labhub-extra请用apt安装。根据依赖关系labhub-tool也必须一起安装。

安装有依赖关系的那个,apt会自己把剩下的都拉过来。这是和dpkg -i不同的点。

来源确认报告

/root/repo-check/origin.txt请用两行写出来。 labhub-tool=<설치된 버전>/labhub-extra=<설치된 버전>

apt-cache policy的版本表中会显示存储库路径。请确认两个软件包都是来自本地存储库。