From: Daan De Meyer Date: Thu, 4 Jul 2024 12:34:17 +0000 (+0200) Subject: Add support for Azure Linux X-Git-Tag: v25~350^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=refs%2Fpull%2F2833%2Fhead;p=thirdparty%2Fmkosi.git Add support for Azure Linux Azure Linux looks a lot like Fedora Linux so we opt to share configuration between Azure and Fedora/CentOS and inherit the Azure definition from Fedora. --- diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 43f2e5c69..673a6be65 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -103,6 +103,7 @@ jobs: - fedora - opensuse - ubuntu + - azure tools: - arch - debian diff --git a/mkosi.conf.d/20-azure.conf b/mkosi.conf.d/20-azure.conf new file mode 100644 index 000000000..6dc333a56 --- /dev/null +++ b/mkosi.conf.d/20-azure.conf @@ -0,0 +1,17 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +[Match] +Distribution=azure + +[Distribution] +Release=3.0-preview + +[Content] +# The unsigned-shim package tries to install to the same location as the signed shim package so we can't install and +# 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 504b9396f..117ef9ba6 100644 --- a/mkosi.conf.d/20-centos/mkosi.conf +++ b/mkosi.conf.d/20-centos/mkosi.conf @@ -12,4 +12,6 @@ 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-fedora/mkosi.conf b/mkosi.conf.d/20-fedora/mkosi.conf index f9fdf1f67..75101a1ee 100644 --- a/mkosi.conf.d/20-fedora/mkosi.conf +++ b/mkosi.conf.d/20-fedora/mkosi.conf @@ -8,6 +8,8 @@ Release=rawhide [Content] Packages= + kernel-core + perf qemu-user-static rpmautospec systemd-networkd diff --git a/mkosi.conf.d/20-fedora/mkosi.conf.d/20-x86_64.conf b/mkosi.conf.d/20-fedora/mkosi.conf.d/20-x86_64.conf index 1ffd9d4e2..dea16c8ab 100644 --- a/mkosi.conf.d/20-fedora/mkosi.conf.d/20-x86_64.conf +++ b/mkosi.conf.d/20-fedora/mkosi.conf.d/20-x86_64.conf @@ -6,4 +6,5 @@ Architecture=x86-64 [Content] Packages= amd-ucode-firmware + kernel-uki-virt shim-unsigned-x64 diff --git a/mkosi.conf.d/30-centos-fedora/mkosi.conf b/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf similarity index 91% rename from mkosi.conf.d/30-centos-fedora/mkosi.conf rename to mkosi.conf.d/30-azure-centos-fedora/mkosi.conf index 17eb422f6..c7fe6e7f1 100644 --- a/mkosi.conf.d/30-centos-fedora/mkosi.conf +++ b/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf @@ -5,16 +5,15 @@ Distribution=|centos Distribution=|alma Distribution=|rocky Distribution=|fedora +Distribution=|azure [Content] Packages= bash iproute iputils - kernel-core openssh-clients openssh-server - perf polkit python3 rpm-build diff --git a/mkosi.conf.d/30-centos-fedora/mkosi.conf.d/20-arm64.conf b/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-arm64.conf similarity index 100% rename from mkosi.conf.d/30-centos-fedora/mkosi.conf.d/20-arm64.conf rename to mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-arm64.conf diff --git a/mkosi.conf.d/30-centos-fedora/mkosi.conf.d/20-uefi.conf b/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-uefi.conf similarity index 100% rename from mkosi.conf.d/30-centos-fedora/mkosi.conf.d/20-uefi.conf rename to mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-uefi.conf diff --git a/mkosi.conf.d/30-centos-fedora/mkosi.conf.d/20-x86-64.conf b/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-x86-64.conf similarity index 87% rename from mkosi.conf.d/30-centos-fedora/mkosi.conf.d/20-x86-64.conf rename to mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-x86-64.conf index f558d660b..3551c7558 100644 --- a/mkosi.conf.d/30-centos-fedora/mkosi.conf.d/20-x86-64.conf +++ b/mkosi.conf.d/30-azure-centos-fedora/mkosi.conf.d/20-x86-64.conf @@ -7,5 +7,4 @@ Architecture=x86-64 Packages= grub2-efi-x64-modules grub2-pc - kernel-uki-virt microcode_ctl diff --git a/mkosi/distributions/__init__.py b/mkosi/distributions/__init__.py index 5d07b719c..eba9371e8 100644 --- a/mkosi/distributions/__init__.py +++ b/mkosi/distributions/__init__.py @@ -87,6 +87,7 @@ class Distribution(StrEnum): openmandriva = enum.auto() rocky = enum.auto() alma = enum.auto() + azure = enum.auto() custom = enum.auto() def is_centos_variant(self) -> bool: @@ -103,6 +104,7 @@ class Distribution(StrEnum): def is_rpm_distribution(self) -> bool: return self in ( + Distribution.azure, Distribution.fedora, Distribution.opensuse, Distribution.mageia, diff --git a/mkosi/distributions/azure.py b/mkosi/distributions/azure.py new file mode 100644 index 000000000..17f172cab --- /dev/null +++ b/mkosi/distributions/azure.py @@ -0,0 +1,97 @@ +# SPDX-License-Identifier: LGPL-2.1+ + +from collections.abc import Iterable + +from mkosi.config import Architecture +from mkosi.context import Context +from mkosi.distributions import ( + fedora, + join_mirror, +) +from mkosi.installer.dnf import Dnf +from mkosi.installer.rpm import RpmRepository, find_rpm_gpgkey, setup_rpm +from mkosi.log import die +from mkosi.util import listify + + +class Installer(fedora.Installer): + @classmethod + def pretty_name(cls) -> str: + return "Azure Linux" + + @classmethod + def default_release(cls) -> str: + return "3.0-prod" + + @classmethod + def filesystem(cls) -> str: + return "ext4" + + @classmethod + def setup(cls, context: Context) -> None: + Dnf.setup(context, cls.repositories(context), filelists=False) + setup_rpm(context, dbpath="/var/lib/rpm") + + @classmethod + def install(cls, context: Context) -> None: + cls.install_packages(context, ["filesystem", "azurelinux-release"], apivfs=False) + + @classmethod + @listify + def repositories(cls, context: Context) -> Iterable[RpmRepository]: + gpgurls = ( + find_rpm_gpgkey( + context, + "MICROSOFT-RPM-GPG-KEY", + "https://raw.githubusercontent.com/rpm-software-management/distribution-gpg-keys/main/keys/azure-linux/MICROSOFT-RPM-GPG-KEY", + ), + ) + + if context.config.local_mirror: + yield RpmRepository("base", f"baseurl={context.config.local_mirror}", gpgurls) + return + + mirror = context.config.mirror or "https://packages.microsoft.com/azurelinux" + + if any(context.config.release.endswith(f"-{suffix}") for suffix in ("prod", "preview")): + rel = context.config.release + else: + rel = f"{context.config.release}-prod" + + url = join_mirror(mirror, rel.replace("-", "/")) + + nvidia = "nvidia" if rel.endswith("-prod") else "NVIDIA" + for repo in ("base", "extended", "ms-oss", "ms-non-oss", "cloud-native", nvidia): + yield RpmRepository( + repo, + f"baseurl={url}/{repo}/$basearch", + gpgurls, + ) + + for repo in ("base", "cloud-native", "extended"): + yield RpmRepository( + f"{repo}-debuginfo", + f"baseurl={url}/{repo}/debuginfo/$basearch", + gpgurls, + enabled=False, + ) + + for repo in ("base", "cloud-native", "extended", "ms-oss"): + yield RpmRepository( + f"{repo}-source", + f"baseurl={url}/{repo}/srpms", + gpgurls, + enabled=False, + ) + + @classmethod + def architecture(cls, arch: Architecture) -> str: + a = { + Architecture.arm64 : "aarch64", + Architecture.x86_64 : "x86_64", + }.get(arch) + + if not a: + die(f"Architecture {a} is not supported by {cls.pretty_name()}") + + return a diff --git a/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-centos-fedora.conf b/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-azure-centos-fedora.conf similarity index 73% rename from mkosi/resources/mkosi-initrd/mkosi.conf.d/10-centos-fedora.conf rename to mkosi/resources/mkosi-initrd/mkosi.conf.d/10-azure-centos-fedora.conf index cd588162a..2cd18b74a 100644 --- a/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-centos-fedora.conf +++ b/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-azure-centos-fedora.conf @@ -6,11 +6,11 @@ Distribution=|centos Distribution=|alma Distribution=|rocky Distribution=|rhel +Distribution=|azure [Content] Packages= # Various libraries that are dlopen'ed by systemd - libfido2 tpm2-tss # File system checkers for supported root file systems @@ -18,7 +18,3 @@ Packages= xfsprogs # fsck.btrfs is a dummy, checking is done in the kernel. - -RemovePackages= - # Various packages pull in shadow-utils to create users, we can remove it afterwards - shadow-utils diff --git a/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-azure.conf b/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-azure.conf new file mode 100644 index 000000000..d591fbc63 --- /dev/null +++ b/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-azure.conf @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +[Match] +Distribution=azure + +[Content] +Packages= + util-linux diff --git a/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-centos.conf b/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-centos.conf index eda3177ac..5b25c7e41 100644 --- a/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-centos.conf +++ b/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-centos.conf @@ -8,4 +8,9 @@ Distribution=|rhel [Content] Packages= + libfido2 util-linux + +RemovePackages= + # Various packages pull in shadow-utils to create users, we can remove it afterwards + shadow-utils diff --git a/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-fedora.conf b/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-fedora.conf index b1b77e210..228a0ec87 100644 --- a/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-fedora.conf +++ b/mkosi/resources/mkosi-initrd/mkosi.conf.d/10-fedora.conf @@ -5,4 +5,9 @@ Distribution=fedora [Content] Packages= + libfido2 util-linux-core + +RemovePackages= + # Various packages pull in shadow-utils to create users, we can remove it afterwards + shadow-utils diff --git a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-centos-fedora/mkosi.conf b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-azure-centos-fedora/mkosi.conf similarity index 96% rename from mkosi/resources/mkosi-tools/mkosi.conf.d/10-centos-fedora/mkosi.conf rename to mkosi/resources/mkosi-tools/mkosi.conf.d/10-azure-centos-fedora/mkosi.conf index dc1e4913c..b860c9314 100644 --- a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-centos-fedora/mkosi.conf +++ b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-azure-centos-fedora/mkosi.conf @@ -6,6 +6,7 @@ Distribution=|alma Distribution=|rocky Distribution=|rhel Distribution=|fedora +Distribution=|azure [Content] Packages= diff --git a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-centos-fedora/mkosi.conf.d/10-uefi.conf b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-azure-centos-fedora/mkosi.conf.d/10-uefi.conf similarity index 100% rename from mkosi/resources/mkosi-tools/mkosi.conf.d/10-centos-fedora/mkosi.conf.d/10-uefi.conf rename to mkosi/resources/mkosi-tools/mkosi.conf.d/10-azure-centos-fedora/mkosi.conf.d/10-uefi.conf diff --git a/mkosi/resources/mkosi-tools/mkosi.conf.d/10-azure.conf b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-azure.conf new file mode 100644 index 000000000..6d866761c --- /dev/null +++ b/mkosi/resources/mkosi-tools/mkosi.conf.d/10-azure.conf @@ -0,0 +1,15 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later + +[Match] +Distribution=azure + +[Content] +Packages= + btrfs-progs + distribution-gpg-keys + dnf5 + dnf5-plugins + erofs-utils + qemu-system-aarch64-core + qemu-system-s390x-core + systemd-ukify diff --git a/mkosi/resources/mkosi.md b/mkosi/resources/mkosi.md index b13b47921..852b9081b 100644 --- a/mkosi/resources/mkosi.md +++ b/mkosi/resources/mkosi.md @@ -394,8 +394,8 @@ boolean argument: either `1`, `yes`, or `true` to enable, or `0`, `no`, : The distribution to install in the image. Takes one of the following arguments: `fedora`, `debian`, `kali`, `ubuntu`, `arch`, `opensuse`, `mageia`, `centos`, `rhel`, `rhel-ubi`, `openmandriva`, `rocky`, `alma`, - `custom`. If not specified, defaults to the distribution of the host - or `custom` if the distribution of the host is not a supported + `azure` or `custom`. If not specified, defaults to the distribution of + the host or `custom` if the distribution of the host is not a supported distribution. `Release=`, `--release=`, `-r` @@ -441,6 +441,7 @@ boolean argument: either `1`, `yes`, or `true` to enable, or `0`, `no`, | `rhel-ubi` | https://cdn-ubi.redhat.com | | | `mageia` | https://www.mageia.org | | | `openmandriva` | http://mirrors.openmandriva.org | | + | `azure` | https://packages.microsoft.com/ | | `LocalMirror=`, `--local-mirror=` : The mirror will be used as a local, plain and direct mirror instead @@ -1918,6 +1919,8 @@ distributions: * *Alma Linux* +* *Azure Linux* + * *None* (**Requires the user to provide a pre-built rootfs**) In theory, any distribution may be used on the host for building images