Name: mkosi
Version: 24
Release: 1.1%{?dist}
Summary: Create bespoke OS images
License: LGPL-2.1-or-later
URL: https://github.com/systemd/mkosi
Source: https://github.com/systemd/mkosi/archive/v%{version}/%{name}-%{version}.tar.gz
# setuptools in c9s does not support all sections from pyproject.toml yet so we
# add back a setup.py file to get the build working.
Patch1: add-back-setup.py-file.patch
BuildArch: noarch
BuildRequires: python3-devel
BuildRequires: pyproject-rpm-macros
BuildRequires: python3-pytest
BuildRequires: pandoc
%bcond tests 1
# mkosi wants the uncompressed man page to show via 'mkosi documentation'
%global __brp_compress true
Requires: python3
Requires: bubblewrap
Requires: coreutils
# for completion
Recommends: python3dist(argcomplete)
# for various image building tools (systemd-hwdb, systemd-sysusers, ...)
Recommends: systemd
# for systemd-nspawn
Recommends: systemd-container >= 254
# for bootable images (systemd-udev ships bootctl)
Recommends: systemd-udev >= 254
Recommends: systemd-ukify >= 254
# for disk images
Recommends: systemd-repart >= 254
# for the --acl option to allow removing directories generated by mkosi
Recommends: acl
# for when kernels are installed and we need to run depmod
Recommends: kmod
# for signing
Recommends: openssl
Recommends: sbsigntools
Recommends: gnupg
# for building specific distributions
Recommends: (dnf5 or dnf)
Recommends: apt
Recommends: debian-keyring
Recommends: pacman
Recommends: archlinux-keyring
Recommends: zypper
# for various filesystems
Recommends: btrfs-progs
Recommends: e2fsprogs
Recommends: dosfstools
Recommends: mtools
Recommends: erofs-utils
Recommends: xfsprogs
Recommends: squashfs-tools
# for various output formats
Recommends: cpio
Recommends: tar
# for mkosi qemu
Recommends: qemu-kvm-core
Recommends: edk2-ovmf
Recommends: swtpm
# for mkosi ssh
Recommends: openssh-clients
Recommends: socat
# for output compression
Recommends: zstd
Recommends: xz
%description
A fancy wrapper around "dnf --installroot", "apt", "pacman", and "zypper" that
generates disk images with a number of bells and whistles.
Generated images are tailored to the purpose: GPT partitions,
systemd-boot or grub2, images for containers, VMs, initrd, and extensions.
Mkosi can boot an image via QEMU or systemd-nspawn, or simply start a shell in
chroot, burn the image to a device, connect to a running VM via ssh, extract
logs and coredumps, and also serve an image over HTTP.
See https://mkosi.systemd.io/ for documentation.
%package initrd
Summary: Build initrds locally using mkosi
Requires: %{name} = %{version}-%{release}
Requires: (dnf5 or dnf)
%description initrd
This package provides the plugin for kernel-install to build initrds with
mkosi locally.
After the package is installed, the plugin can be enabled by writing
'initrd_generator=mkosi-initrd' to '/etc/kernel/install.conf'.
%prep
%autosetup -p1
%generate_buildrequires
%pyproject_buildrequires
%build
tools/make-man-page.sh
%pyproject_wheel
%install
%pyproject_install
%pyproject_save_files mkosi
mkdir -p %{buildroot}%{_mandir}/man1
ln -s -t %{buildroot}%{_mandir}/man1/ \
../../../..%{python3_sitelib}/mkosi/resources/mkosi.1
ln -s -t %{buildroot}%{_mandir}/man1/ \
../../../..%{python3_sitelib}/mkosi/resources/mkosi-initrd.1
# Install the kernel-install plugin
install -Dt %{buildroot}%{_prefix}/lib/kernel/install.d/ \
kernel-install/50-mkosi.install
mkdir -p %{buildroot}%{_prefix}/lib/mkosi-initrd
mkdir -p %{buildroot}%{_sysconfdir}/mkosi-initrd
%files -f %pyproject_files
%license LICENSE
%doc README.md
%_bindir/mkosi
%_mandir/man1/mkosi.1*
%files initrd
%_bindir/mkosi-initrd
%_mandir/man1/mkosi-initrd.1*
%_prefix/lib/kernel/install.d/50-mkosi.install
%ghost %dir %{_prefix}/lib/mkosi-initrd
%ghost %dir %{_sysconfdir}/mkosi-initrd
%check
%if %{with tests}
%pytest tests/ -v
%if %{defined py3_test_envvars}
# just a smoke test for syntax or import errors
%py3_test_envvars %{buildroot}%{_bindir}/mkosi --help >/dev/null
%endif
%endif
%changelog
%autochangelog