Ubuntu Noble mirror question

Good afternoon

A question about the Ubuntu package archive - I am not sure where it fits into the Discourse categories. Please help me correctly categorize it.

I run a mirror of Ubuntu Noble, on my computer which I update each day. It’s built by grabbing the metadata from archive.ubuntu.com (or another mirror), then scanning all of the Package.gz files, from which it generates a list of files to sync. I’ve written about it in detail here: https://danieldewberry.com/blog/ubuntu-package-archive-mirror-subset/.

I sync :

  • noble/main
  • noble/universe
  • noble/restricted
  • noble/multiverse
  • noble-updates/main
  • noble-updates/universe
  • noble-updates/restricted
  • noble-updates/multiverse
  • noble-backports/main
  • noble-backports/universe
  • noble-backports/restricted
  • noble-backports/multiverse

Today I attempted to install a package which was met with failure because the webserver which serves my mirror yielded a 404 (NOT FOUND) when serving ubuntu/pool/universe/libr/libref-util-perl/libref-util-perl_0.204-2_all.deb.

The file is itself a symlink:

ubuntu/pool/universe/libr/libref-util-perl/libref-util-perl_0.204-2_all.deb → …/…/…/main/libr/libref-util-perl /libref-util-perl_0.204-2_all.deb

It is ubuntu/pool/main/libr/libref-util-perl /libref-util-perl_0.204-2_all.deb that is missing from my mirror.

Digging into my archive I can see that ubuntu/pool/main/libr/ doesn’t contain libref-util-perl, due to it not being listed in any of the Package.gz files pertaining to main, but it is in ubuntu/dists/noble/universe/binary-amd64/Packages.gz

  • Question 1: Why is the package considered to be in universe when it is actually is stored in the main pool?
  • Question 2: Shouldn’t all dependencies of Noble, or any other release, exist concretely (i.e. not as a symbolic link) in at least one Package.gz for that release?

I haven’t raised a bug in Launchpad, I want to discuss this first.

Best regards

Daniel

Hi,

I moved your post to Support and Help and added relevant tags.

As to the question; hopefully someone can offer some insights.

Thanks.

1 Like

On Questing:

apt show libref-util-perl
Package: libref-util-perl
Version: 0.204-2
Priority: optional
Section: universe/perl
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 44.0 kB
Depends: perl:any
Recommends: libreadonly-perl, libref-util-xs-perl
Homepage: https://metacpan.org/release/Ref-Util
Download-Size: 15.1 kB
APT-Sources: http://archive.ubuntu.com/ubuntu questing/universe amd64 Packages
Description: set of utility functions for checking references
 Ref::Util introduces several functions to help identify references in a
 faster and smarter way. In short:
 .
  ref $foo eq 'ARRAY'
  # is now:
  is_arrayref($foo)

Universe.

apt policy libref-util-perl
libref-util-perl:
  Installed: (none)
  Candidate: 0.204-2
  Version table:
     0.204-2 500
        500 http://archive.ubuntu.com/ubuntu questing/universe amd64 Packages
        500 http://archive.ubuntu.com/ubuntu questing/universe i386 Packages

I did not read your personal blog link though.

The question of whether all dependencies of a release, such as Noble, should exist concretely (i.e., not as a symbolic link) in at least one Package.gz for that release relates to the principles of package management and software distribution. In the context of Debian-based systems, the Package.gz files are part of the package metadata and contain information about the packages available in a repository. These files are used by package managers like apt to resolve dependencies and install packages.

In the case of symbolic links, they are typically used within the file system to point to actual files or directories, but they are not part of the package metadata stored in Package.gz files.

The Package.gz files contain information about the packages, such as their names, versions, and dependencies, but they do not include symbolic links themselves. Instead, symbolic links are managed at the file system level and are not part of the package metadata.

Therefore, it is not necessary for all dependencies of a release to exist concretely in a Package.gz file. The Package.gz files provide metadata about the packages, and the actual files, including symbolic links, are managed separately by the package manager and the file system. This approach allows for flexibility in managing dependencies and ensures that the package manager can resolve and install the necessary packages correctly.

The confusion about why a package is considered to be in the “universe” repository when it appears to be stored in the “main” pool stems from the way Ubuntu organizes its repositories and how package metadata is structured. The “main” repository contains packages that are officially supported by Canonical, while “universe” contains community-maintained open-source software.
However, the actual storage location of packages in the archive (such as in the “main” or “universe” directories) does not always directly correspond to the repository classification of the package. This is because the repository classification is determined by the package’s metadata, not its physical location in the archive.

That’s my take on the matter. :wink:

1 Like