How to generate the `Release` file on a local package repository?
There are a number of ways of going about this; I use apt-ftparchive
.
Create an
aptftp.conf
file in the root of your repository:APT::FTPArchive::Release { Origin "Your origin"; Label "Your label"; Suite "unstable"; Codename "sid"; Architectures "amd64 i386 source"; Components "main"; Description "Your description"; };
with the appropriate values (change “Origin”, “Label”, “Description” at least, and adjust “Architectures” to match the binaries you host).
Create a matching
aptgenerate.conf
file alongside: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"; };
(removing
i386
if you don’t need that).In your repository, clear the database:
rm -f packages-i386.db packages-amd64.db
Generate the package catalogs:
apt-ftparchive generate -c=aptftp.conf aptgenerate.conf
Generate the
Release
file:apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release
Sign it:
gpg -u yourkeyid -bao dists/unstable/Release.gpg dists/unstable/Release gpg -u yourkeyid --clear-sign --output dists/unstable/InRelease dists/unstable/Release
(with the appropriate id instead of
yourkeyid
).
Whenever you make a change to the repository, you need to run steps 3 to 6 again.
Related videos on Youtube
Adrian Maire
Enthusiast for most technological and scientific topics, specially computer science. I made a 300ECTS degree in computer science at UCLM (Spain) and I am currently working at Nexthink in Lausanne. I programmed my first ("finished") 2D video-game in VisualBasic-6 when I was 14, and since then, I spent most of my free time in personal projects: Real time graphics(opengl), AI neural networks, electronic, mechanical devices, house improvement...
Updated on September 18, 2022Comments
-
Adrian Maire over 1 year
CONTEXT
With a local package repository, I'm able to provide my APT instances with a set of software packages and configurations from a server which I control, allowing any client to install this software using just the normal
apt install
command (providing the repository is added to their/etc/apt/sources.list{,.d/}
).For my attempt at creating a local package repository, I followed this tutorial on bipmedia.com, which roughly consists of:
- Generate the .deb
- Store the .deb on an Apache2 web server
- Generate a Package.gz file
My Attempt
Generating the binary package file
To generate the .deb, the software files are required, a DEBIAN folder with metadata is generated and the following command compiles the code and assembles the package:
dpkg-deb --build [
source code tree with DEBIAN directory
]
Serve repository files with Apache2 server
I'm skipping this part as it's unrelated to the problem I'm seeking to solve with this question.
Generating a Packages.gz file (repository metadata)
With the an open shell instance whose working directory is the Apache server root folder containing the
.deb
file from above, I called:dpkg-scanpackages debian /dev/null | gzip -9c >debian/Packages.gz
PROBLEM
Calling
apt update
on the client machine, it complains with:W: The repository 'http://example.com packages/ Release' does not have a Release file.
This necessary file is missing in my local repository. It seems to be a register of package checksums, but after searching on the Internet, my very limited understanding of the topic kept me from being able to find out how to generate it.
Note: My
/etc/apt/sources.list
file does have the following line:deb http://example.com packages/
QUESTION
How do I generate the
Release
file for a local APT package repository? -
Toby almost 5 yearsCan you use something like ` dpkg-scanpackages` rather than
apt-ftparchive
? -
Stephen Kitt almost 5 years@Toby you can use
dpkg-scanpackages
to generate the package catalogs, but it won’t handleRelease
for you. The simple option nowadays is probablyaptly
; I should re-write this answer using that. -
Toby almost 5 yearsAwesome! Thanks. I should have said earlier, I was looking for a cross platform tool which
apt-ftparchive
seems like it's not. Soaptly
sounds good for me and I'll read up on creating the packages. I'm assuming the signing is separate anyway. -
ironman almost 4 yearsI have done exactly this, with
focal
instead ofunstable
everywhere, andamd64
only, and my custom deb file is indists/focal/main/binary-amd64
, but when I run step 4, mayPackages
file indists/focal/main/binary-amd64
is empty, zero size. And if I try to install the binary on another computer, it does not find the package...