Distrobuilder 3.1 has been released

Introduction

The distrobuilder team is proud to announce the release of distrobuilder 3.1!

This is primarily a bugfix release, fixing a lot of small issues for a number of distributions as well as cleaning up some of our systemd and SELinux handling logic. Highlights are:

  • Improvement to Windows ISO repacking logic (should support more .iso images)
  • Fully removed LXD support
  • Better support for running on Red Hat derivative distros

The full list of commits is available below:

Detailed changelog
  • gomod: Bump to Go 1.20 minimum
  • Fix small logging issues
  • image: Use per-test temp dirs
  • README: Add note about minimum Go version
  • main: Fix VM builds when using build-lxd command
  • sources: Fix openeuler tests
  • nixos-http: support versioned releases
  • managers: Rebranding Macaroni OS Package Manager
  • Bump The Go Programming Language from v0.15.0 to v0.17.0
  • Bump GitHub - containerd/containerd: An open and reliable container runtime from v1.7.8 to v1.7.11
  • sources: Fix openEuler tests
  • main: Add missing --sources-dir to build-incus command
  • Update README.md Install Instructions
  • Update README.md
  • incus-agent: Refresh files
  • build(deps): bump GitHub - opencontainers/runc: CLI tool for spawning and running containers according to the OCI specification from 1.1.10 to 1.1.12
  • incus-agent: Fix systemd unit name under LXD
  • Makefile: Bump minimum Go version to 1.21
  • README: Bump minimum Go version to 1.21
  • github: Replace Go 1.20 with 1.22 in tests
  • gomod: Update dependencies
  • Makefile: Bump golangci-lint to 1.56.0
  • A comment to describe the 4294967295 constant
  • Use indented heredoc syntax
  • Inject a comment into generated files
  • Expand grep -a to --text for readability
  • Make lxc.generator shellcheck clean
  • Break between systemd unit sections
  • incus-agent: Fix SELinux
  • Bump pongo2 to v4
  • Remove race in tests
  • debootstrap: Pass --no-merged-usr on noble
  • Debian sid no-merged-usr
  • Replace util.ValueInSlice with slices.Contains
  • Fixed hardcoded root partition device name sda2
  • Updated ubuntu example to use ROOTFS_DEVICE_UUID
  • gomod: Update dependencies
  • incus: Bump to 6.0
  • Make run-parts running compatible with different versions
  • Set repack-windows drivers default value
  • Clean up iso mount gen warnings
  • Refactory find boot.wim and install.wim logic
  • Refactor WIM info parsing
  • Support x86 architecture and refactor the detecting logic
  • gomod: Update dependencies
  • sphinx: Avoid myst-parser >=3.0.0
  • sources/funtoo: Use symlinks
  • archlinux: Move to zst
  • Repack windows bios boot support
  • Refactor copy driver files
  • Refactor parse inf driver class guid
  • Update actions.md
  • lxc.generator: Handle pre-release systemd
  • systemd v256 seems to require overriding ImportCredential= for all containers
  • Fixed duplicated umount action
  • Support http-proxy keyserver options for gpg recv-keys
  • Refactor import gpg public keys
  • distrobuilder: Remove LXD support
  • gomod: Update dependencies
  • gomod: Remove excludes
  • Fixed multiple sys files not copied issue
  • Update README.md
  • Update README.md
  • Fixed device major minor parse failure
  • vm: Fix lsblk parsing logic
  • Revert “vm: Fix lsblk parsing logic”
  • Revert “Fixed device major minor parse failure”
  • Fixed device major minor parse failure
  • Run unit tests via sudo
  • debootstrap: Remove no-merged-usr/merged-usr logic
  • debootstrap: Add workaround for devuan
  • sources: Fix openEuler tests
  • workflows/tests: drop 1.21, add 1.23
  • gomod: Update dependencies
  • Makefile: Align golangci-lint with Incus
  • global: Fix golangci-lint errors
  • nixos-http: use incus-specific image for unstable
  • Add handling of ESD files
  • Makefile: Bump to Go 1.22.7 base
  • gomod: Update dependencies
  • sources: Remove dead code
  • source: Add mkisofs support

Downloads

3 Likes

Is this tool part of Incus or separated?

It is a Linux Containers project. It is separate from Incus.

Incus is also a Linux Containers project.

Are there any plans to have an alternative distribution method for Distrobuilder apart from snap? Looks like building from source is the only option for now.

This topic came up recently in the GitHub issues. It has to do with a dependency on cgo. This makes it hard to share binaries across systems.

Luckily building from source is pretty easy.

Yeah, it’s currently niche enough of a tool as most folks should really consume the public images and customize them with something like Packer instead that it hasn’t made too much sense to spend time maintaining our own packages.

Similarly, most distributions haven’t started packaging distrobuilder for the same reason, it’s not really an end user tool like Incus itself.

What I may do is start building distrobuilder with the Zabbly Incus packages and put it in the incus-extra package as it’s got similar type tools.

2 Likes

I agree that for Linux images it’s niche because those can be easily downloaded from repo.

But distrobuilder is more needed for running Windows VM with Incus. At least for Windows 10 and older. While there is workaround it’s not officially supported. Incus would need to add qemu cdrom support.

We actually do automatically mark disks as being cdrom if the file extension is .iso or the volume is an ISO volume. The problem with Windows is that it doesn’t have a virtio-scsi driver, so the media type being correct doesn’t help when the controller is missing :slight_smile:

Anyway, the daily builds of the Zabbly packages now have distrobuilder in the incus-extra package. This will make its way into the stable packages with Incus 6.7.

1 Like

Oh, sorry I wrote that badly.
What I meant is disk (or cdrom) that uses driver usable for Windows installer. I think that would be IDE or AHCI.
I think QEMU cdrom command uses IDE by default.
So Windows installer would be able to read that ISO and take virtio drivers from it.

Yeah, annoyingly we can’t do IDE as our disk handling logic entirely relies on hotplug being possible and QEMU’s SATA/IDE controller doesn’t allow hotplugging…

1 Like

I tried to look at QEMU docs but didn’t find much. At least nothing about how to make SATA hot-pluggable.

So currently for Windows 10 and older people need to do repack with distrobuilder or workaround with raw.qemu command I linked above.

Unless someone finds other solution I thinks that’s it for now.