From: Daan De Meyer Date: Sun, 14 Apr 2024 20:27:13 +0000 (+0200) Subject: Switch to reprepro for generating local apt repositories X-Git-Tag: v23.1~114 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a845d4108ac87ca443bd1ad78ab53520bffd2eda;p=thirdparty%2Fmkosi.git Switch to reprepro for generating local apt repositories We don't install dpkg-dev in tools trees anymore to avoid pulling in perl, which means we don't have access to dpkg-scanpackages in tools trees anymore. Instead of adding back dpkg-dev, let's instead switch to reprepro for generating our local apt repository. It's written in C, packaged everywhere and has hardly any dependencies. --- diff --git a/mkosi/installer/apt.py b/mkosi/installer/apt.py index bbea63515..1391a8bfc 100644 --- a/mkosi/installer/apt.py +++ b/mkosi/installer/apt.py @@ -215,16 +215,29 @@ class Apt(PackageManager): @classmethod def createrepo(cls, context: Context) -> None: - with (context.packages / "Packages").open("wb") as f: - run( - ["dpkg-scanpackages", "."], - stdout=f, - sandbox=context.sandbox( - mounts=[Mount(context.packages, context.packages, ro=True)], - options=["--chdir", context.packages], - ), + if not (conf := context.packages / "conf/distributions").exists(): + conf.parent.mkdir(exist_ok=True) + conf.write_text( + textwrap.dedent( + f"""\ + Origin: mkosi + Label: mkosi + Architectures: {context.config.distribution.architecture(context.config.architecture)} + Codename: mkosi + Components: main + Description: mkosi local repository + """ + ) ) + run( + ["reprepro", "includedeb", "mkosi"] + [d.name for d in context.packages.glob("*.deb")], + sandbox=context.sandbox( + mounts=[Mount(context.packages, context.packages)], + options=["--chdir", context.packages], + ), + ) + (context.pkgmngr / "etc/apt/sources.list.d").mkdir(parents=True, exist_ok=True) (context.pkgmngr / "etc/apt/sources.list.d/mkosi-local.sources").write_text( textwrap.dedent( @@ -232,7 +245,8 @@ class Apt(PackageManager): Enabled: yes Types: deb URIs: file:///work/packages - Suites: ./ + Suites: mkosi + Components: main Trusted: yes """ ) diff --git a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-arch.conf b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-arch.conf index 29310457a..67c67ac83 100644 --- a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-arch.conf +++ b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-arch.conf @@ -23,6 +23,7 @@ Packages= pesign python-cryptography qemu-base + reprepro sbsigntools shadow squashfs-tools diff --git a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-debian-ubuntu.conf b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-debian-ubuntu.conf index 79d5c3ba4..0ca27c209 100644 --- a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-debian-ubuntu.conf +++ b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-debian-ubuntu.conf @@ -30,6 +30,7 @@ Packages= python3-cryptography python3-pefile qemu-system + reprepro sbsigntool squashfs-tools swtpm-tools diff --git a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-fedora/mkosi.conf b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-fedora/mkosi.conf index a9097722a..fa2b1165e 100644 --- a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-fedora/mkosi.conf +++ b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-fedora/mkosi.conf @@ -14,5 +14,6 @@ Packages= qemu-system-aarch64-core qemu-system-ppc-core qemu-system-s390x-core + reprepro systemd-ukify zypper diff --git a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-opensuse.conf b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-opensuse.conf index a7a911bac..ba28f448d 100644 --- a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-opensuse.conf +++ b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-opensuse.conf @@ -22,6 +22,7 @@ Packages= policycoreutils python3-pefile qemu-headless + reprepro sbsigntools shadow squashfs