From: Daan De Meyer Date: Thu, 26 Sep 2024 12:42:44 +0000 (+0200) Subject: Add mkosi-vm default config X-Git-Tag: v25~265 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0af2ae8b7eb042f69f73e32ed5c61d1c857fdafd;p=thirdparty%2Fmkosi.git Add mkosi-vm default config This replaces the bootable.md doc. Instead, users can just do Include=mkosi-vm. --- diff --git a/docs/bootable.md b/docs/bootable.md deleted file mode 100644 index 7636f0540..000000000 --- a/docs/bootable.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Building a bootable image on different distros -category: Tutorials -layout: default -SPDX-License-Identifier: LGPL-2.1-or-later ---- - -# Building a bootable image on different distros - -To build a bootable image, you'll need to install a list of packages -that differs depending on the distribution. We give an overview here of -what's needed to generate a bootable image for some common -distributions: - -## Arch - -```conf -[Distribution] -Distribution=arch - -[Content] -Bootable=yes -Packages=linux - systemd -``` - -## Fedora - -```conf -[Distribution] -Distribution=fedora - -[Content] -Bootable=yes -Packages=kernel - systemd - systemd-boot - udev - util-linux -``` - -## CentOS - -```conf -[Distribution] -Distribution=centos - -[Content] -Bootable=yes -Packages=kernel - systemd - systemd-boot - udev -``` - -## Debian - -```conf -[Distribution] -Distribution=debian - -[Content] -Bootable=yes -Packages=linux-image-generic - login - systemd - systemd-boot - systemd-sysv - udev - dbus -``` - -## Kali - -```conf -[Distribution] -Distribution=kali - -[Content] -Bootable=yes -Packages=linux-image-generic - login - systemd - systemd-boot - systemd-sysv - udev - dbus -``` - -## Ubuntu - -```conf -[Distribution] -Distribution=ubuntu -Repositories=main,universe - -[Content] -Bootable=yes -Packages=linux-image-generic - login - systemd - systemd-sysv - udev - dbus -``` - -## Opensuse - -```conf -[Distribution] -Distribution=opensuse - -[Content] -Bootable=yes -Packages=kernel-default - systemd - udev -``` diff --git a/mkosi.conf b/mkosi.conf index a65bfaec1..4f0b4f3d7 100644 --- a/mkosi.conf +++ b/mkosi.conf @@ -1,4 +1,7 @@ # SPDX-License-Identifier: LGPL-2.1-or-later +[Include] +Include=mkosi-vm + [Build] CacheDirectory=mkosi.cache History=yes @@ -17,16 +20,10 @@ BuildSources=. BuildSourcesEphemeral=yes Packages= - bash binutils gdb - less - nano - strace sudo - systemd tmux - udev zsh InitrdPackages= diff --git a/mkosi.conf.d/20-arch.conf b/mkosi.conf.d/20-arch.conf index beb2820f6..247ffd925 100644 --- a/mkosi.conf.d/20-arch.conf +++ b/mkosi.conf.d/20-arch.conf @@ -5,19 +5,9 @@ Distribution=arch [Content] Packages= - base - bash - dbus-broker - dbus-broker-units - fish grub - iproute - iputils - linux openssh perf - polkit python qemu-user-static shim - strace diff --git a/mkosi.conf.d/20-azure.conf b/mkosi.conf.d/20-azure.conf index 6283a7d69..1229a0c7b 100644 --- a/mkosi.conf.d/20-azure.conf +++ b/mkosi.conf.d/20-azure.conf @@ -12,7 +12,4 @@ Repositories=base-preview # test unsigned shim. ShimBootloader=none Packages= - kernel kernel-tools - systemd-networkd - tpm2-tss diff --git a/mkosi.conf.d/20-centos/mkosi.conf b/mkosi.conf.d/20-centos/mkosi.conf index 117ef9ba6..13f5409fe 100644 --- a/mkosi.conf.d/20-centos/mkosi.conf +++ b/mkosi.conf.d/20-centos/mkosi.conf @@ -12,6 +12,5 @@ Release=9 # CentOS Stream 10 does not ship an unsigned shim ShimBootloader=none Packages= - kernel-core linux-firmware perf diff --git a/mkosi.conf.d/20-debian/mkosi.conf.d/20-x86-64.conf b/mkosi.conf.d/20-debian/mkosi.conf.d/20-x86-64.conf deleted file mode 100644 index 615de5249..000000000 --- a/mkosi.conf.d/20-debian/mkosi.conf.d/20-x86-64.conf +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later - -[Match] -Architecture=x86-64 - -[Content] -Packages= - linux-image-cloud-amd64 diff --git a/mkosi.conf.d/20-debian/mkosi.conf.d/20-x86.conf b/mkosi.conf.d/20-debian/mkosi.conf.d/20-x86.conf deleted file mode 100644 index fe0c4dcb3..000000000 --- a/mkosi.conf.d/20-debian/mkosi.conf.d/20-x86.conf +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later - -[Match] -Architecture=x86 - -[Content] -Packages= - linux-image-686 diff --git a/mkosi.conf.d/20-fedora/mkosi.conf b/mkosi.conf.d/20-fedora/mkosi.conf index 28a8009c9..bf6ae2603 100644 --- a/mkosi.conf.d/20-fedora/mkosi.conf +++ b/mkosi.conf.d/20-fedora/mkosi.conf @@ -9,8 +9,6 @@ Release=rawhide [Content] Packages= fish - kernel-core perf qemu-user-static rpmautospec - systemd-networkd diff --git a/mkosi.conf.d/20-kali/mkosi.conf.d/20-x86-64.conf b/mkosi.conf.d/20-kali/mkosi.conf.d/20-x86-64.conf deleted file mode 100644 index 615de5249..000000000 --- a/mkosi.conf.d/20-kali/mkosi.conf.d/20-x86-64.conf +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later - -[Match] -Architecture=x86-64 - -[Content] -Packages= - linux-image-cloud-amd64 diff --git a/mkosi.conf.d/20-kali/mkosi.conf.d/20-x86.conf b/mkosi.conf.d/20-kali/mkosi.conf.d/20-x86.conf deleted file mode 100644 index fe0c4dcb3..000000000 --- a/mkosi.conf.d/20-kali/mkosi.conf.d/20-x86.conf +++ /dev/null @@ -1,8 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1-or-later - -[Match] -Architecture=x86 - -[Content] -Packages= - linux-image-686 diff --git a/mkosi.conf.d/20-opensuse/mkosi.conf b/mkosi.conf.d/20-opensuse/mkosi.conf index 39a0b435d..2f03b111a 100644 --- a/mkosi.conf.d/20-opensuse/mkosi.conf +++ b/mkosi.conf.d/20-opensuse/mkosi.conf @@ -10,24 +10,12 @@ Release=tumbleweed # OpenSUSE does not ship an unsigned shim ShimBootloader=none Packages= - bash diffutils fish - iproute - iputils - kernel-kvmsmall - libtss2-esys0 - libtss2-mu0 - libtss2-rc0 - libtss2-tcti-device0 openssh-clients openssh-server - patterns-base-minimal_base perf - polkit python3 qemu-linux-user shim - strace sudo-policy-wheel-auth-self - systemd-boot diff --git a/mkosi.conf.d/20-ubuntu/mkosi.conf b/mkosi.conf.d/20-ubuntu/mkosi.conf index 43edd67c7..e1b4b5dff 100644 --- a/mkosi.conf.d/20-ubuntu/mkosi.conf +++ b/mkosi.conf.d/20-ubuntu/mkosi.conf @@ -9,5 +9,4 @@ Repositories=universe [Content] Packages= - linux-image-virtual - linux-tools-virtual + linux-tools-generic diff --git a/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf b/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf index c7fe6e7f1..7558d8b92 100644 --- a/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf +++ b/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf @@ -9,13 +9,7 @@ Distribution=|azure [Content] Packages= - bash - iproute - iputils openssh-clients openssh-server - polkit python3 rpm-build - strace - systemd-resolved diff --git a/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-uefi.conf b/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-uefi.conf index 6ade55055..061284455 100644 --- a/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-uefi.conf +++ b/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-uefi.conf @@ -8,4 +8,3 @@ Architecture=|arm64 Packages= grub2-efi shim - systemd-boot diff --git a/mkosi.conf.d/30-debian-kali-ubuntu/mkosi.conf b/mkosi.conf.d/30-debian-kali-ubuntu/mkosi.conf index 782a0e231..74dadbac5 100644 --- a/mkosi.conf.d/30-debian-kali-ubuntu/mkosi.conf +++ b/mkosi.conf.d/30-debian-kali-ubuntu/mkosi.conf @@ -7,25 +7,9 @@ Distribution=|ubuntu [Content] Packages= - ?exact-name(systemd-boot) - ?exact-name(systemd-resolved) - ^libtss2-esys-[0-9.]+-0$ - ^libtss2-mu[0-9.-]+$ - bash - dbus-broker fish - iproute2 - iputils-ping - libtss2-rc0 - libtss2-tcti-device0 - login openssh-client openssh-server - polkitd python3 qemu-user-static shim-signed - strace - systemd-coredump - systemd-sysv - tzdata diff --git a/mkosi/config.py b/mkosi/config.py index 277aae5f6..b59990d25 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -55,7 +55,7 @@ ConfigMatchCallback = Callable[[str, Any], bool] ConfigDefaultCallback = Callable[[argparse.Namespace], Any] -BUILTIN_CONFIGS = ("mkosi-tools", "mkosi-initrd") +BUILTIN_CONFIGS = ("mkosi-tools", "mkosi-initrd", "mkosi-vm") class Verb(StrEnum): diff --git a/mkosi/resources/man/mkosi.md b/mkosi/resources/man/mkosi.md index ae3332e88..8c8531061 100644 --- a/mkosi/resources/man/mkosi.md +++ b/mkosi/resources/man/mkosi.md @@ -1859,9 +1859,10 @@ config file is read: Note that each path containing extra configuration is only parsed once, even if included more than once with `Include=`. - The builtin configs for the mkosi default initrd and default tools - tree can be included by including the literal value `mkosi-initrd` and - `mkosi-tools` respectively. + The builtin configs for the mkosi default initrd, default tools tree + and default virtual machine image can be included by including the + literal value `mkosi-initrd`, `mkosi-tools` or `mkosi-vm` + respectively. Note: Include names starting with either of the literals `mkosi-` or `contrib-` are reserved for use by mkosi itself. diff --git a/mkosi/resources/mkosi-vm/mkosi.conf b/mkosi/resources/mkosi-vm/mkosi.conf new file mode 100644 index 000000000..ce021bdbd --- /dev/null +++ b/mkosi/resources/mkosi-vm/mkosi.conf @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +[Content] +Bootable=yes + +Packages= + bash + diffutils + gawk + grep + gzip + less + nano + sed + strace + systemd + udev + which diff --git a/mkosi/resources/mkosi-vm/mkosi.conf.d/arch.conf b/mkosi/resources/mkosi-vm/mkosi.conf.d/arch.conf new file mode 100644 index 000000000..3387e6576 --- /dev/null +++ b/mkosi/resources/mkosi-vm/mkosi.conf.d/arch.conf @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +[Match] +Distribution=arch + +[Content] +Packages= + dbus-broker + dbus-broker-units + iproute + iputils + linux + polkit + tpm2-tss diff --git a/mkosi/resources/mkosi-vm/mkosi.conf.d/azure-centos-fedora/mkosi.conf b/mkosi/resources/mkosi-vm/mkosi.conf.d/azure-centos-fedora/mkosi.conf new file mode 100644 index 000000000..e3e5d89f7 --- /dev/null +++ b/mkosi/resources/mkosi-vm/mkosi.conf.d/azure-centos-fedora/mkosi.conf @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +[Match] +Distribution=|alma +Distribution=|rocky +Distribution=|centos +Distribution=|fedora +Distribution=|azure + +[Content] +Packages= + iproute + iputils + kernel + polkit + systemd-resolved + tpm2-tss + util-linux diff --git a/mkosi.conf.d/20-debian/mkosi.conf.d/20-arm64.conf b/mkosi/resources/mkosi-vm/mkosi.conf.d/azure-centos-fedora/mkosi.conf.d/networkd.conf similarity index 53% rename from mkosi.conf.d/20-debian/mkosi.conf.d/20-arm64.conf rename to mkosi/resources/mkosi-vm/mkosi.conf.d/azure-centos-fedora/mkosi.conf.d/networkd.conf index af923fa44..e0d6205bd 100644 --- a/mkosi.conf.d/20-debian/mkosi.conf.d/20-arm64.conf +++ b/mkosi/resources/mkosi-vm/mkosi.conf.d/azure-centos-fedora/mkosi.conf.d/networkd.conf @@ -1,8 +1,9 @@ # SPDX-License-Identifier: LGPL-2.1-or-later [Match] -Architecture=arm64 +Distribution=|fedora +Distribution=|azure [Content] Packages= - linux-image-cloud-arm64 + systemd-networkd diff --git a/mkosi.conf.d/20-kali/mkosi.conf.d/20-arm64.conf b/mkosi/resources/mkosi-vm/mkosi.conf.d/azure-centos-fedora/mkosi.conf.d/uefi.conf similarity index 54% rename from mkosi.conf.d/20-kali/mkosi.conf.d/20-arm64.conf rename to mkosi/resources/mkosi-vm/mkosi.conf.d/azure-centos-fedora/mkosi.conf.d/uefi.conf index af923fa44..da92e2ab4 100644 --- a/mkosi.conf.d/20-kali/mkosi.conf.d/20-arm64.conf +++ b/mkosi/resources/mkosi-vm/mkosi.conf.d/azure-centos-fedora/mkosi.conf.d/uefi.conf @@ -1,8 +1,9 @@ # SPDX-License-Identifier: LGPL-2.1-or-later [Match] -Architecture=arm64 +Architecture=|x86-64 +Architecture=|arm64 [Content] Packages= - linux-image-cloud-arm64 + systemd-boot diff --git a/mkosi/resources/mkosi-vm/mkosi.conf.d/debian-kali-ubuntu.conf b/mkosi/resources/mkosi-vm/mkosi.conf.d/debian-kali-ubuntu.conf new file mode 100644 index 000000000..1ce73aa38 --- /dev/null +++ b/mkosi/resources/mkosi-vm/mkosi.conf.d/debian-kali-ubuntu.conf @@ -0,0 +1,23 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +[Match] +Distribution=|debian +Distribution=|kali +Distribution=|ubuntu + +[Content] +Packages= + ?exact-name(systemd-boot) + ?exact-name(systemd-resolved) + bash + dbus-broker + iproute2 + iputils-ping + linux-image-generic + login + polkitd + systemd-boot + systemd-coredump + systemd-sysv + tpm2-tools + tzdata diff --git a/mkosi/resources/mkosi-vm/mkosi.conf.d/opensuse.conf b/mkosi/resources/mkosi-vm/mkosi.conf.d/opensuse.conf new file mode 100644 index 000000000..7cb4dda1d --- /dev/null +++ b/mkosi/resources/mkosi-vm/mkosi.conf.d/opensuse.conf @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +[Match] +Distribution=opensuse + +[Content] +Packages= + iproute + iputils + kernel-default + libtss2-tcti-device0 + patterns-base-minimal_base + polkit + strace + systemd-boot + systemd-network + tpm2.0-tools diff --git a/pyproject.toml b/pyproject.toml index e0ade1770..7426a7a78 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,6 +37,7 @@ packages = [ "man/*", "mkosi-initrd/**/*", "mkosi-tools/**/*", + "mkosi-vm/**/*", "repart/**/*", ] diff --git a/tests/conftest.py b/tests/conftest.py index cc419fa40..19162e796 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -4,8 +4,10 @@ from typing import Any, cast import pytest +import mkosi.resources from mkosi.config import parse_config from mkosi.distributions import Distribution, detect_distribution +from mkosi.util import resource_path from . import ImageConfig, ci_group @@ -49,9 +51,12 @@ def pytest_addoption(parser: Any) -> None: @pytest.fixture(scope="session") def config(request: Any) -> ImageConfig: distribution = cast(Distribution, request.config.getoption("--distribution")) - release = cast( - str, request.config.getoption("--release") or parse_config(["-d", str(distribution)])[1][0].release - ) + with resource_path(mkosi.resources) as resources: + release = cast( + str, + request.config.getoption("--release") + or parse_config(["-d", str(distribution)], resources=resources)[1][0].release, + ) return ImageConfig( distribution=distribution, release=release, diff --git a/tests/test_initrd.py b/tests/test_initrd.py index 9d1854a5a..c5471a81d 100644 --- a/tests/test_initrd.py +++ b/tests/test_initrd.py @@ -223,11 +223,11 @@ def test_initrd_size(config: ImageConfig) -> None: # The fallback value is for CentOS and related distributions. maxsize = 1024**2 * { - Distribution.fedora: 55, - Distribution.debian: 55, - Distribution.ubuntu: 50, + Distribution.fedora: 56, + Distribution.debian: 58, + Distribution.ubuntu: 54, Distribution.arch: 80, - Distribution.opensuse: 55, + Distribution.opensuse: 62, }.get(config.distribution, 55) assert (Path(image.output_dir) / "image.initrd").stat().st_size <= maxsize