From cdd2d1570e256ef0aa122c079e55f093cc0df453 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Thomas=20M=C3=BChlbacher?= Date: Sun, 10 Aug 2025 00:50:42 +0200 Subject: [PATCH] Use apt-ftparchive instead of reprepro Afaict, this should work quite similar to the previous dpkg-scanpackages but also doesn't use perl and is part of apt. Certain distros don't have reprepro packaged, e.g. nixpkgs. It's also a simpler to work with and smaller compared to reprepro. --- mkosi/installer/apt.py | 46 +++++-------------- mkosi/resources/man/mkosi.1.md | 4 -- .../debian-kali-ubuntu/mkosi.conf | 2 +- .../package-manager/mkosi.conf.d/arch.conf | 1 - .../package-manager/mkosi.conf.d/fedora.conf | 2 +- .../mkosi.conf.d/opensuse.conf | 1 - 6 files changed, 14 insertions(+), 42 deletions(-) diff --git a/mkosi/installer/apt.py b/mkosi/installer/apt.py index cefa13cc0..6b6842ebc 100644 --- a/mkosi/installer/apt.py +++ b/mkosi/installer/apt.py @@ -280,38 +280,17 @@ class Apt(PackageManager): if not names: return - if not (conf := context.repository / "conf/distributions").exists(): - conf.parent.mkdir(exist_ok=True) - distconfig = textwrap.dedent( - f"""\ - Origin: mkosi - Label: mkosi - Architectures: {context.config.distribution.architecture(context.config.architecture)} - Codename: mkosi - Components: main - Description: mkosi local repository - """ - ) - for distconfinclude in ("usr/lib/reprepro/", "etc/reprepro/"): - if (context.sandbox_tree / distconfinclude).exists(): - distconfig += f"!include: /{distconfinclude}\n" - conf.write_text(distconfig) - - run( - [ - "reprepro", - "--ignore=extension", - "includedeb", - "mkosi", - *names, - ], - sandbox=context.sandbox( - options=[ - "--bind", context.repository, workdir(context.repository), - "--chdir", workdir(context.repository), - ], - ), - ) # fmt: skip + with (context.repository / "Packages").open("wb") as f: + run( + ["apt-ftparchive", "packages", "."], + stdout=f, + sandbox=context.sandbox( + options=[ + "--ro-bind", context.repository, workdir(context.repository), + "--chdir", workdir(context.repository), + ], + ), + ) # fmt: skip (context.sandbox_tree / "etc/apt/sources.list.d").mkdir(parents=True, exist_ok=True) (context.sandbox_tree / "etc/apt/sources.list.d/mkosi-local.sources").write_text( @@ -320,8 +299,7 @@ class Apt(PackageManager): Enabled: yes Types: deb URIs: file:///repository - Suites: mkosi - Components: main + Suites: ./ Trusted: yes """ ) diff --git a/mkosi/resources/man/mkosi.1.md b/mkosi/resources/man/mkosi.1.md index 7e057ff6d..f1772b179 100644 --- a/mkosi/resources/man/mkosi.1.md +++ b/mkosi/resources/man/mkosi.1.md @@ -772,10 +772,6 @@ boolean argument: either `1`, `yes`, or `true` to enable, or `0`, `no`, running scripts. If the `mkosi.packages/` directory is found in the local directory it is also used for this purpose. - On deb-based distributions the local repository will be created with **reprepro** and additional - configuration for reprepro will be included from `/usr/lib/reprepro` and `/etc/reprepro` in the sandbox - trees, see **reprepro(1)** for details on reprepro configuration includes. - `VolatilePackageDirectories=`, `--volatile-package-directory=` : Like `PackageDirectories=`, but any changes to the packages in these directories will not invalidate the cached images if `Incremental=` diff --git a/mkosi/resources/mkosi-tools/mkosi.conf.d/debian-kali-ubuntu/mkosi.conf b/mkosi/resources/mkosi-tools/mkosi.conf.d/debian-kali-ubuntu/mkosi.conf index bccef070f..b21ec26b1 100644 --- a/mkosi/resources/mkosi-tools/mkosi.conf.d/debian-kali-ubuntu/mkosi.conf +++ b/mkosi/resources/mkosi-tools/mkosi.conf.d/debian-kali-ubuntu/mkosi.conf @@ -9,6 +9,7 @@ Distribution=|ubuntu Packages= ?exact-name(grub-pc-bin) apt + apt-utils btrfs-progs erofs-utils grub-common @@ -17,6 +18,5 @@ Packages= libtss2-dev policycoreutils python3-pefile - reprepro squashfs-tools xz-utils diff --git a/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/arch.conf b/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/arch.conf index c69ece0ad..024ea71e1 100644 --- a/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/arch.conf +++ b/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/arch.conf @@ -10,6 +10,5 @@ Packages= createrepo_c distribution-gpg-keys dnf5 - reprepro ubuntu-keyring zypper diff --git a/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/fedora.conf b/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/fedora.conf index 7e6e10db4..f7af1af70 100644 --- a/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/fedora.conf +++ b/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/fedora.conf @@ -6,9 +6,9 @@ Distribution=fedora [Content] Packages= apt + apt-utils archlinux-keyring debian-keyring pacman - reprepro ubu-keyring zypper diff --git a/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/opensuse.conf b/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/opensuse.conf index 3f876c9ff..47df9a5d1 100644 --- a/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/opensuse.conf +++ b/mkosi/resources/mkosi-tools/mkosi.profiles/package-manager/mkosi.conf.d/opensuse.conf @@ -7,4 +7,3 @@ Distribution=opensuse Packages= dnf5 dnf5-plugins - reprepro -- 2.47.2