Windows Server
Run 3AM on Windows Server 2022 or 2025, through a Linux VM on Hyper-V or through WSL2.
3AM ships as Linux containers. On Windows Server you run them inside Linux, in one of two ways:
| Option | Best for | Why |
|---|---|---|
| A Linux VM on Hyper-V | Production (recommended) | A normal Linux server: the most predictable networking, reboots and support |
| WSL2 | Smaller installs, or where VMs are hard to get | No separate VM to manage, but networking and start-at-boot need the extra steps below |
Status
These steps are documented but not yet part of 3AM's certification runs. The Linux VM path is the same as Linux once the VM exists.
Option A: a Linux VM on Hyper-V (recommended)
Run these in PowerShell as Administrator.
Enable Hyper-V
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -RestartCreate the VM
Use your standard Linux image (RHEL, Rocky, Ubuntu…). For example, with 4 vCPUs, 8 GB of memory and a 60 GB disk:
New-VM -Name 3am -MemoryStartupBytes 8GB -Generation 2 -NewVHDPath "D:\VMs\3am.vhdx" -NewVHDSizeBytes 60GB -SwitchName "External"
Set-VMProcessor -VMName 3am -Count 4
Set-VMFirmware -VMName 3am -EnableSecureBoot On -SecureBootTemplate MicrosoftUEFICertificateAuthority
Add-VMDvdDrive -VMName 3am -Path "D:\ISO\rhel-9.iso"
Start-VM -Name 3am-SwitchName is a Hyper-V virtual switch connected to your network (Get-VMSwitch lists them).
Verify the bundle on Windows, then copy it to the VM
Get-FileHash .\3am-0.1.0.tar -Algorithm SHA256
scp .\3am-0.1.0.tar you@3am-vm:~Compare the hash with the one 3AM sent you. The installer also verifies every file inside the bundle.
Install as on Linux
Continue with Linux inside the VM.
Option B: WSL2
Requires Windows Server 2022 (with the latest cumulative update) or Windows Server 2025. Run in PowerShell as Administrator.
Install WSL2 with Ubuntu
wsl --install -d Ubuntu-24.04
# restart if asked, then:
wsl --set-default-version 2
wsl -l -vGive WSL enough memory and keep it running
Create C:\Users\<you>\.wslconfig:
[wsl2]
memory=8GB
processors=4
# Windows Server 2025: share the host's network, so other machines can reach the console directly
networkingMode=mirroredThen restart WSL: wsl --shutdown.
Install Podman inside Ubuntu and run the installer
Copy-Item .\3am-0.1.0.tar \\wsl$\Ubuntu-24.04\home\<you>\
wsl -d Ubuntu-24.04Inside Ubuntu:
sudo apt-get update && sudo apt-get install -y podman
cd ~ && tar -xf 3am-0.1.0.tar && cd 3am-0.1.0
./install.sh --bind 0.0.0.0WSL has no /etc/machine-id by default, so create one before installing. It becomes this install's licence fingerprint:
sudo systemd-machine-id-setup || (cat /proc/sys/kernel/random/uuid | tr -d - | sudo tee /etc/machine-id)Start 3AM when the server boots
WSL starts only when something uses it. Create a scheduled task that starts it at boot:
$action = New-ScheduledTaskAction -Execute "wsl.exe" -Argument "-d Ubuntu-24.04 -u root -- podman start 3am-model 3am-core"
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName "3AM" -Action $action -Trigger $trigger -User "SYSTEM" -RunLevel Highest(With rootless Podman, use your user instead of root, and set the task to run as that user.)
Reach the console from other machines
With networkingMode=mirrored (Windows Server 2025), the console is on the server's own address. On Windows Server
2022, forward the port from Windows to WSL and allow it through the firewall:
$wslIp = (wsl -d Ubuntu-24.04 hostname -I).Trim().Split(" ")[0]
netsh interface portproxy add v4tov4 listenport=8700 listenaddress=0.0.0.0 connectport=8700 connectaddress=$wslIp
New-NetFirewallRule -DisplayName "3AM console" -Direction Inbound -Protocol TCP -LocalPort 8700 -Action AllowThe WSL address can change after a restart. Re-run the netsh line, or add it to the scheduled task.
Better still, put your reverse proxy with TLS in front.
Next
Install the licence, then connect your tools in the setup wizard.