Troubleshooting¶
Daemon won't start¶
KVM not available
Ensure virtualization is enabled in BIOS and /dev/kvm exists:
If /dev/kvm exists but you can't access it:
Machine won't boot¶
Kernel or rootfs missing
Run sistemo install to download Firecracker and the guest kernel. Verify they exist:
Not enough resources
Try reducing memory or storage:
Check the logs
Shows the Firecracker log with boot output and errors.
Terminal doesn't work¶
Permission denied (publickey)
The machine image must have openssh-server installed. If you built the image with sistemo image build, openssh-server is auto-installed. If you're using a pre-existing rootfs file, make sure it has openssh-server.
Try redeploying the machine:
Sistemo always injects its SSH key and configures sshd at deploy time.
Browser tab opens but shows nothing
The terminal connects via WebSocket. Check that the daemon is running and the machine is in running status:
Exec issues¶
Flags like -h show help instead of running in machine
Upgrade to the latest binary. Older versions incorrectly interpreted flags like -h as sistemo flags. The current version passes all arguments after the machine name to SSH:
Build issues¶
sistemo image build hangs at 'Exporting filesystem'
On low-memory machines (512 MB), Docker export can be slow. Wait a few minutes. If it still hangs:
- Check available disk space:
df -h - Reduce rootfs size:
ROOTFS_MB=1024 sudo sistemo image build myimage - Build on a larger machine and copy the
.rootfs.ext4file over
sistemo image build shows 'Warning: could not auto-install openssh-server'
The auto-install uses chroot and needs network access (DNS). Make sure:
- The host has internet access
/etc/resolv.confon the host has valid DNS servers- The Docker image uses a supported package manager (apt, apk, dnf, yum, pacman)
As a fallback, install openssh-server in your Dockerfile before building.
Networking issues¶
Machine subnet conflicts with VPN or other network
The default machine subnet is 10.200.0.0/16. If it conflicts with your VPN, Kubernetes, or other network, change it:
Restart the daemon and redeploy machines after changing the subnet.
Port expose doesn't work from localhost
Run sudo nft list ruleset and check for duplicate DNAT rules. If you see stale rules from previous test runs, clean them up:
sudo nft delete rule ip sistemo prerouting handle <handle>
sudo nft delete rule ip sistemo output handle <handle>
Then restart the daemon. Port rules are restored from the database on startup.
Machines can't reach the internet
Check that the bridge exists and has the right IP:
Check that MASQUERADE and FORWARD rules exist:
If rules are missing, restart the daemon — it recreates them on startup.
Named network issues¶
Machines on different networks can still reach each other
Check that the SISTEMO-ISOLATION chain exists and has rules:
If empty or missing, restart the daemon and recreate networks:
Machine on named network can't reach the internet
Verify the bridge exists and has an IP:
Check MASQUERADE rule exists for the network's subnet:
Config validation error on startup
The daemon validates all config values. Fix the value shown in the error message. Run sistemo config to see the effective configuration. See Configuration for all validation rules.
Dashboard¶
Forgot admin password
Reset it from the CLI:
This prompts for a new password interactively.
WebSocket not connecting (terminal shows blank screen)
The in-browser terminal uses a WebSocket connection to the daemon. Check:
- The daemon is running:
curl -s http://localhost:7777/health - The machine is in
runningstatus:sistemo machine status <name> - If behind a reverse proxy, ensure
UpgradeandConnectionheaders are forwarded (see Dashboard — Remote access)
Can't access dashboard remotely
The daemon listens on localhost only by default. To expose it:
- Set
HOST_API_KEYas an environment variable (not in config.yml) - Put a reverse proxy (nginx, Caddy) with TLS in front of port 7777
- Forward WebSocket headers for the terminal to work
See Dashboard — Remote access for a full nginx example.
Volumes¶
Volume busy — cannot delete or detach
A volume must be detached before it can be deleted. If the volume shows as attached, stop the machine first, then detach:
Cannot attach volume — machine must be stopped
Volumes can only be attached or detached while the machine is stopped:
Volume not visible inside the machine
After attaching a data volume, it appears as an additional block device inside the machine (e.g. /dev/vdb). You may need to format and mount it on first use:
sistemo machine ssh <vm-name>
# Inside the machine:
mkfs.ext4 /dev/vdb
mkdir -p /mnt/data
mount /dev/vdb /mnt/data
Add an entry to /etc/fstab inside the machine for automatic mounting on boot.
Diagnostics¶
Run sistemo doctor as the first step when anything goes wrong:
It checks KVM, Firecracker, kernel, SSH keys, bridge, nftables, daemon, disk space, database, and API key — with actionable fix suggestions for each failure.
Check recent operations with sistemo history:
Health check¶
Should return 200. If not, the daemon may not be running.