ZFSBootMenu is a Linux bootloader that attempts to provide an experience similar to FreeBSD's bootloader. By taking advantage of ZFS features, it allows a user to have multiple "boot environments" (with different distributions, for example), manipulate snapshots before booting, and, for the adventurous user, even bootstrap a system installation via zfs recv.
In essence, ZFSBootMenu is a small, self-contained Linux system that knows how to find other Linux kernels and initramfs images within ZFS filesystems. When a suitable kernel and initramfs are identified (either through an automatic process or direct user selection), ZFSBootMenu launches that kernel using the kexec command.
This fork includes enhanced remote SSH access support for headless servers and cloud environments:
| Change | Before (upstream) | After (this fork) |
|---|---|---|
| SSH Port | 222 | 22 (standard SSH port) |
| SSH Timeout | Indefinite wait | 30 seconds (configurable) |
| Auto-launch | Manual zfsbootmenu command |
Automatic on SSH login |
| Network Config | ip=single-dhcp (first interface only) |
ip=dhcp (all interfaces) |
- RFC 3442 DHCP Fix: Fixes dracut init loop on providers like Hetzner that use classless static routes
- Resolves
integer expression expectedandshift count out of rangeerrors - Patched
parse_option_121()function with proper argument validation
- Resolves
- SSH Connection Timeout: Wait for SSH login before auto-boot (default: 30 seconds)
- Multi-NIC Support: DHCP on all interfaces by default, or specify by MAC address
- RFC 3442 DHCP Fix: Robust handling of classless static routes (works with Hetzner and similar providers)
- Race Condition Prevention: Console waits when SSH user is connected
# Build ZBM with SSH support (uses DHCP on all interfaces)
./contrib/remote-ssh-build.sh
# Or specify a specific NIC by MAC address
NET_MAC=aa:bb:cc:dd:ee:ff ./contrib/remote-ssh-build.sh
# Override SSH timeout (default 30s, 0 = indefinite)
SSH_TIMEOUT=60 ./contrib/remote-ssh-build.sh| Parameter | Description |
|---|---|
zbm.ssh_timeout=N |
Wait N seconds for SSH login before auto-boot |
ip=dhcp |
Enable DHCP on all interfaces (default) |
ifname=eth0:<mac> ip=eth0:dhcp |
Use specific NIC by MAC address |
Use contrib/zbm-repack.sh to add SSH keys to existing ZBM EFI or BIOS images:
sudo ./contrib/zbm-repack.sh -i vmlinuz.EFI -k ~/.ssh/authorized_keysCome chat about ZFSBootMenu in #zfsbootmenu on libera.chat
