ANetBBS on Windows
ANetBBS itself is pure Python with no Windows-specific code anywhere —
install.sh, the systemd units, and every path in the codebase assume
a Linux userspace. Rather than maintain a second, parallel native-
Windows install/service-management path, the supported route on
Windows is to give ANetBBS a real Linux environment to run in. Two
ways to do that, both well-trodden and both free:
- WSL2 + Ubuntu — a real Linux kernel running alongside Windows.
install.shruns completely unmodified inside it, exactly like a
native Ubuntu box. This is the closer-to-native option and the one
to reach for if you want systemd units,ufw, and the full
install.shwizard experience. - Docker Desktop — if you'd rather not manage a Linux install at
all. Seedocs/22-containers.mdfor the full
Docker walkthrough; this page only covers what's different running
it under Docker Desktop specifically rather than Docker-on-Linux.
A transparency note on how tested this page is: everything below
is written from how WSL2/Docker Desktop are documented to behave and
how the existing Linux install path already works — this sandbox has
no way to run an actual Windows box, so the WSL2 path in particular
hasn't been confirmed end-to-end against real WSL2 the way the Docker
single-container path has against a real Linux Docker daemon (see the
transparency note at the top of docs/22-containers.md). If you try
this on a real Windows machine and something doesn't match what's
written here, please report it.
Option 1 — WSL2 + Ubuntu
Install WSL2
From an elevated (Administrator) PowerShell:
wsl --install -d Ubuntu-24.04
This enables the WSL2 feature, downloads Ubuntu, and asks you to set a
Unix username/password on first launch. Requires Windows 10 version
2004+ or Windows 11 — recent installs already meet this.
Run the normal Linux install inside it
Open the "Ubuntu" app from the Start menu — you're now at a real Bash
prompt in a real (if virtualized) Linux kernel. From here, everything
in docs/INSTALL.md applies exactly as written: same
apt install prerequisites, same install.sh, same systemd units
(WSL2 supports systemd as of Windows 11 22H2 / recent Windows 10
updates — Ubuntu 24.04's default WSL image has it enabled already; if
systemctl doesn't work, add systemd=true under [boot] in
/etc/wsl.conf and run wsl --shutdown from PowerShell, then reopen
Ubuntu).
tar xzf ANetBBS-vX.Y.Z.tar.gz
cd ANetBBS-vX.Y.Z
sudo bash install.sh
Pick test mode when the wizard asks for install mode unless you've
actually got a domain pointed at this machine — WSL2's networking sits
behind Windows' own NAT, so treat it the same as any other NAT/behind-
a-router install (docs/01-installing.md's test/behind mode
guidance applies).
Reaching it from Windows and the rest of your network
WSL2 gets its own internal IP, separate from Windows' — localhost
from a Windows browser or terminal client generally reaches WSL2's
services automatically on recent WSL2 builds (localhost forwarding),
so telnet localhost 2233 / http://localhost:8080 from Windows
itself should just work. Reaching it from a different machine on
your LAN (or the internet) needs a port-forward from Windows to the
WSL2 VM's IP, since WSL2's networking is NAT'd behind Windows the same
way a VM's would be:
# Find WSL2's current internal IP (changes on reboot unless pinned)
wsl hostname -I
# Forward each port you want reachable from outside Windows
netsh interface portproxy add v4tov4 listenport=2233 listenaddress=0.0.0.0 connectport=2233 connectaddress=<wsl-ip>
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=<wsl-ip>
Repeat per port (telnet 2233, SSH 2234, web 5000/8080, etc. — see
docs/PORTS.md for the full list), and open the matching
Windows Firewall rule. This mirrors exactly what a router's port-
forward table does for a normal home-network install — WSL2 is just
one more layer of NAT to punch through.
Filesystem performance note
Keep the ANetBBS install directory (and data/) inside WSL2's own
filesystem (~/anetbbs or similar, under /home/<user>/), not on a
Windows drive mounted at /mnt/c/.... SQLite's frequent small writes
are notably slower across the WSL2↔Windows filesystem boundary — same
underlying reason the Pi install guide recommends an SSD over a slow
SD card for data/ (see
docs/INSTALL-PI.md).
Option 2 — Docker Desktop
Follow docs/22-containers.md — the build steps,
docker run/docker compose commands, and troubleshooting are
identical. Three things differ specifically under Docker Desktop on
Windows:
- Enable the WSL2 backend. Docker Desktop → Settings → General →
"Use the WSL 2 based engine" — this is the default on current
Docker Desktop versions, but worth confirming; the older Hyper-V
backend has real networking/volume-mount quirks that WSL2 mode
avoids. - Bind-mount paths use Windows drive syntax if you're running
docker/docker composefrom PowerShell rather than from inside a
WSL2 shell — e.g.-v C:\Users\you\anetbbs-data:/app/datainstead
of a Linux-style path. Simplest fix: run thedocker compose
commands from inside your WSL2 Ubuntu shell instead (Docker Desktop
integrates with WSL2 distros automatically, sharing the same Docker
engine) — then every path indocs/22-containers.mdworks exactly
as written, no translation needed. - Privileged low ports (18, 11, 79) for MSP/SYSTAT/Finger need the
samedocker-compose.ymlcapability grantsdocs/22-containers.md
already documents — nothing Windows-specific there, just easy to
miss if you're skimming.
Which option to pick
WSL2 if you want the full sysop experience (systemd units, anetbbs-
cfg/anetbbs-monitor on the console, ufw, the complete
install.sh wizard) — closest to how bbs.a-net.fyi itself actually
runs. Docker Desktop if you'd rather not manage a Linux environment at
all and are fine with container-level service management instead of
systemd. Both are free, both are well-supported upstream (WSL2 by
Microsoft, Docker Desktop by Docker Inc.), and both point at the exact
same ANetBBS codebase with no fork or Windows-specific branch to keep
in sync.