2.6 KiB
2.6 KiB
Reticulum-Go MicroVM
Minimal Firecracker microVM setup for running Reticulum-Go.
Prerequisites
- Firecracker binary installed
- Go compiler
- Root privileges (for network setup and KVM access)
- Linux host system with KVM support
- Access to
/dev/kvm
Important: Nested Virtualization
If running inside a QEMU/KVM VM, nested virtualization must be enabled:
-
Host QEMU configuration: Start your QEMU VM with nested KVM:
qemu-system-x86_64 -cpu host -enable-kvm -machine q35,accel=kvm ... -
Enable nested KVM on host (if not already):
# Check if nested is enabled cat /sys/module/kvm_intel/parameters/nested # Intel cat /sys/module/kvm_amd/parameters/nested # AMD # Enable nested (Intel) echo "options kvm_intel nested=1" | sudo tee /etc/modprobe.d/kvm.conf # Enable nested (AMD) echo "options kvm_amd nested=1" | sudo tee /etc/modprobe.d/kvm.conf # Reboot host -
Inside the VM, check if
/dev/kvmexists:ls -l /dev/kvm
Alternative: If nested virtualization isn't available, consider:
- Running Firecracker directly on the host machine
- Using QEMU directly instead of Firecracker
- Using Docker/LXC containers instead
KVM Setup
Ensure your user has access to /dev/kvm:
# Check if /dev/kvm exists
ls -l /dev/kvm
# Add your user to the kvm group (recommended)
sudo usermod -aG kvm $USER
# Or set ACL (alternative)
sudo setfacl -m u:$USER:rw /dev/kvm
# Log out and back in for group changes to take effect
Setup
Run the setup script:
./setup.sh
This will:
- Check for Firecracker installation
- Download vmlinux.bin kernel
- Build Reticulum-Go binary
- Create rootfs.ext4 disk image
- Generate firecracker-config.json
Running
- Create tap interface:
sudo ip tuntap add tap0 mode tap
sudo ip addr add 172.16.0.1/24 dev tap0
sudo ip link set tap0 up
- Enable IP forwarding:
sudo sysctl -w net.ipv4.ip_forward=1
- Start Firecracker:
# Clean up any old socket files first
rm -f /tmp/firecracker.sock microvm/vsock.sock
firecracker --api-sock /tmp/firecracker.sock --config-file firecracker-config.json
- Connect to console (in another terminal):
firecracker --api-sock /tmp/firecracker.sock
Configuration
- CPU: 1 vCPU
- Memory: 128 MiB
- Network: tap0 interface
- Disk: rootfs.ext4 (100MB)
Modify firecracker-config.json to adjust resources.
Files
vmlinux.bin- Linux kernelrootfs.ext4- Root filesystem with binaryfirecracker-config.json- Firecracker configurationreticulum-go- Compiled binary