![如何将软件包及其依赖项添加到我自己的 apt 存储库](https://linux22.com/image/604538/%E5%A6%82%E4%BD%95%E5%B0%86%E8%BD%AF%E4%BB%B6%E5%8C%85%E5%8F%8A%E5%85%B6%E4%BE%9D%E8%B5%96%E9%A1%B9%E6%B7%BB%E5%8A%A0%E5%88%B0%E6%88%91%E8%87%AA%E5%B7%B1%E7%9A%84%20apt%20%E5%AD%98%E5%82%A8%E5%BA%93.png)
我正在设置一个 apt 存储库来管理我构建的服务器的依赖项。我这样做是因为我希望能够反复构建完全相同的服务器。
当然,有一些工具(apt-get
)可以分析正在运行的系统并下载满足给定要求所需的软件包。例如,当我运行
sudo apt-get install --download-only vim
在这种情况下,apt-get
分析系统状态并下载在我的系统上安装 vim 所需的软件包。
我正在寻找一个类似的工具,可以让我下载软件包以添加到我自己的 apt 存储库apt-get
中。它应该对存储库进行与我的系统相同类型的依赖性分析,并且只下载存储库中尚未存在的软件包。因此,当我在apt-get install ...
指向我的存储库的系统上运行时,它将能够安装该软件包及其所有依赖项。是否有可用的工具来分析我的存储库中已有的软件包,然后下载所需的其他软件包?
答案1
正如 @Andrea De Palo 所说,理论上您只需使用 puppet,在安装主发行版后,只需运行,puppet resource package
它将列出所有已安装的软件包及其确切版本等。
之后只需创建一个包含所有列出包的模块即可。此外,您还可以使用 puppet 来自定义配置文件等。
值得一试。
答案2
我有一个简单的 Makefile 来执行此操作,但是在 shell 中这是同样的事情:
#!/bin/bash
rm -f Release* Packages* new-release
dpkg-scanpackages . /dev/null > Packages
gzip -c -9 <Packages >Packages.gz
apt-ftparchive release . > new-release
mv new-release Release
gpg -abs -o Release.gpg Release
如果您不想对存储库进行签名,则不需要执行 GPG 步骤,但是这样做所需的努力很少(而且现在的替代方案是更改配置以禁用签名检查,因此您需要采取一些措施)。
然后,您可以像这样引用客户端的 /etc/apt/sources.list 中的目录:
# Local directory
deb file:///var/local/debs ./
# Via http(s)
deb http://foo.bar.com/debian ./
HTTPS 是一种很好的方式,可以在不需要 VPN 的情况下允许来自全球服务器的更新,我在之前的工作中就这样做了,在我们的 puppet 部署中搭载了 CA,所以它是完全自动化的。
答案3
我自己从未使用过它,不确定它是否符合您的需求。但您可能对以下内容感兴趣http://wiki.debian.org/DebPartialMirror
答案4
那么使用木偶自动化包管理?