This guide covers common failures for the setup flow and how to recover safely.
Symptoms:
- Errors during
apt-get updateorapt-get full-upgrade -y
Likely Causes:
- No network connectivity
- Repository mirror outage
- Interrupted dpkg state
Troubleshooting:
sudo apt-get update
sudo dpkg --configure -a
sudo apt-get -f install
sudo apt-get full-upgrade -ySymptoms:
groupadd seatexits non-zero because the group already exists
Likely Causes:
- The
seatgroup was created by a previous setup run or is pre-created on the base image
Troubleshooting:
getent group seat
sudo groupadd -f seat
sudo ./scripts/setup.shSymptoms:
update-initramfsexits non-zero- The initramfs still reflects the old module policy after setup
btusbautosuspend does not appear disabled in the new boot environment
Likely Causes:
initramfs-toolsis missing or broken- The current kernel image is not installed correctly
- The
btusbmodule is not loaded yet, so the runtime sysfs parameter is absent
Troubleshooting:
command -v update-initramfs
grep -n '^MODULES=' /etc/initramfs-tools/initramfs.conf
ls /sys/module/btusb/parameters/ 2>/dev/null
sudo update-initramfs -u -k "$(uname -r)"Symptoms:
- Error asking for sudo or non-root account execution
Likely Causes:
- Script launched as root shell without
SUDO_USER
Troubleshooting:
whoami
echo "$SUDO_USER"
sudo ./scripts/post-setup.shSymptoms:
- Hook reports missing
scripts/...orsystemd/...files
Likely Causes:
- Running dispatcher or hook remotely without repository layout
- Incomplete clone or wrong working directory
Troubleshooting:
pwd
ls -la scripts post-setup/hooks systemd
sudo ./scripts/post-setup.shSymptoms:
- Dispatcher stops during
/etc/post-setup.d/*.sh
Likely Causes:
- Extension hook exits non-zero
- Syntax/runtime error in local hook
Troubleshooting:
sudo bash -n /etc/post-setup.d/*.sh
sudo bash -x /etc/post-setup.d/<failing-hook>.shSymptoms:
- Error about missing
findmntorsystemctl - Error saying PID 1 is not systemd
- Error refusing direct root execution
Likely Causes:
- Required util-linux or systemd tooling is missing
- The host was booted without systemd
- The script was launched as root instead of via
sudofrom a normal user account
Troubleshooting:
command -v findmnt
command -v systemctl
cat /proc/1/comm
whoami
echo "$SUDO_USER"Symptoms:
- Script completes but no new fstab entries are added
Likely Causes:
- No unmounted EXT4/NTFS disks detected
- Existing UUIDs already present in
/etc/fstab - Devices are already mounted at non-managed paths and were skipped by design
- The current mount point is already occupied or invalid
- NTFS disks were detected but the host does not provide
ntfs3orntfs-3g, so they were skipped with a warning
Troubleshooting:
lsblk -f
grep -E 'UUID=.*(ext4|ntfs|ntfs3)' /etc/fstab
findmnt --mountpoint "/mnt/your-mount-point"Expected informational output can include skip messages such as:
Skipping /dev/... - mounted at /boot/efi (expected managed path: /mnt/...)Skipping /dev/... - mounted at / (expected managed path: /mnt/...)Skipping /dev/... - mounted at /run/media/... (expected managed path: /mnt/...)
These are normal when the partition is already mounted elsewhere (for example system partitions or LVM-backed filesystems mounted by the OS).
Symptoms:
- Script reports that NTFS support is unavailable
Likely Causes:
- The kernel lacks
ntfs3 - The
ntfs-3guserspace helper is not installed - Helper binaries exist only in non-standard locations that are not in probe paths/PATH
Troubleshooting:
command -v mount.ntfs-3g || command -v mount.ntfs
grep -qw ntfs3 /proc/filesystemsThe script checks for helpers in this order:
/sbin/mount.ntfs-3g/usr/sbin/mount.ntfs-3g/sbin/mount.ntfs/usr/sbin/mount.ntfscommand -v mount.ntfs-3gorcommand -v mount.ntfs
If your distro installs helpers in a different location, add that location to PATH for the sudo environment or install/link the helper in a standard sbin path.
Symptoms:
- A desktop file manager shows a permission error when opening a managed NTFS mount created by an older script version
- Journal entries include:
Error opening read-only '/dev/sdb1': Permission denied
Likely Causes:
- An older or manually edited NTFS
/etc/fstabentry still containsusers; current automount runs no longer generate that option
Troubleshooting:
grep -nE 'UUID=.*ntfs-3g' /etc/fstab
journalctl -b -n 120 --no-pager | grep -E 'sdb1|ntfs|Permission denied|Unknown error when mounting'Recovery:
# Regenerate managed entries with the current NTFS options.
sudo ./scripts/automount-disks.sh
# If needed, adjust an existing legacy entry manually by removing only the `users` token.
sudo sed -i 's/,users,/,/g; s/,users / /g; s/ users,/ /g' /etc/fstab
sudo systemctl daemon-reload
sudo systemctl restart local-fs.targetSymptoms:
- Errors during temporary mount,
chown, or unmount
Likely Causes:
- Filesystem issues
- Mountpoint conflicts
- Permission/context mismatch
- The ext4 volume is already mounted elsewhere
Troubleshooting:
sudo dmesg | tail -n 50
sudo mount | grep /mnt/
sudo fsck -N /dev/<device>
findmnt --mountpoint "/mnt/your-mount-point"For EXT4, the script intentionally sets mount-root ownership on each run. If access fails with Permission denied because the mount root is owned by root:root, rerun:
sudo ./scripts/automount-disks.shIf the disk is mounted at its expected managed path, the script repairs ownership in place. If it is mounted somewhere else, the script skips it and prints an informational message; unmount/remount to the managed path and rerun.
Symptoms:
- Script exits with
Mount path exists and is not a directory
Likely Causes:
- A stale file or symlink already occupies the generated
/mnt/...mount path - Manual cleanup left behind a non-directory placeholder
Troubleshooting:
ls -ld "/mnt/<mount-path-from-error>"
sudo rm -f "/mnt/<mount-path-from-error>"
sudo ./scripts/automount-disks.shSymptoms:
- Script exits with
Generated /etc/fstab content failed validation for UUID=...
Likely Causes:
- Existing manual edits left
/etc/fstabin an invalid state - A conflicting entry or malformed option line was already present
Troubleshooting:
sudo findmnt --verify --tab-file /etc/fstab
sudo cp /etc/fstab.backup.<timestamp> /etc/fstab
sudo systemctl daemon-reload
sudo systemctl restart local-fs.targetIf a generated entry is incorrect, restore backup and reload:
ls -1 /etc/fstab.backup.* | tail -n 3
sudo cp /etc/fstab.backup.<timestamp> /etc/fstab
sudo systemctl daemon-reload
sudo systemctl restart local-fs.targetSymptoms:
- Script asks for sudo/root privileges
- Script exits because
/etc/os-releasecannot be read orVERSION_CODENAMEis empty
Likely Causes:
- Script was run without root privileges
- Host is not a Debian-style system release
/etc/os-releaseis missing or malformed
Troubleshooting:
whoami
cat /etc/os-release
sudo ./scripts/install-docker.shSymptoms:
- Errors during key download, apt update, or package installation
Likely Causes:
- Network access to
download.docker.comis blocked or unavailable - Host codename in
/etc/os-releasedoes not match the Debian release you intended to target curlor apt prerequisites are missing or stale
Troubleshooting:
cat /etc/os-release
sudo apt-get update
sudo apt-get install -y ca-certificates curl
curl -I https://download.docker.com/linux/debian/gpg
sudo ./scripts/install-docker.shSymptoms:
systemctl status dockershows inactive, failed, or missing service state
Likely Causes:
- Service did not start automatically
- systemd is not available in the current environment
- Installation completed but the daemon hit a startup error
Troubleshooting:
sudo systemctl start docker
sudo systemctl status docker --no-pager
sudo journalctl -u docker -n 50 --no-pagerSymptoms:
docker run hello-worldcannot pull or run the test image
Likely Causes:
- Docker daemon is not running
- Networking or DNS issues block image pulls
- User is not allowed to talk to the daemon without sudo
Troubleshooting:
sudo docker run hello-world
sudo systemctl status docker --no-pager
docker infoSymptoms:
- Package not found or repository key/source errors
- Errors during GPG key download or apt update
Likely Causes:
- Microsoft repository unreachable
- Keyring file missing or unreadable
- Network connectivity issues
Troubleshooting:
ls -l /usr/share/keyrings/microsoft.gpg
cat /etc/apt/sources.list.d/vscode.sources
wget -qO- https://packages.microsoft.com/keys/microsoft.asc
sudo apt-get update
sudo apt-get install -y code-insidersSymptoms:
- Error asking to run with sudo from a non-root account
Likely Causes:
- Direct root shell execution without
SUDO_USER
Troubleshooting:
whoami
echo "$SUDO_USER"
sudo ./scripts/install-labwc.shSymptoms:
apt-get install -y labwcfails
Likely Causes:
- Package unavailable in configured repositories
- Apt cache stale or network issues
Troubleshooting:
apt-cache policy labwc
sudo apt-get update
sudo apt-get install -y labwcSymptoms:
- Build stops during Meson configure or Ninja compile
Likely Causes:
- Missing or mismatched build dependencies
- Required wlroots version not present on the system and network access blocked for Meson subproject download
- Upstream source changes
Troubleshooting:
sudo apt-get install -y --no-install-recommends build-essential meson ninja-build pkg-config scdoc wayland-protocols
sudo apt-get -f install
sudo ./scripts/install-labwc.shSymptoms:
- Install succeeds but expected files are missing under
${XDG_CONFIG_HOME:-$HOME/.config}/labwc
Likely Causes:
- No matching files exist in repo
.config/labwc - The
labwcpackage is not installed yet, so/usr/share/doc/labwcis unavailable - The installed
labwcpackage does not ship the expected default files for this release
Troubleshooting:
ls -la .config/labwc
apt-cache policy labwc
ls -la /usr/share/doc/labwc
ls -la "${XDG_CONFIG_HOME:-$HOME/.config}/labwc"Symptoms:
- Script exits immediately with error message
Likely Causes:
- Environment variable set to value other than
package,source, ordocker-package
Troubleshooting:
echo "$LABWC_INSTALL_MODE"
unset LABWC_INSTALL_MODE
sudo ./scripts/install-labwc.shSymptoms:
- Script exits with
LABWC_DOCKER_IMAGE is set but empty.
Likely Causes:
- A wrapper script or shell profile exported an empty override value
- CI or manual invocation passed
LABWC_DOCKER_IMAGE=without a value
Troubleshooting:
env | grep '^LABWC_DOCKER_IMAGE='
unset LABWC_DOCKER_IMAGE
sudo ./scripts/install-labwc.shSymptoms:
- Docker-based build exits early before package build steps complete
Likely Causes:
- Docker CLI is not installed or not in PATH
- Docker daemon is not reachable
- Host
/etc/os-releaseis missing or does not defineVERSION_CODENAME
Troubleshooting:
command -v docker
docker version
sudo systemctl status docker --no-pager
sudo systemctl start dockerSymptoms:
- Docker build starts, then fails while installing build dependencies or cloning labwc
Likely Causes:
- No network egress from host/container to Debian mirrors
- No network egress from host/container to
https://github.com/labwc/labwc
Troubleshooting:
docker run --rm debian:trixie apt-get update
curl -I https://github.com/labwc/labwc
sudo ./scripts/install-labwc.shSymptoms:
- Docker-package mode reaches Meson configure/build for labwc, then fails with wlroots package/version errors
- Output indicates missing pkg-config entry for
wlroots-X.Yor missinglibwlroots-X.Y-dev
Likely Causes:
- Latest labwc tag requires a wlroots ABI not packaged in the selected container image
- Upstream
meson.buildformat changed and the wlroots ABI parser could not extractwlroots-X.Y - wlroots source fallback checkout fails for both
X.YandX.Y.0refs - wlroots source build/install completed but required pkg-config name is still not visible
Troubleshooting:
# Re-run in docker-package mode and capture logs
sudo LABWC_INSTALL_MODE=docker-package ./scripts/install-labwc.sh 2>&1 | tee /tmp/labwc-docker-build.log
# Inspect detected ABI and wlroots steps in log
grep -E 'wlroots-|libwlroots|pkg-config|checkout -f' /tmp/labwc-docker-build.log
# If image is too old/new for required ABI, try a different Debian-compatible image
sudo LABWC_INSTALL_MODE=docker-package LABWC_DOCKER_IMAGE=debian:trixie ./scripts/install-labwc.shSymptoms:
- Script exits with
Docker build completed but no labwc .deb package was found in $build_dir.
Likely Causes:
checkinstalldid not emit a package into the mounted artifacts directory- The container build failed after compilation but before packaging
- The artifact volume was unavailable or the output path was changed
Troubleshooting:
find /usr/local/src/labwc-docker-build -maxdepth 2 -type f \( -name 'labwc*.deb' -o -name '*.log' \)
sudo LABWC_INSTALL_MODE=docker-package ./scripts/install-labwc.shOperational note:
- The script already handles ABI detection and source fallback automatically. Persistent failure usually indicates mirror/network restrictions, missing source-build prerequisites in the image, or upstream ref availability issues.
Symptoms:
- Docker-package mode fails before build steps with image pull/auth/network errors
- Default image
debian:${VERSION_CODENAME}cannot be pulled from current environment
Likely Causes:
- Registry egress restrictions or DNS/proxy policy blocks default registry path
- Environment requires an internal or mirrored registry endpoint
Troubleshooting:
# Verify daemon access first
docker info
# Test pull from your approved mirror image
sudo docker pull mirror.gcr.io/library/debian:trixie
# Re-run using mirror override
sudo LABWC_INSTALL_MODE=docker-package \
LABWC_DOCKER_IMAGE=mirror.gcr.io/library/debian:trixie \
./scripts/install-labwc.shSecurity/operational caveat:
- Use only trusted, Debian-compatible mirror images. Untrusted images can change build inputs and package contents.
Symptoms:
- Error during
git clone,git fetch, or tag resolution in source mode
Likely Causes:
- Network issues accessing
https://github.com/labwc/labwc - No network connectivity
- GitHub repository unavailable or access blocked
Troubleshooting:
ping github.com
git ls-remote https://github.com/labwc/labwc | head -20
rm -rf /usr/local/src/labwc
sudo ./scripts/install-labwc.shSymptoms:
- Build fails with checkout, configure, or compile errors despite clean dependency install
Likely Causes:
- Previous interrupted build left incomplete files
- Source tree in inconsistent state
Troubleshooting:
sudo rm -rf /usr/local/src/labwc
sudo ./scripts/install-labwc.shSymptoms:
- Source build completes but
apt-get autoremove --purgereports errors or removes unexpected packages
Likely Causes:
- Some build dependencies already manually installed before script run
- System dependency resolver mismatch
Troubleshooting:
apt-mark showmanual | grep -E 'meson|ninja-build|libwayland|wlroots|libxkbcommon'
sudo apt-get -s autoremove
sudo apt-mark manual <package-name> # Re-mark if neededSymptoms:
- No recent logs from unit
Likely Causes:
- Service not enabled
- Script not installed or not executable
Troubleshooting:
systemctl is-enabled onboot-update.service
systemctl status onboot-update.service
ls -l /usr/local/sbin/onboot-update.shSymptoms:
- Log says update was performed less than 12 hours ago
Likely Causes:
- Debounce window active
Troubleshooting:
sudo stat /var/lib/local-updates/last-update.stamp
sudo journalctl -u onboot-update.service -n 50 --no-pagerWhen reporting an issue, include:
- Command run and full stderr output
- Current user context (
whoami,echo "$SUDO_USER") - Current branch/commit
- Relevant logs:
sudo journalctl -u onboot-update.service -n 100 --no-pager
sudo tail -n 200 /var/log/apt/history.log