From: Daan De Meyer Date: Mon, 1 Sep 2025 15:29:54 +0000 (+0200) Subject: mkosi: Rework how the pkgenv environment variables are set X-Git-Tag: v259-rc2~22^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fb514c2f8f195c869b2f0e9ea5ae4ecdd639ebbd;p=thirdparty%2Fsystemd.git mkosi: Rework how the pkgenv environment variables are set Instead of including distribution specific files in the subimages, let's have one common mkosi.pkgenv/ directory that handles all the matching which is then included in the subimages. This gives us more control on exactly how we do the matching. --- diff --git a/.packit.yml b/.packit.yml index d9c7bc41c47..c2a719a212c 100644 --- a/.packit.yml +++ b/.packit.yml @@ -19,7 +19,7 @@ actions: post-upstream-clone: # Use the Fedora Rawhide specfile - git clone https://src.fedoraproject.org/rpms/systemd .packit_rpm - - bash -c 'git -C .packit_rpm checkout "$(grep GIT_COMMIT= mkosi/mkosi.conf.d/centos-fedora/mkosi.conf.d/pkgenv.conf | cut -d= -f2)"' + - bash -c 'git -C .packit_rpm checkout "$(grep GIT_COMMIT= mkosi/mkosi.pkgenv/mkosi.conf.d/centos-fedora.conf | cut -d= -f2)"' - bash -c 'echo "%bcond upstream 1" > .packit_rpm/systemd.spec.new' - bash -c 'echo "%define meson_extra_configure_options --werror" >> .packit_rpm/systemd.spec.new' - bash -c 'cat .packit_rpm/systemd.spec >> .packit_rpm/systemd.spec.new' diff --git a/mkosi/mkosi.conf b/mkosi/mkosi.conf index 2cdb79f9cab..8c1a08abab8 100644 --- a/mkosi/mkosi.conf +++ b/mkosi/mkosi.conf @@ -156,3 +156,4 @@ KVM=yes [Include] Include=%D/mkosi/mkosi.sanitizers %D/mkosi/mkosi.coverage + %D/mkosi/mkosi.pkgenv diff --git a/mkosi/mkosi.images/build/mkosi.conf b/mkosi/mkosi.images/build/mkosi.conf index b710f801ee8..2870a4e32cd 100644 --- a/mkosi/mkosi.images/build/mkosi.conf +++ b/mkosi/mkosi.images/build/mkosi.conf @@ -1,5 +1,8 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +[Include] +Include=%D/mkosi/mkosi.pkgenv + [Content] Packages= clang diff --git a/mkosi/mkosi.images/build/mkosi.conf.d/arch/mkosi.conf b/mkosi/mkosi.images/build/mkosi.conf.d/arch/mkosi.conf index 9809fbc2522..d7a79d11c10 100644 --- a/mkosi/mkosi.images/build/mkosi.conf.d/arch/mkosi.conf +++ b/mkosi/mkosi.images/build/mkosi.conf.d/arch/mkosi.conf @@ -3,9 +3,6 @@ [Match] Distribution=arch -[Include] -Include=%D/mkosi/mkosi.conf.d/arch/mkosi.conf.d/pkgenv.conf - [Content] Packages= base diff --git a/mkosi/mkosi.images/build/mkosi.conf.d/centos-fedora/mkosi.conf b/mkosi/mkosi.images/build/mkosi.conf.d/centos-fedora/mkosi.conf index 438c0ab4ef8..4d0ca8917d8 100644 --- a/mkosi/mkosi.images/build/mkosi.conf.d/centos-fedora/mkosi.conf +++ b/mkosi/mkosi.images/build/mkosi.conf.d/centos-fedora/mkosi.conf @@ -4,9 +4,6 @@ Distribution=|centos Distribution=|fedora -[Include] -Include=%D/mkosi/mkosi.conf.d/centos-fedora/mkosi.conf.d/pkgenv.conf - [Content] Packages= clang-devel diff --git a/mkosi/mkosi.images/build/mkosi.conf.d/debian-ubuntu/mkosi.conf b/mkosi/mkosi.images/build/mkosi.conf.d/debian-ubuntu/mkosi.conf index 240f357b989..55d7b1d9045 100644 --- a/mkosi/mkosi.images/build/mkosi.conf.d/debian-ubuntu/mkosi.conf +++ b/mkosi/mkosi.images/build/mkosi.conf.d/debian-ubuntu/mkosi.conf @@ -4,9 +4,6 @@ Distribution=|debian Distribution=|ubuntu -[Include] -Include=%D/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.conf.d/pkgenv.conf - [Content] Packages= apt diff --git a/mkosi/mkosi.images/build/mkosi.conf.d/opensuse/mkosi.conf b/mkosi/mkosi.images/build/mkosi.conf.d/opensuse/mkosi.conf index 68ae1b33f06..70a1b31b641 100644 --- a/mkosi/mkosi.images/build/mkosi.conf.d/opensuse/mkosi.conf +++ b/mkosi/mkosi.images/build/mkosi.conf.d/opensuse/mkosi.conf @@ -3,9 +3,6 @@ [Match] Distribution=opensuse -[Include] -Include=%D/mkosi/mkosi.conf.d/opensuse/mkosi.conf.d/pkgenv.conf - [Content] Packages= clang diff --git a/mkosi/mkosi.conf.d/arch/mkosi.conf.d/pkgenv.conf b/mkosi/mkosi.pkgenv/mkosi.conf.d/arch.conf similarity index 90% rename from mkosi/mkosi.conf.d/arch/mkosi.conf.d/pkgenv.conf rename to mkosi/mkosi.pkgenv/mkosi.conf.d/arch.conf index 07e4f48d3b0..ba8508925e3 100644 --- a/mkosi/mkosi.conf.d/arch/mkosi.conf.d/pkgenv.conf +++ b/mkosi/mkosi.pkgenv/mkosi.conf.d/arch.conf @@ -1,5 +1,8 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Distribution=arch + [Build] Environment= GIT_URL=https://gitlab.archlinux.org/archlinux/packaging/packages/systemd.git diff --git a/mkosi/mkosi.conf.d/centos-fedora/mkosi.conf.d/pkgenv.conf b/mkosi/mkosi.pkgenv/mkosi.conf.d/centos-fedora.conf similarity index 82% rename from mkosi/mkosi.conf.d/centos-fedora/mkosi.conf.d/pkgenv.conf rename to mkosi/mkosi.pkgenv/mkosi.conf.d/centos-fedora.conf index 75d3d4daa2e..58d27fb34ed 100644 --- a/mkosi/mkosi.conf.d/centos-fedora/mkosi.conf.d/pkgenv.conf +++ b/mkosi/mkosi.pkgenv/mkosi.conf.d/centos-fedora.conf @@ -1,5 +1,9 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Distribution=|fedora +Distribution=|centos + [Build] Environment= GIT_URL=https://src.fedoraproject.org/rpms/systemd.git diff --git a/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.conf.d/pkgenv.conf b/mkosi/mkosi.pkgenv/mkosi.conf.d/debian-ubuntu.conf similarity index 84% rename from mkosi/mkosi.conf.d/debian-ubuntu/mkosi.conf.d/pkgenv.conf rename to mkosi/mkosi.pkgenv/mkosi.conf.d/debian-ubuntu.conf index 532d1b8f91a..38607c9818b 100644 --- a/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.conf.d/pkgenv.conf +++ b/mkosi/mkosi.pkgenv/mkosi.conf.d/debian-ubuntu.conf @@ -1,5 +1,9 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Distribution=|debian +Distribution=|ubuntu + [Build] Environment= GIT_URL=https://salsa.debian.org/systemd-team/systemd.git diff --git a/mkosi/mkosi.conf.d/opensuse/mkosi.conf.d/pkgenv.conf b/mkosi/mkosi.pkgenv/mkosi.conf.d/opensuse.conf similarity index 89% rename from mkosi/mkosi.conf.d/opensuse/mkosi.conf.d/pkgenv.conf rename to mkosi/mkosi.pkgenv/mkosi.conf.d/opensuse.conf index dedcb4b2b79..6a2c8868f05 100644 --- a/mkosi/mkosi.conf.d/opensuse/mkosi.conf.d/pkgenv.conf +++ b/mkosi/mkosi.pkgenv/mkosi.conf.d/opensuse.conf @@ -1,5 +1,8 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +[Match] +Distribution=opensuse + [Build] Environment= GIT_URL=https://github.com/bmwiedemann/openSUSE diff --git a/mkosi/mkosi.tools.conf/mkosi.conf b/mkosi/mkosi.tools.conf/mkosi.conf index 4befc518b17..1ec5a3ef077 100644 --- a/mkosi/mkosi.tools.conf/mkosi.conf +++ b/mkosi/mkosi.tools.conf/mkosi.conf @@ -1,5 +1,8 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +[Include] +Include=%D/mkosi/mkosi.pkgenv + [Content] SyncScripts=%D/mkosi/mkosi.sync Packages= diff --git a/mkosi/mkosi.tools.conf/mkosi.conf.d/arch.conf b/mkosi/mkosi.tools.conf/mkosi.conf.d/arch.conf index 382391ca706..2348d302868 100644 --- a/mkosi/mkosi.tools.conf/mkosi.conf.d/arch.conf +++ b/mkosi/mkosi.tools.conf/mkosi.conf.d/arch.conf @@ -3,9 +3,6 @@ [Match] Distribution=arch -[Include] -Include=%D/mkosi/mkosi.conf.d/arch/mkosi.conf.d/pkgenv.conf - [Content] PrepareScripts=%D/mkosi/mkosi.images/build/mkosi.conf.d/arch/mkosi.prepare Packages= diff --git a/mkosi/mkosi.tools.conf/mkosi.conf.d/centos-fedora.conf b/mkosi/mkosi.tools.conf/mkosi.conf.d/centos-fedora.conf index f75f83723f2..7c616811172 100644 --- a/mkosi/mkosi.tools.conf/mkosi.conf.d/centos-fedora.conf +++ b/mkosi/mkosi.tools.conf/mkosi.conf.d/centos-fedora.conf @@ -4,9 +4,6 @@ Distribution=|fedora Distribution=|centos -[Include] -Include=%D/mkosi/mkosi.conf.d/centos-fedora/mkosi.conf.d/pkgenv.conf - [Content] PrepareScripts=%D/mkosi/mkosi.images/build/mkosi.conf.d/centos-fedora/mkosi.prepare Packages= diff --git a/mkosi/mkosi.tools.conf/mkosi.conf.d/debian-ubuntu.conf b/mkosi/mkosi.tools.conf/mkosi.conf.d/debian-ubuntu.conf index c62ed1c4ddb..9fdf89bfb59 100644 --- a/mkosi/mkosi.tools.conf/mkosi.conf.d/debian-ubuntu.conf +++ b/mkosi/mkosi.tools.conf/mkosi.conf.d/debian-ubuntu.conf @@ -4,9 +4,6 @@ Distribution=|debian Distribution=|ubuntu -[Include] -Include=%D/mkosi/mkosi.conf.d/debian-ubuntu/mkosi.conf.d/pkgenv.conf - [Content] PrepareScripts=%D/mkosi/mkosi.images/build/mkosi.conf.d/debian-ubuntu/mkosi.prepare Packages= diff --git a/mkosi/mkosi.tools.conf/mkosi.conf.d/opensuse.conf b/mkosi/mkosi.tools.conf/mkosi.conf.d/opensuse.conf index 844a3254b58..b6980946187 100644 --- a/mkosi/mkosi.tools.conf/mkosi.conf.d/opensuse.conf +++ b/mkosi/mkosi.tools.conf/mkosi.conf.d/opensuse.conf @@ -3,9 +3,6 @@ [Match] Distribution=opensuse -[Include] -Include=%D/mkosi/mkosi.conf.d/opensuse/mkosi.conf.d/pkgenv.conf - [Content] PrepareScripts=%D/mkosi/mkosi.images/build/mkosi.conf.d/opensuse/mkosi.prepare Packages= diff --git a/tools/fetch-distro.py b/tools/fetch-distro.py index fa60e60db7d..2dad51be24c 100755 --- a/tools/fetch-distro.py +++ b/tools/fetch-distro.py @@ -31,10 +31,13 @@ def parse_args(): action='store_true', default=False, ) + p.add_argument('--profile') return p.parse_args() def read_config(distro: str): cmd = ['mkosi', '--json', '-d', distro, 'summary'] + if args.profile: + cmd += ['--profile', args.profile] print(f"+ {shlex.join(cmd)}") text = subprocess.check_output(cmd, text=True) @@ -53,14 +56,15 @@ def commit_file(distro: str, files: list[Path], commit: str, changes: str): subprocess.check_call(cmd) def checkout_distro(args, distro: str, config: dict): - dest = Path(f'pkg/{distro}') - if dest.exists(): - print(f'{dest} already exists.') - return - url = config['Environment']['GIT_URL'] branch = config['Environment']['GIT_BRANCH'] subdir = config['Environment'].get('GIT_SUBDIR') + pkg_subdir = config['Environment']['PKG_SUBDIR'] + + dest = Path(f'pkg/{pkg_subdir}') + if dest.exists(): + print(f'{dest} already exists.') + return # Do not checkout the full sources if the package is in a subdirectory, # a sparse checkout will be done after @@ -81,12 +85,12 @@ def checkout_distro(args, distro: str, config: dict): # Sparse checkout if the package is in a subdirectory if subdir is not None: - cmd = ['git', '-C', f'pkg/{distro}', 'sparse-checkout', 'set', + cmd = ['git', '-C', f'pkg/{pkg_subdir}', 'sparse-checkout', 'set', '--no-cone', f'{subdir}'] print(f"+ {shlex.join(cmd)}") subprocess.check_call(cmd) - cmd = ['git', '-C', f'pkg/{distro}', 'checkout', 'HEAD'] + cmd = ['git', '-C', f'pkg/{pkg_subdir}', 'checkout', 'HEAD'] print(f"+ {shlex.join(cmd)}") subprocess.check_call(cmd) @@ -96,18 +100,19 @@ def update_distro(args, distro: str, config: dict): branch = config['Environment']['GIT_BRANCH'] subdir = config['Environment'].get('GIT_SUBDIR') old_commit = config['Environment']['GIT_COMMIT'] + pkg_subdir = config['Environment']['PKG_SUBDIR'] if args.fetch: - cmd = ['git', '-C', f'pkg/{distro}', 'fetch', 'origin', '-v', + cmd = ['git', '-C', f'pkg/{pkg_subdir}', 'fetch', 'origin', '-v', f'{branch}:remotes/origin/{branch}'] print(f"+ {shlex.join(cmd)}") subprocess.check_call(cmd) - cmd = ['git', '-C', f'pkg/{distro}', 'switch', branch] + cmd = ['git', '-C', f'pkg/{pkg_subdir}', 'switch', branch] print(f"+ {shlex.join(cmd)}") subprocess.check_call(cmd) - cmd = ['git', '-C', f'pkg/{distro}', 'log', '-n1', '--format=%H', + cmd = ['git', '-C', f'pkg/{pkg_subdir}', 'log', '-n1', '--format=%H', f'refs/remotes/origin/{branch}'] if subdir is not None: cmd += [f'{subdir}'] @@ -115,10 +120,10 @@ def update_distro(args, distro: str, config: dict): new_commit = subprocess.check_output(cmd, text=True).strip() if old_commit == new_commit: - print(f'{distro}: commit {new_commit!s} is still fresh') + print(f'{pkg_subdir}: commit {new_commit!s} is still fresh') return - cmd = ['git', '-C', f'pkg/{distro}', 'log', '--graph', '--first-parent', + cmd = ['git', '-C', f'pkg/{pkg_subdir}', 'log', '--graph', '--first-parent', '--pretty=oneline', '--no-decorate', '--abbrev-commit', '--abbrev=10', f'{old_commit}..{new_commit}'] if subdir is not None: @@ -126,8 +131,8 @@ def update_distro(args, distro: str, config: dict): print(f"+ {shlex.join(cmd)}") changes = subprocess.check_output(cmd, text=True).strip() - conf_dir = Path('mkosi/mkosi.conf.d') - files = conf_dir.glob('**/pkgenv.conf') + conf_dir = Path('mkosi/mkosi.pkgenv/mkosi.conf.d') + files = conf_dir.glob('*.conf') for file in files: s = file.read_text() if old_commit in s: