如何在本地包儲存庫上生成“Release”文件?
語境
使用本地軟體包儲存庫,我可以從我控制的伺服器為我的 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 文件(儲存庫元數據)
使用一個打開的 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
.
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
- 生成包目錄:
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。