语境
通过本地软件包存储库,我能够从我控制的服务器向我的 APT 实例提供一组软件包和配置,允许任何客户端仅使用普通命令来安装此软件apt install
(前提是将存储库添加到其/etc/apt/sources.list{,.d/}
)。
为了尝试创建本地软件包存储库,我遵循了本教程bipmedia.com 上的内容大致包括:
- 生成.deb
- 将 .deb 存储在 Apache2 Web 服务器上
- 生成Package.gz文件
我的尝试
生成二进制包文件
要生成 .deb,需要软件文件,生成带有元数据的 DEBIAN 文件夹,然后使用以下命令编译代码并组装包:
dpkg-deb --build [
source code tree with DEBIAN directory
]
使用 Apache2 服务器提供存储库文件
我将跳过这一部分,因为它与我要解决的问题无关。
生成 Packages.gz 文件(存储库元数据)
.deb
对于工作目录是包含上面文件的 Apache 服务器根文件夹的开放 shell 实例,我调用了:
dpkg-scanpackages debian /dev/null | gzip -9c >debian/Packages.gz
问题
调用apt update
客户端计算机时,它会抱怨:
W: The repository 'http://example.com packages/ Release' does not have a Release file.
我的本地存储库中缺少这个必要的文件。它似乎是一个包校验和的寄存器,但是在互联网上搜索后,我对该主题的了解非常有限,使我无法找到如何生成它。
笔记:我的/etc/apt/sources.list
文件确实有以下行:
deb http://example.com packages/
问题
如何Release
为本地 APT 软件包存储库生成文件?
答案1
有多种方法可以解决这个问题;我用apt-ftparchive
。
aptftp.conf
在存储库的根目录中创建一个文件:APT::FTPArchive::Release { Origin "Your origin"; Label "Your label"; Suite "unstable"; Codename "sid"; Architectures "amd64 i386 source"; Components "main"; Description "Your description"; };
使用适当的值(至少更改“Origin”、“Label”、“Description”,并调整“Architectures”以匹配您托管的二进制文件)。
旁边创建一个匹配
aptgenerate.conf
文件:Dir::ArchiveDir "."; Dir::CacheDir "."; TreeDefault::Directory "pool/"; TreeDefault::SrcDirectory "pool/"; Default::Packages::Extensions ".deb"; Default::Packages::Compress ". gzip bzip2"; Default::Sources::Compress ". gzip bzip2"; Default::Contents::Compress "gzip bzip2"; BinDirectory "dists/unstable/main/binary-amd64" { Packages "dists/unstable/main/binary-amd64/Packages"; Contents "dists/unstable/Contents-amd64"; SrcPackages "dists/unstable/main/source/Sources"; }; BinDirectory "dists/unstable/main/binary-i386" { Packages "dists/unstable/main/binary-i386/Packages"; Contents "dists/unstable/Contents-i386"; SrcPackages "dists/unstable/main/source/Sources"; }; Tree "dists/unstable" { Sections "main"; # contrib non-free"; Architectures "amd64 i386 source"; };
(
i386
如果不需要则删除)。在您的存储库中,清除数据库:
rm -f packages-i386.db packages-amd64.db
生成包目录:
apt-ftparchive generate -c=aptftp.conf aptgenerate.conf
生成
Release
文件:apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release
签字:
gpg -u yourkeyid -bao dists/unstable/Release.gpg dists/unstable/Release gpg -u yourkeyid --clear-sign --output dists/unstable/InRelease dists/unstable/Release
(用适当的 id 代替
yourkeyid
)。
每当您对存储库进行更改时,都需要再次运行步骤 3 到 6。