From b2dcdf9757f1cf7509a77f39deb4eaced1ebb8a9 Mon Sep 17 00:00:00 2001 From: Thales Maciel Date: Sat, 18 Apr 2026 14:58:42 -0300 Subject: [PATCH] vm_lifecycle: drop systemd.mask=dev-{ttyS0,vdb}.device MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both masks were added when the direct-boot path first landed for container rootfses that didn't have anything mounted on /dev/vdb. The golden image (and any pulled OCI image running under banger's patchRootOverlay) has an /etc/fstab entry mounting /dev/vdb at /root — masking dev-vdb.device makes systemd wait forever for a unit that can never become active, and the work-disk mount never completes. dev-ttyS0 is a real serial console the image needs too. Drop both. Co-Authored-By: Claude Opus 4.7 (1M context) --- internal/daemon/vm_lifecycle.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/daemon/vm_lifecycle.go b/internal/daemon/vm_lifecycle.go index 8335c78..17713da 100644 --- a/internal/daemon/vm_lifecycle.go +++ b/internal/daemon/vm_lifecycle.go @@ -156,8 +156,7 @@ func (d *Daemon) startVMLocked(ctx context.Context, vm model.VMRecord, image mod // systemd+sshd on first boot if missing. kernelArgs = system.BuildBootArgsWithKernelIP( vm.Name, vm.Runtime.GuestIP, d.config.BridgeIP, d.config.DefaultDNS, - ) + " init=" + imagepull.FirstBootScriptPath + - " systemd.mask=dev-ttyS0.device systemd.mask=dev-vdb.device" + ) + " init=" + imagepull.FirstBootScriptPath } machineConfig := firecracker.MachineConfig{