Bug#1120799: Using python-apt's apt_pkg with a chroot

Sebastiaan Couwenberg <[email protected]> Tue, 2 Dec 2025 18:36:00 +0100
Newsgroups gmane.linux.debian.devel.bugs.general,gmane.linux.debian.apt.devel
Message-ID <[email protected]>
Using python-apt's apt_pkg with a chroot turns out to be non-trivial unlike apt.cache.

I'm running a script [0] on a trixie system and need to interact with the cache in a testing chroot.

The chroot is created with mmdebstrap --mode=unshare, and the script is run via unshare as well.

Setting RootDir in the config does not result in the chroot paths to be used:

  $ unshare --map-auto --map-user=65536 --map-group=65536 --keep-caps -- ./bin/resolve-dependencies.py -vdp opencv -u 2>&1 | tee /tmp/resolve-dependencies.log
  Resolving dependencies for: opencv
  Chroot already exists: /var/tmp/testing-chroot
  config:
  RootDir "/var/tmp/testing-chroot";

  list:
  [<apt_pkg.MetaIndex object: type='deb', uri:'http://ftp.nl.debian.org/debian/' dist='trixie' is_trusted='1'>,
   <apt_pkg.MetaIndex object: type='deb', uri:'http://ftp.nl.debian.org/debian/' dist='trixie-updates' is_trusted='1'>,
   <apt_pkg.MetaIndex object: type='deb', uri:'http://security.debian.org/debian-security/' dist='trixie-security' is_trusted='1'>,
   <apt_pkg.MetaIndex object: type='deb', uri:'http://ftp.nl.debian.org/debian/' dist='trixie-backports' is_trusted='1'>,
   <apt_pkg.MetaIndex object: type='deb', uri:'http://debug.mirrors.debian.org/debian-debug/' dist='trixie-debug' is_trusted='1'>]
  Reading package lists... Done
  Building dependency tree... Done
  Reading state information... Done
  Traceback (most recent call last):
    File "/home/bas/git/release-team/release.debian.org/bin/resolve-dependencies.py", line 216, in <module>
      sys.exit(main())
               ~~~~^^
    File "/home/bas/git/release-team/release.debian.org/bin/resolve-dependencies.py", line 212, in main
      return resolve_dependencies()
    File "/home/bas/git/release-team/release.debian.org/bin/resolve-dependencies.py", line 97, in resolve_dependencies
      cache.update(apt.progress.text, source_list)
      ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  apt_pkg.Error: E:Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied), E:Unable to lock directory /var/lib/apt/lists/

How can apt_pkg be used with a chroot?

apt.Cache(rootdir) works, but it does not provide access to source packages like apt_pkg.SourceRecords.

[0] https://salsa.debian.org/sebastic/release.debian.org/-/blob/ce71f7e543283c7fcca0a701fe22667ae7a188a2/bin/resolve-dependencies.py

Kind Regards,

Bas

Please CC me as I'm not subscribed to the list.