The live-build package is not installed. This should be handled automatically by scripts/02-prerequisites.sh, but if the build fails before that step:
sudo apt-get update
sudo apt-get install live-buildThe build must be run as root:
sudo ./build.shIf using environment overrides, use sudo -E:
sudo -E KIOSK_URL="https://example.com" ./build.shThe build requires approximately 15 GB of free space. To reclaim space from previous builds:
sudo lb clean --purge
rm -rf cache/ chroot/ binary/ auto/ config/Then re-run:
sudo ./build.shIf scripts/10-finalize.sh reports "Build did not produce an ISO":
- Check
output/build.logfor error details. - Common causes:
- Network failure during
debootstrapor package download. - Missing or broken packages in the package list.
- Disk space exhaustion during
lb build.
- Network failure during
- Try a clean rebuild:
sudo lb clean --purge rm -rf cache/ chroot/ binary/ auto/ config/ sudo ./build.sh
If lb build fails because a package is unavailable:
- Verify the package name exists in Debian Bookworm:
apt-cache search <package-name>
- Check that
ARCHIVE_AREASinconfig.envincludes the required area (main,contrib,non-free,non-free-firmware). - If using
chromium, the package name in Debian ischromium(notchromium-browser).
Auto-partitioning is disabled by default as a safety measure. To enable it, set the token before building:
sudo -E ERASE_ALL_DATA_TOKEN=I_UNDERSTAND ./build.shWithout this token, the installer will pause at the partitioning step and require manual input.
The preseed sets a 5-second DHCP timeout. If no wired network is available, the installer may pause briefly. It should continue after the timeout. If it hangs indefinitely, check:
- That the ISO was built correctly.
- That the preseed file was generated (check
output/build.logfor step 8 output).
Keyboard is configured in three places. If the layout is wrong:
- Check
KEYMAPinconfig.env(default:nofor Norwegian). - Verify
KEYMAP_MODEL(default:pc105). - Post-install fix:
dpkg-reconfigure keyboard-configuration
Cause: PipeWire services are not running for the current user.
Solutions:
-
Check if running as correct user (not root):
whoami # Should show your username (e.g., displayos), NOT 'root' -
Verify PipeWire services are running:
systemctl --user status pipewire wireplumber pipewire-pulse
-
Restart audio services if needed:
systemctl --user restart pipewire wireplumber pipewire-pulse
-
Check for errors:
journalctl --user -u pipewire -u wireplumber -u pipewire-pulse
See Audio Configuration for detailed troubleshooting.
Cause: PipeWire's PulseAudio interface socket doesn't exist.
Solutions:
-
Check socket status:
systemctl --user status pipewire-pulse.socket
-
Start the socket if inactive:
systemctl --user start pipewire-pulse.socket
-
Verify socket file exists:
ls -la /run/user/$(id -u)/pulse/native
Cause: Audio is routed to the wrong sink, or the sink is muted.
Solutions:
-
Check current sinks:
pactl list short sinks
-
Check if sink is muted:
pactl list sinks | grep -A 10 "Sink #0"
-
Unmute and set volume:
pactl set-sink-mute 0 0 pactl set-sink-volume 0 50%
-
Use pavucontrol GUI to check routing under "Output Devices" tab.
If APT points to cdrom:// repositories instead of online mirrors, the APT fix hooks may not have applied correctly. Manually fix:
cat > /etc/apt/sources.list << 'EOF'
deb http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware
deb http://deb.debian.org/debian-security/ bookworm-security main contrib non-free non-free-firmware
deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free non-free-firmware
EOF
apt-get update- Ensure
assets/wallpaper.pngexists before building. - The image must be PNG format. GRUB requires an 8-bit RGB PNG.
imagemagick(included in the default packages) converts and resizes the image during the build. Ifconvertis unavailable in the chroot, the raw image is copied instead, which may not be GRUB-compatible.
- Check if the kiosk script exists:
ls -la /usr/local/bin/displayos-kiosk
- Check the autostart entry:
ls -la /home/displayos/.config/autostart/displayos.desktop # Replace 'displayos' with your username - Run the kiosk script manually to see errors:
/usr/local/bin/displayos-kiosk
- Verify the browser package is installed:
which firefox-esr # or: which chromium
The kiosk script disables DPMS and screen blanking. If the screen still blanks:
xset s off -dpms
xset s noblankTo make this persistent, verify the kiosk script is running at login.
- Check if SSH is enabled: verify
ENABLE_SSH=yeswas set during build. - Check if the service is running:
systemctl status ssh
- If not running:
systemctl enable ssh systemctl start ssh
- Verify the wallpaper exists on the installed system:
ls -la /usr/share/backgrounds/displayos-wallpaper.png
- Manually restore:
/usr/local/bin/restore-wallpaper
To get verbose output from the build:
sudo -E DEBUG=yes ./build.shThis enables:
- Bash
set -xtracing (every command is printed before execution). LB_DEBUG=1for live-build verbose output.- All output is logged to
output/build.log.
- Build Process — understanding the build pipeline
- Configuration — verifying variable values
- System Behavior — understanding runtime behavior