Installation der UniFi Controller Software als Service unter Windows Server 2019 mit AdoptOpenJDK.

UniFi Controller Installation


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.

  1. 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.
  2. 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…

  1. AdoptOpenJDK installieren und im Assistenten die Option “Oracle Java Registry Keys” aktivieren.
  2. Die Apache Commons Daemon Binaries ins Verzeichnis <C:\Program Files\Apache Commons Daemon\> entpacken.
  3. Den UniFi Controller installieren und die Grundkonfiguration durchführen.
  4. Den Controller stoppen und das gesamte Verzeichnis “Ubiquiti UniFi” aus dem Benutzerprofil nach <C:\Program Files\> verschieben.
  5. Den UniFi Controller Service anlegen (s. Script unten)
  6. 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”
  7. 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.)

UniFi Controller Service Eigenschaften

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\"