Sysop: | Amessyroom |
---|---|
Location: | Fayetteville, NC |
Users: | 43 |
Nodes: | 6 (0 / 6) |
Uptime: | 95:34:05 |
Calls: | 290 |
Files: | 904 |
Messages: | 76,423 |
Hello.
I try to setup a repository with a similar structure as Debian's
original, just smaller. In the Debian repository, e.g. bookworm main[1]
there are a lot Contents-*.gz files. My repository is created with
reprepro following the wiki[2]. But I cannot find information about the missing Contents-* files. What is the intended workflow to create them?
The files of my packages are not included in the database of apt-file,
the mandatory ``apt-file update'' does not help to find files or show
files in my packages.
I guess the problems are related.
What can I do to solve those issues?
[1] https://ftp.debian.org/debian/dists/bookworm/main/
[2] https://wiki.debian.org/DebianRepository/SetupWithReprepro
On Wed, 18 Dec 2024, Frank Guthausen wrote:
The files of my packages are not included in the database of
apt-file, the mandatory ``apt-file update'' does not help to find
files or show files in my packages.
I guess the problems are related.
I'm pretty sure the contents files aren't necessary for a working repo
[...]
I'm not sure which point is going wrong [...]
The repository itself works fine. But I cannot use apt-file to show or
find content of packages. And all the Contents-*.gz files are missing.
On Wed, 18 Dec 2024 18:51:58 +0000 (GMT)
Tim Woodall <debianuser@woodall.me.uk> wrote:
On Wed, 18 Dec 2024, Frank Guthausen wrote:
The files of my packages are not included in the database of
apt-file, the mandatory ``apt-file update'' does not help to find
files or show files in my packages.
I guess the problems are related.
I'm pretty sure the contents files aren't necessary for a working repo
[...]
I'm not sure which point is going wrong [...]
The repository itself works fine. But I cannot use apt-file to show or
find content of packages. And all the Contents-*.gz files are missing.
I don't know any tool to generate them, and I don't know the workflow.
On Wed, 18 Dec 2024, Frank Guthausen wrote:
I don't know any tool to generate them, and I don't know the
workflow.
apt-ftparchive
generates them. It's not the easiest thing to use though.
And I see you asked on debian-devel and someone there suggested what
the config setting is for reprepo I think.
On 2024-12-18, Frank Guthausen <fg.debian@shimps.de> wrote:
I try to setup a repository with a similar structure as Debian's
original, just smaller. In the Debian repository, e.g. bookworm main[1] there are a lot Contents-*.gz files. My repository is created with
reprepro following the wiki[2]. But I cannot find information about the missing Contents-* files. What is the intended workflow to create them?
The files of my packages are not included in the database of apt-file,
the mandatory ``apt-file update'' does not help to find files or show
files in my packages.
I guess the problems are related.
What can I do to solve those issues?
[1] https://ftp.debian.org/debian/dists/bookworm/main/
[2] https://wiki.debian.org/DebianRepository/SetupWithReprepro
Creating and managing a repository with a structure similar to Debian's requires generating the Contents-*.gz files, which map the files provided by packages to their respective packages. These files are crucial for tools
like apt-file to function correctly. If you are using reprepro to manage
your repository, these files are not generated by default. Here's how you
can address this:
The Contents-*.gz files list all the files included in the packages of a particular section and architecture in the repository. These files allow tools like apt-file to index and search for files provided by packages.
reprepro is a lightweight tool and does not have built-in support for creating Contents-*.gz files. This is why you don't see these files in your repository and why apt-file update doesn't work as expected.
You can generate the Contents-*.gz files manually or use a script to
automate the process. Here’s a general workflow:
Use a script to extract the contents of the data.tar.* (or data.cpio.*) archives from the .deb files in your repository. For example:
for deb in pool/main/*/*.deb; do dpkg-deb -c "$deb" | awk '{print $6}' | sed "s|^|$(basename "$deb" .deb) |" done This will produce lines in the format package file, which map files to their packages.
Organize the output by architecture (e.g., amd64, arm64) and section (e.g., main, contrib).
For each architecture and section, write the organized output into a text file named Contents-<architecture>.gz. For example:
gzip -c > dists/bookworm/main/Contents-amd64.gz Step 4: Automate the Process You can create a shell or Python script to iterate through all architectures and sections in your repository, generating the required files.
After generating the Contents-*.gz files, ensure they are included in the Release file of your repository so that apt-file can detect them:
Update the Release file with the appropriate checksums for the Contents-*.gz files:
reprepro export Run apt update and then apt-file update on the client
system to test the functionality.
Here is a basic example script:
#!/bin/bash REPO_PATH="/path/to/your/repo" DIST="bookworm" SECTIONS=("main" "contrib" "non-free") ARCHITECTURES=("amd64" "arm64")
for SECTION in "${SECTIONS[@]}"; do for ARCH in "${ARCHITECTURES[@]}"; do CONTENTS_FILE="$REPO_PATH/dists/$DIST/$SECTION/Contents-$ARCH"