feat(images): add WSL rootfs image#16902
Conversation
Adds a kiwi-ng image definition that produces a tar.bz2 rootfs consumable by 'wsl --import'. The image ships systemd, dnf5, a small interactive userland, hyperv-daemons, and the wsl-setup package that provides /etc/wsl.conf, /etc/wsl-distribution.conf, and the OOBE script. No kernel, grub2, dracut, or shim are included as WSL provides its own kernel. Registered as [images.wsl] in base/images/images.toml. Signed-off-by: Muhammad Falak R Wani <falakreyaz@gmail.com>
There was a problem hiding this comment.
Pull request overview
Adds a new KIWI NG image definition for a WSL-importable root filesystem and registers it in the image catalog so it can be built via the repo’s image tooling.
Changes:
- Add
base/images/wsl/wsl.kiwidefining atbz(tar.bz2) rootfs image with systemd, dnf5, and WSL integration packages. - Register the image as
[images.wsl]inbase/images/images.toml.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| base/images/wsl/wsl.kiwi | New KIWI image definition for a WSL rootfs tarball (packages, repo, image type). |
| base/images/images.toml | Registers the new WSL image so it’s discoverable/buildable via image config. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| <package name="azurelinux-release-cloud" /> | ||
| <package name="azurelinux-repos" /> | ||
| <package name="filesystem" /> |
There was a problem hiding this comment.
The image is installing azurelinux-release-cloud, which is the Cloud variant release package; for a WSL rootfs this should likely be azurelinux-release-wsl so the correct WSL defaults/identity/presets are applied (and cloud-specific defaults are not pulled in).
| </packages> | ||
|
|
||
| <packages type="bootstrap"> | ||
| <package name="azurelinux-release-cloud" /> |
There was a problem hiding this comment.
Same issue in the bootstrap set: using azurelinux-release-cloud here will seed the rootfs with the Cloud variant. Consider switching the bootstrap release package to azurelinux-release-wsl to keep the variant consistent from the initial bootstrap onward.
| <package name="azurelinux-release-cloud" /> | |
| <package name="azurelinux-release-wsl" /> |
| <repository type="rpm-md" alias="azl4"> | ||
| <source | ||
| path="https://stcontroltowerdevjwisitg.blob.core.windows.net/daily-repo-non-prod/20260303/x86_64/" /> | ||
| </repository> |
There was a problem hiding this comment.
The repository URL is hardcoded to a dated, non-prod blob location and to the x86_64 repo path. This makes the image build non-reproducible over time and will break for non-x86_64 builds (e.g., WSL arm64). Please switch to a stable/release repo URL (or inject the repo at build time) and make the path architecture-aware or provide per-arch repos/profiles.
❌ Rendered specs are out of date🚧🚧🚧🚧🚧 Warning Disregard this comment. Spec rendering is still under development and checked-in specs 🚧🚧🚧🚧🚧 FIX: — run this and commit the result: azldev component render -a --clean-staleOr download the fix patch and apply it: gh run download 24987398343 -R microsoft/azurelinux -n rendered-specs-patch
git apply rendered-specs.patch
Content diffs`specs/a/anaconda-webui/anaconda-webui.spec`--- committed/specs/a/anaconda-webui/anaconda-webui.spec
+++ rendered/specs/a/anaconda-webui/anaconda-webui.spec
@@ -46,7 +46,6 @@
Requires: (firefox if fedora-release-workstation)
%endif
%if 0%{?fedora}
-Requires: fedora-logos
%endif
BuildRequires: desktop-file-utils
@@ -77,6 +76,7 @@
Provides: bundled(npm(throttle-debounce)) = 5.0.2
Provides: bundled(npm(tslib)) = 2.8.1
+Requires: system-logos
%description
Anaconda installer Web interface
`specs/a/azurelinux-release/90-default-user.preset`--- committed/specs/a/azurelinux-release/90-default-user.preset
+++ rendered/specs/a/azurelinux-release/90-default-user.preset
@@ -2,6 +2,3 @@
# unconditionally. It is used throughout the distro and required on all machines.
enable dbus.socket
enable dbus-broker.service
-
-# TODO(azl): evaluate these
-# enable grub-boot-success.timer
`specs/a/azurelinux-release/90-default.preset`--- committed/specs/a/azurelinux-release/90-default.preset
+++ rendered/specs/a/azurelinux-release/90-default.preset
@@ -1,4 +1,3 @@
-# TODO(azl): review this file
# We deviate from some upstream defaults
disable systemd-timesyncd.service
@@ -7,6 +6,7 @@
enable systemd-resolved.service
+enable systemd-oomd.socket
enable systemd-oomd.service
# System stuff
@@ -364,8 +364,8 @@
enable kernel-bootcfg-boot-successful.service
# Enable lvm-devices-import
-enable /usr/lib/systemd/system/lvm-devices-import.path
-enable /usr/lib/systemd/system/lvm-devices-import.service
+enable lvm-devices-import.path
+enable lvm-devices-import.service
# Enable fips-crypto-policy-overlay
enable fips-crypto-policy-overlay.service
`specs/i/intel-ipsec-mb/intel-ipsec-mb.spec`--- committed/specs/i/intel-ipsec-mb/intel-ipsec-mb.spec
+++ rendered/specs/i/intel-ipsec-mb/intel-ipsec-mb.spec
@@ -13,7 +13,7 @@
Name: intel-ipsec-mb
Version: 2.0.1
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: IPsec cryptography library optimized for Intel Architecture
License: BSD-3-Clause
@@ -67,6 +67,9 @@
%{_mandir}/man7/libipsec-mb-dev.*
%changelog
+* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
+
* Thu Jul 24 2025 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
`specs/k/kdump-utils/kdump-utils.spec`--- committed/specs/k/kdump-utils/kdump-utils.spec
+++ rendered/specs/k/kdump-utils/kdump-utils.spec
@@ -44,6 +44,7 @@
%ifnarch s390x
Requires: systemd-udev%{?_isa}
%endif
+Patch0: kdumpctl-Use-only-first-match-in-_find_kernel_path_b.patch
%description
kdump-utils is responsible for collecting the crash kernel dump. It builds and
loads the kdump initramfs so when a kernel crashes, the system will boot the
@@ -134,7 +135,7 @@
%changelog
## START: Generated by rpmautospec
-* Wed Apr 22 2026 azldev <azurelinux@microsoft.com> - 1.0.59-2
+* Thu Apr 23 2026 azldev <azurelinux@microsoft.com> - 1.0.59-2
- Latest state for kdump-utils
* Wed Nov 19 2025 Packit <hello@packit.dev> - 1.0.59-1
`specs/k/kf6-breeze-icons/kf6-breeze-icons.spec`--- committed/specs/k/kf6-breeze-icons/kf6-breeze-icons.spec
+++ rendered/specs/k/kf6-breeze-icons/kf6-breeze-icons.spec
@@ -66,7 +66,7 @@
%description -n breeze-icon-theme
%{summary}.
-%if 0%{?fedora}
+%if 0
%package -n breeze-icon-theme-fedora
Summary: Breeze icon theme Fedora specific icons
License: LGPL-3.0-or-later
@@ -136,7 +136,7 @@
# %%ghost icon.cache
touch %{buildroot}%{_kf6_datadir}/icons/{breeze,breeze-dark}/icon-theme.cache
-%if 0%{?fedora}
+%if 0
install -pm 0644 icons-fedora/apps/48/org.fedoraproject.AnacondaInstaller.svg %{buildroot}%{_kf6_datadir}/icons/breeze/apps/48
ln -sr %{buildroot}%{_kf6_datadir}/icons/breeze/apps/48/org.fedoraproject.AnacondaInstaller.svg %{buildroot}%{_kf6_datadir}/icons/breeze-dark/apps/48/org.fedoraproject.AnacondaInstaller.svg
%endif
@@ -178,11 +178,11 @@
%{_datadir}/icons/breeze-dark/index.theme
%{_datadir}/icons/breeze-dark/*/
%exclude %{_datadir}/icons/breeze/breeze-icons.rcc
-%if 0%{?fedora}
+%if 0
%exclude %{_datadir}/icons/breeze*/apps/*/org.fedoraproject.AnacondaInstaller.svg
%endif
-%if 0%{?fedora}
+%if 0
%files -n breeze-icon-theme-fedora
%{_datadir}/icons/breeze*/apps/*/org.fedoraproject.AnacondaInstaller.svg
%endif
`specs/p/perl-CryptX/perl-CryptX.spec`--- committed/specs/p/perl-CryptX/perl-CryptX.spec
+++ rendered/specs/p/perl-CryptX/perl-CryptX.spec
@@ -8,7 +8,7 @@
Name: perl-CryptX
Version: 0.087
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Cryptographic toolkit
# src/ltc/*: Unlicense
# src/ltm/*: Unlicense
@@ -153,6 +153,9 @@
%{_libexecdir}/%{name}
%changelog
+* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 0.087-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
+
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.087-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
`specs/p/python-xxhash/python-xxhash.spec`--- committed/specs/p/python-xxhash/python-xxhash.spec
+++ rendered/specs/p/python-xxhash/python-xxhash.spec
@@ -2,7 +2,7 @@
## (rpmautospec version 0.8.4)
## RPMAUTOSPEC: autorelease, autochangelog
%define autorelease(e:s:pb:n) %{?-p:0.}%{lua:
- release_number = 2;
+ release_number = 3;
base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}"));
print(release_number + base_release_number - 1);
}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}}
@@ -68,8 +68,11 @@
%changelog
## START: Generated by rpmautospec
-* Wed Apr 22 2026 azldev <azurelinux@microsoft.com> - 3.6.0-2
+* Thu Apr 23 2026 azldev <azurelinux@microsoft.com> - 3.6.0-3
- Latest state for python-xxhash
+
+* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 3.6.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Wed Oct 08 2025 Benjamin A. Beasley <code@musicinmybrain.net> - 3.6.0-1
- Update to 3.6.0 (close RHBZ#2402506)
`specs/r/rust-hashbrown/rust-hashbrown.spec`--- committed/specs/r/rust-hashbrown/rust-hashbrown.spec
+++ rendered/specs/r/rust-hashbrown/rust-hashbrown.spec
@@ -2,7 +2,7 @@
## (rpmautospec version 0.8.4)
## RPMAUTOSPEC: autorelease, autochangelog
%define autorelease(e:s:pb:n) %{?-p:0.}%{lua:
- release_number = 2;
+ release_number = 3;
base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}"));
print(release_number + base_release_number - 1);
}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}}
@@ -165,8 +165,11 @@
%changelog
## START: Generated by rpmautospec
-* Wed Apr 22 2026 azldev <azurelinux@microsoft.com> - 0.16.1-2
+* Thu Apr 23 2026 azldev <azurelinux@microsoft.com> - 0.16.1-3
- Latest state for rust-hashbrown
+
+* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 0.16.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Thu Nov 27 2025 Fabio Valentini <decathorpe@gmail.com> - 0.16.1-1
- Update to version 0.16.1; Fixes RHBZ#2416170
`specs/r/rust-image/rust-image.spec`--- committed/specs/r/rust-image/rust-image.spec
+++ rendered/specs/r/rust-image/rust-image.spec
@@ -2,7 +2,7 @@
## (rpmautospec version 0.8.4)
## RPMAUTOSPEC: autorelease, autochangelog
%define autorelease(e:s:pb:n) %{?-p:0.}%{lua:
- release_number = 2;
+ release_number = 3;
base_release_number = tonumber(rpm.expand("%{?-b*}%{!?-b:1}"));
print(release_number + base_release_number - 1);
}%{?-e:.%{-e*}}%{?-s:.%{-s*}}%{!?-n:%{?dist}}
@@ -359,8 +359,11 @@
%changelog
## START: Generated by rpmautospec
-* Wed Apr 22 2026 azldev <azurelinux@microsoft.com> - 0.25.9-2
+* Thu Apr 23 2026 azldev <azurelinux@microsoft.com> - 0.25.9-3
- Latest state for rust-image
+
+* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 0.25.9-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Wed Dec 24 2025 Benjamin A. Beasley <code@musicinmybrain.net> - 0.25.9-1
- Update to verson 0.25.9; Fixes RHBZ#2415218
… and 6 more file(s). Run the remediation command above to see all changes. Files to addThese files are produced by
… and 216 more file(s). Files to removeThese files are in your branch but are not produced by render. Remove them.
… and 151 more file(s). |
|
@mfrw For comparison's sake, how does this differ from Fedora's composition of their WSL image? |
also possibly useful is the wsl (and other) xml from my branch converting fedora's kiwi xml into our own; although note, none of that will be merged. |
|
question(non-blocking): I note that this creates an entirely new dir |
Adds a kiwi-ng image definition that produces a tar.bz2 rootfs
consumable by 'wsl --import'. The image ships systemd, dnf5, a
small interactive userland, hyperv-daemons, and the wsl-setup
package that provides /etc/wsl.conf, /etc/wsl-distribution.conf,
and the OOBE script. No kernel, grub2, dracut, or shim are
included as WSL provides its own kernel.
Registered as [images.wsl] in base/images/images.toml.
Signed-off-by: Muhammad Falak R Wani falakreyaz@gmail.com