nova

Other

Running a donor on Windows (WSL2)

WSL2 works as a donor host. WSL1 does not. There are four things to get right, and one expectation to set.

Start here, then follow the donor quickstart inside your WSL2 shell.


The expectation first

When Windows sleeps, your node is offline. WSL2 stops with the host. A laptop that closes at night is a donor that disappears every night.

That is not fatal — Nova tolerates donors coming and going — but a node that is down more than it is up gets deprioritised, and repeated long absences make your operator move your data elsewhere. If this machine sleeps, tell your operator so they can plan around it, or use a machine that stays on.


1. Confirm you are on WSL2

wsl -l -v

Expected: VERSION reads 2.

If it reads 1:

wsl --set-version <distro-name> 2

WSL1 cannot work — it lacks the real Linux kernel that the overlay network's TUN device needs.


2. Enable systemd

Inside WSL, edit /etc/wsl.conf:

[boot]
systemd=true

Then from PowerShell:

wsl --shutdown

Reopen your WSL shell. Verify:

systemctl is-system-running

Anything other than offline is fine — running and degraded both work.

Without systemd, Docker will not stay running unattended.


3. Confirm the TUN device

ls -l /dev/net/tun

Expected: crw-rw-rw- 1 root root 10, 200 ... /dev/net/tun

If missing:

sudo modprobe tun
echo tun | sudo tee -a /etc/modules-load.d/modules.conf

The overlay network cannot start without it.


4. Keep storage on the Linux filesystem

Put your donor folder somewhere under your WSL home directory:

mkdir -p ~/nova-donor

Do not use /mnt/c or any other Windows drive. Cross-filesystem access is dramatically slower and does not honour Linux file permissions, so your private keys would not be protected and the storage layer would crawl.

Leave storage_dir in node.yaml at its default. It refers to a Docker volume inside the Linux filesystem, which is what you want.


5. Make Docker persistent

Docker Desktop with the WSL2 backend is the simplest option — enable integration for your distro in Settings → Resources → WSL Integration, and turn on Start Docker Desktop when you log in.

If you installed Docker inside WSL instead:

sudo systemctl enable --now docker

Verify it survives a restart:

wsl --shutdown

then reopen the shell and run docker ps. It should work without you starting anything.


Then

Follow the donor quickstart from step 1, inside your WSL2 shell.


Platform support

Platform Status Notes
Linux (systemd, x86-64 / arm64) Supported The primary target.
WSL2 on Windows Supported This page. Sleep means offline.
WSL1 Not supported No real kernel; no TUN device.
macOS Not supported Docker Desktop's VM does not expose TUN in the way the overlay requires.
Raspberry Pi (64-bit, arm64) Works Use decent storage — SD cards wear out under constant writes.
Container-only hosts (LXC, some VPS) Depends Needs /dev/net/tun and NET_ADMIN. Many unprivileged LXC containers deny both. Check before committing.

When something is wrong

Node will not start, overlay errors: re-check steps 1 and 3. Nearly every WSL2 problem is WSL1 or a missing TUN device.

Everything is very slow: your folder is probably on /mnt/c. Move it under your WSL home directory.

Node vanishes overnight: Windows is sleeping. Change the power settings, or accept it and tell your operator.

Source: docs/platforms/wsl2-donor.md