Apt

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

  • February 3, 2022

語境

使用本地軟體包儲存庫,我可以從我控制的伺服器為我的 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 文件(儲存庫元數據)

使用一個打開的 shell 實例,它的工作目錄是包含上述.deb文件的 Apache 伺服器根文件夾,我呼叫了:

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 包儲存庫生成文件?

有很多方法可以解決這個問題;我用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
  1. 生成包目錄:
apt-ftparchive generate -c=aptftp.conf aptgenerate.conf
  1. 生成Release文件:
apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release
  1. 簽字:
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。

引用自:https://unix.stackexchange.com/questions/403485