如何在本地包存储库上生成“Release”文件?

如何在本地包存储库上生成“Release”文件?

语境

通过本地软件包存储库,我能够从我控制的服务器向我的 APT 实例提供一组软件包和配置,允许任何客户端仅使用普通命令来安装此软件apt install(前提是将存储库添加到其/etc/apt/sources.list{,.d/})。

为了尝试创建本地软件包存储库,我遵循了本教程bipmedia.com 上的内容大致包括:

  1. 生成.deb
  2. 将 .deb 存储在 Apache2 Web 服务器上
  3. 生成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

  1. 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”以匹配您托管的二进制文件)。

  2. 旁边创建一个匹配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如果不需要则删除)。

  3. 在您的存储库中,清除数据库:

    rm -f packages-i386.db packages-amd64.db
    
  4. 生成包目录:

    apt-ftparchive generate -c=aptftp.conf aptgenerate.conf
    
  5. 生成Release文件:

    apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release
    
  6. 签字:

    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。

相关内容