Im folgenden Artikel beschreibe ich die saubere Installation der UniFi Controller Software als Service unter Windows Server 2019 mit AdoptOpenJDK.
Vorbereitung
Zur Vorbereitung alle nötigen Komponenten herunterladen:
- UniFi Network Controller 5.x.y for Windows (Link)
- AdoptOpenJDK Version 8, LTS, Hotspot (Link)
- Apache Commons Daemon (Link)
Problem
Das Setup des Controllers als Windows Service wird durch die Architektur und die Verwendung von AdoptOpenJDK 64-Bit ein wenig erschwert.
- Problem: der von UniFi Service Controller (Apache Commons Daemon Service Runner) wird mit einer Service-Config ausgeliefert, die mit der 64-Bit JVM nicht automatisch zurechtkommt.
- Problem: die UniFi Setup-Routine installiert das Verzeichnis des Controllers im Benutzerprofil des ausführenden Users! Der Support-Eintrag in der UniFi Knowledgebase ist dazu leider auch nur bedingt hilfreich: Run the Controller as Windows Service
Lösung
Die sauberste Service-Installation ist daher…
- AdoptOpenJDK installieren und im Assistenten die Option “Oracle Java Registry Keys” aktivieren.
- Die Apache Commons Daemon Binaries ins Verzeichnis
<C:\Program Files\Apache Commons Daemon\>
entpacken. - Den UniFi Controller installieren und die Grundkonfiguration durchführen.
- Den Controller stoppen und das gesamte Verzeichnis “Ubiquiti UniFi” aus dem Benutzerprofil nach
<C:\Program Files\>
verschieben. - Den UniFi Controller Service anlegen (s. Script unten)
- Die aktuellen Binaries für den Apache Commons Daemon und die Zip-Datei ins Verzeichnis
<C:\Program Files\Apache Commons Daemon>
entpacken.- Im Verzeichnis liegt das Service-Konfigurationstool “prunmgr.exe”
- Das Konfigurationstool prunmgr.exe mit dem Parameter
//ES//UniFi
aufrufen und im Reiter- “Java” die Java Virtual Machine im AdoptOpenJDK-Verzeichnis
<C:\Program Files\AdoptOpenJDK\jdk-8.0.x.y.z-hotspot\jre\bin\server\jvm.dll>
hinterlegen. (s. Screenshot unten) - “Log on” den Benutzer “Local Service” hinterlegen. (Security, damit der Controller-Prozess nicht als “Local System” läuft.)
- “Java” die Java Virtual Machine im AdoptOpenJDK-Verzeichnis
Hier noch ein paar Befehle, die den oben beschriebenen Vorgang erleichtern:
// Service installieren
cd "C:\Program Files\Ubiquiti UniFi\"
java.exe -jar lib\ace.jar installsvc
// Service deinstallieren
cd "C:\Program Files\Ubiquiti UniFi\"
java.exe -jar lib\ace.jar uninstallsvc
// Apache Daemon Service-Konfigurationstool öffnen
cd "C:\Program Files\Apache Commons Daemon\"
prinmgr.exe //ES//UniFi
Update-Installation
Das UniFi Setup erwartet für ein Update, dass die Installation im Benutzerprofil (vom eigenen User) liegt. Daher verlinken wir dort das UniFi Verzeichnis per Hardlink:
New-Item -ItemType SymbolicLink -Path "$($env:USERPROFILE)\Ubiquiti UniFi" -Target "$($env:ProgramFiles)\Ubiquiti UniFi\"