做一个自己的仓库
目标
从头创建一个没有互联网的apt存储库,在那里安装软件包。用手确认存储库实际上是“目录+索引文件”。
为什么重要
无论是封闭网络还是内部标准图像,还是CI缓存,最终需要的都是可控的存储库。apt从存储库读取的是Packages索引和Release因为只有元数据,所以只要制作这两个就可以了。file:///路径也会成为完整的存储库。了解这个结构,就可以立即区分“装了软件包但看不到”的原因是索引生成丢失还是客户端缓存。实际存储库会在这里添加GPG签名,但这次练习是为了专注于结构,所以用信任选项代替。
阶段
/root/repo创建目录,/opt/fixtures/pkg/labhub-tool科/opt/fixtures/pkg/labhub-extra分别.deb用罗构建/root/repo请放进去。/root/repo/Packages请制作目录。两个包裹的Package:所有项目都必须包含在内。/root/repo/Packages.gz请制作压缩文件。/root/repo/Release请创建文件。Origin,Label,Suite,Codename,Architectures,Components六个键要分别排成一行Architectures对于价格来说all必须包括这个。/etc/apt/sources.list.d/labhub-local.list请注册这个存储库。路径是/root/repo,是flat格式。- 更新索引,
apt-cache policy labhub-extra的输出/root/repo-check/policy.txt请保存为。 labhub-extra请用apt安装。根据依赖关系labhub-tool也必须一起安装。/root/repo-check/origin.txt请用两行写出来。labhub-tool=<설치된 버전>/labhub-extra=<설치된 버전>
参考
dpkg-scanpackages /root/repo /dev/null > /root/repo/Packages以形式制作索引。根据路径表示方式Filename:因为价格会变apt-get update请仔细阅读后面的错误信息。- sources.list一行的形式是
deb [옵션] <URI> <suite> [component...]而且,flat存储库在suite的位置./写。 - 常见的错误1:制作索引后
apt-get update没有打开的情况下一直出现“找不到”的情况。 - 常见的错误2:没有签名
NO_PUBKEY/not signed发生错误时。在本练习中,我们将转到信任选项。
准备套餐池
/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请创建文件。Origin,Label,Suite,Codename,Architectures,Components六个键要分别排成一行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的版本表中会显示存储库路径。请确认两个软件包都是来自本地存储库。