Install on Windows
This page installs Mugnsoft components as Windows services. One PowerShell script does everything for a component: download, signature check, configuration, firewall rule, service installation, registration with the Webserver and start. The manual steps it automates are listed below it.
Before you start
- Windows 10 / 11 or Windows Server 2016 and later, 64-bit, and an elevated PowerShell (right-click → Run as administrator).
- To verify the packages:
gpg, which comes with Git for Windows or Gpg4win. The script finds either one. - The network flows below open in your firewalls (the script adds the Windows Firewall rule of the host it runs on). Every component listens on its own API port, and the Webserver connects back to it:
| From | To | Port (default) | Why |
|---|---|---|---|
| Users’ browsers | Webserver | TCP 9090 (PortWEB) |
Web UI |
| Monitors, Integrators, Sentinel Agents | Webserver | TCP 8050 (PortAPI) |
Registration and data push |
| Webserver | each Monitor / Integrator / Sentinel Agent | its port (packages: monitor 8072, integrator 8053, sentinel 8079) |
The Webserver drives the component |
- Install the Webserver first: every other component needs two values it produces.
- One component of each kind per host: the service names are fixed (
MugnsoftWebserver,MugnsoftMonitor,MugnsoftIntegrator,MugnsoftDiscoveryAgent,MugnsoftWebserverFront). - Sentinel Agent: install the Npcap runtime if the host must report network bandwidth (see requirements).
Your values
The commands on this page use these example values. Replace them with yours; everything else is copied as-is.
| Value | Where it comes from | Example (replace it!) |
|---|---|---|
| Webserver address | IP or DNS name of the Webserver host, as the other hosts reach it | 10.0.0.5 |
| Webserver API port | PortAPI of webserver.json (default) |
8050 |
_sharedInternal |
Printed at the end of the Webserver installation (step 1), also in webserver.json |
3f9c...e1 (64 hex characters) |
| License file | license_MNS.dat sent by Mugnsoft, one per Webserver and per Integrator, bound to its host |
.\license_MNS.dat |
| Location | Free text shown on the Webserver (monitor, sentinel) | Paris |
Option A — Script (recommended)
In an elevated PowerShell, download mugnsoft-install.ps1 onto each host:
Invoke-WebRequest https://doc.mugnsoft.com/materials/mugnsoft-install.ps1 -OutFile mugnsoft-install.ps1 -UseBasicParsing
1. Webserver (first). Put your license_MNS.dat next to the script, then:
powershell -ExecutionPolicy Bypass -File .\mugnsoft-install.ps1 webserver -License .\license_MNS.dat
The end of its output gives what the other hosts need, for example:
Webserver installed in C:\Mugnsoft\webserver
Web UI: https://<this host>:9090/ (admin / admin, change it at first login)
API: <this host>:8050 -> the -Webserver value for the components
_sharedInternal (pass it to every component as -SharedInternal):
3f9c...e1
2. Monitor probe, Integrator, Sentinel Agent, each on its host, with your Webserver address and _sharedInternal:
# monitor probe
powershell -ExecutionPolicy Bypass -File .\mugnsoft-install.ps1 monitor -Webserver 10.0.0.5:8050 -SharedInternal 3f9c...e1 -Location Paris
# Integrator (it has its own license file)
powershell -ExecutionPolicy Bypass -File .\mugnsoft-install.ps1 integrator -Webserver 10.0.0.5:8050 -SharedInternal 3f9c...e1 -License .\license_MNS.dat
# Sentinel Agent
powershell -ExecutionPolicy Bypass -File .\mugnsoft-install.ps1 sentinel -Webserver 10.0.0.5:8050 -SharedInternal 3f9c...e1 -Location Paris
Each run ends with ... installed ... and registered with 10.0.0.5:8050. Then enable the component.
What the script does, in order, stopping at the first problem with a message saying what to fix:
- Checks the arguments, that it runs elevated and that the install folder does not exist yet (it never overwrites an installation).
- Downloads
mugnsoft-<component>-<version>.windows-amd64.zipand its.sigfromhttps://mugnsoft.com/bin/<version>/, and verifies the signature with Mugnsoft’s public GPG key (in a throw-away keyring). - Extracts it to
C:\Mugnsoft\<component folder>. - Writes the values into the component’s
.jsonfile (and copies the license file). - Adds an inbound Windows Firewall rule
Mugnsoft <component>for the component’s port(s). - Runs
<component>.exe install: a monitor, Integrator or Sentinel Agent registers with the Webserver at this point, and the service is only created if that succeeds. - Starts the service.
| Parameter | Default | Use |
|---|---|---|
-Version <x.y.z> |
4.2.0 |
Release to install |
-Dir <path> |
C:\Mugnsoft |
Parent folder of the installation |
-Package <file.zip> |
download | Install a package you already have (its .sig must sit next to it) |
-NoVerify |
off | Skip the signature check (not recommended) |
-Name <name> |
<component>-<computer name> |
Component name on the Webserver: letters, digits, hyphens |
-Port <port> |
the package’s | Component API port |
-Advertise <ip> |
auto-detected | Monitor only: the IP the Webserver must dial to reach the probe (see Check the address) |
-WebserverUrl <url> |
https://<webserver host>:9090 |
Integrator only: Web UI link used in notifications |
-ApiPort, -WebPort |
8050, 9090 |
Webserver only |
-FrontPki <dir> |
— | Webserver-Front only, see Install the Webserver-Front |
-NoFirewall |
off | Do not add the Windows Firewall rule |
Get-Help .\mugnsoft-install.ps1 -Detailed prints the same list.
<#
.SYNOPSIS
Download, verify, configure, install and start one Mugnsoft component as a
Windows service, in one command. Run it from an elevated PowerShell.
.EXAMPLE
.\mugnsoft-install.ps1 webserver -License .\license_MNS.dat
.EXAMPLE
.\mugnsoft-install.ps1 monitor -Webserver 10.0.0.5:8050 -SharedInternal 3f9c...e1 -Location Paris
.PARAMETER Component
webserver, monitor, integrator, sentinel or webserver-front.
.PARAMETER Version
Release to install (default 4.2.0).
.PARAMETER Dir
Parent folder (default C:\Mugnsoft); the component goes in <Dir>\<package folder>.
.PARAMETER Package
Install this package (.zip) instead of downloading it.
.PARAMETER NoVerify
Skip the GPG signature check (not recommended).
.PARAMETER License
webserver and integrator: the license_MNS.dat received from Mugnsoft.
.PARAMETER ApiPort
webserver: API port (default 8050).
.PARAMETER WebPort
webserver: web UI port (default 9090).
.PARAMETER Webserver
monitor, integrator, sentinel: the Webserver API address, host:port (e.g. 10.0.0.5:8050).
.PARAMETER SharedInternal
monitor, integrator, sentinel: the "_sharedInternal" value of the Webserver's webserver.json.
.PARAMETER Name
Component name (default <component>-<computer name>).
.PARAMETER Port
Component API port (default: the package's).
.PARAMETER Location
Location shown on the Webserver (monitor, sentinel).
.PARAMETER Advertise
monitor: IP address the Webserver must use to reach this probe (default: auto-detected).
.PARAMETER WebserverUrl
integrator: Webserver web UI URL used in notifications (default https://<webserver host>:9090).
.PARAMETER FrontPki
webserver-front: the front\ folder produced by mugnsoft-front-pki.sh.
.PARAMETER NoFirewall
Do not add the Windows Firewall rule opening the component's port(s).
#>
[CmdletBinding()]
param(
[Parameter(Mandatory = $true, Position = 0)]
[ValidateSet("webserver", "monitor", "integrator", "sentinel", "webserver-front")]
[string]$Component,
[string]$Version = "4.2.0",
[string]$Dir = "C:\Mugnsoft",
[string]$Package = "",
[switch]$NoVerify,
[string]$License = "",
[string]$ApiPort = "",
[string]$WebPort = "",
[string]$Webserver = "",
[string]$SharedInternal = "",
[string]$Name = "",
[string]$Port = "",
[string]$Location = "",
[string]$Advertise = "",
[string]$WebserverUrl = "",
[string]$FrontPki = "",
[switch]$NoFirewall
)
$ErrorActionPreference = "Stop"
$ProgressPreference = "SilentlyContinue" # Invoke-WebRequest is 10x faster without the progress bar
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$BaseUrl = "https://mugnsoft.com/bin"
function Fail($msg) { Write-Host "ERROR: $msg" -ForegroundColor Red; exit 1 }
function Info($msg) { Write-Host "==> $msg" -ForegroundColor Cyan }
# Run a native program and capture stdout+stderr. Windows PowerShell turns every
# stderr line into a terminating error under ErrorActionPreference=Stop, so relax
# it for the call only.
function Native([string]$exe, [string[]]$a) {
$prev = $ErrorActionPreference; $ErrorActionPreference = "Continue"
try { $o = & $exe @a 2>&1 | ForEach-Object { "$_" }; $code = $LASTEXITCODE } finally { $ErrorActionPreference = $prev }
return @{ Out = ($o -join "`n"); Code = $code }
}
# component -> package folder and binary
$pkg = @{ "webserver" = "webserver"; "webserver-front" = "webserver-front"; "monitor" = "monitor";
"integrator" = "integrator"; "sentinel" = "discovery_agent" }[$Component]
$bin = "$pkg.exe"; $conf = "$pkg.json"
$target = Join-Path $Dir $pkg
# ---- checks, before anything is written -------------------------------------
$admin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
if (-not $admin) { Fail "run this script from an elevated PowerShell (Run as administrator)" }
foreach ($p in @(@("-ApiPort", $ApiPort), @("-WebPort", $WebPort), @("-Port", $Port))) {
if ($p[1] -and -not ($p[1] -match '^\d+$' -and [int]$p[1] -ge 1 -and [int]$p[1] -le 65535)) { Fail "$($p[0]) must be a port number, got '$($p[1])'" }
}
foreach ($p in @(@("-Location", $Location), @("-Advertise", $Advertise), @("-WebserverUrl", $WebserverUrl))) {
if ($p[1] -notmatch '^[A-Za-z0-9._:/@+=, -]*$') { Fail "$($p[0]) contains characters that are not allowed: '$($p[1])'" }
}
if ($Component -in @("webserver", "integrator")) {
if (-not $License) { Fail "-License <license_MNS.dat> is required for the $Component" }
if (-not (Test-Path $License -PathType Leaf)) { Fail "license file not found: $License" }
}
if ($Component -in @("monitor", "integrator", "sentinel")) {
if (-not $Webserver) { Fail "-Webserver <host:port> is required (the Webserver API address)" }
if ($Webserver -notmatch '^[A-Za-z0-9.-]+:\d+$') { Fail "-Webserver must look like host:port, e.g. 10.0.0.5:8050" }
if (-not $SharedInternal) { Fail "-SharedInternal is required: copy `"_sharedInternal`" from the Webserver's webserver.json" }
if ($SharedInternal -notmatch '^[A-Za-z0-9._~!#%^*+=-]+$') { Fail "-SharedInternal holds unexpected characters" }
if (-not $Name) { $Name = "$Component-$($env:COMPUTERNAME.ToLower())" }
if ($Name -notmatch '^[A-Za-z0-9-]+$') { Fail "-Name may hold letters, digits and hyphens only: '$Name'" }
}
if ($Component -eq "webserver-front") {
if (-not $FrontPki) { Fail "-FrontPki <dir> is required: the front\ folder made by mugnsoft-front-pki.sh" }
if (-not ((Test-Path "$FrontPki\config\ssl\certificates\webserver.pem") -and (Test-Path "$FrontPki\webserver-front.json"))) {
Fail "$FrontPki does not look like the front\ folder of mugnsoft-front-pki.sh" }
}
if (Test-Path $target) { Fail "$target already exists: this script installs, it does not upgrade (see the Upgrade section of the docs)" }
$work = Join-Path $env:TEMP ("mugnsoft-install-" + [guid]::NewGuid().ToString("N"))
New-Item -ItemType Directory $work | Out-Null
try {
# ---- 1. get the package -----------------------------------------------------
$file = "mugnsoft-$pkg-$Version.windows-amd64.zip"
if (-not $Package) {
Info "Downloading $file"
try { Invoke-WebRequest "$BaseUrl/$Version/$file" -OutFile "$work\$file" -UseBasicParsing } catch { Fail "download failed: $BaseUrl/$Version/$file" }
if (-not $NoVerify) { try { Invoke-WebRequest "$BaseUrl/$Version/$file.sig" -OutFile "$work\$file.sig" -UseBasicParsing } catch { Fail "signature download failed" } }
$Package = "$work\$file"
} else {
if (-not (Test-Path $Package -PathType Leaf)) { Fail "package not found: $Package" }
$Package = (Resolve-Path $Package).Path
if (-not $NoVerify -and -not (Test-Path "$Package.sig")) { Fail "no $Package.sig next to the package: download it too, or pass -NoVerify" }
}
# ---- 2. verify its signature (gpg from PATH, Git for Windows or Gpg4win) ------
if (-not $NoVerify) {
$gpg = (Get-Command gpg -ErrorAction SilentlyContinue).Source
$git = (Get-Command git -ErrorAction SilentlyContinue).Source # Git for Windows ships gpg in usr\bin
$fromGit = if ($git) { Join-Path (Split-Path (Split-Path $git)) "usr\bin\gpg.exe" } else { "" }
foreach ($c in @($fromGit, "$env:ProgramFiles\Git\usr\bin\gpg.exe", "${env:ProgramFiles(x86)}\GnuPG\bin\gpg.exe", "$env:ProgramFiles\GnuPG\bin\gpg.exe")) {
if (-not $gpg -and $c -and (Test-Path $c)) { $gpg = $c }
}
if (-not $gpg) { Fail "gpg not found: install Git for Windows or Gpg4win to verify the package (or pass -NoVerify)" }
Info "Verifying the GPG signature"
try { Invoke-WebRequest "$BaseUrl/Mugnsoft_public.key" -OutFile "$work\Mugnsoft_public.key" -UseBasicParsing } catch { Fail "could not download Mugnsoft_public.key" }
# a throw-away keyring, given as a RELATIVE --homedir: Git's (MSYS) gpg misreads
# an absolute Windows path there, Gpg4win accepts both
Push-Location $work
New-Item -ItemType Directory gnupg | Out-Null
Native $gpg @("--homedir", "gnupg", "--batch", "--quiet", "--import", "$work\Mugnsoft_public.key") | Out-Null
$sig = if (Test-Path "$Package.sig") { "$Package.sig" } else { "$work\$file.sig" }
$ok = (Native $gpg @("--homedir", "gnupg", "--batch", "--verify", $sig, $Package)).Code -eq 0
Pop-Location
if (-not $ok) { Fail "SIGNATURE CHECK FAILED for $Package : do not install it" }
Info "Signature OK"
} else {
Write-Host "WARNING: signature not verified (-NoVerify)" -ForegroundColor Yellow
}
# ---- 3. extract ---------------------------------------------------------------
Info "Extracting to $target"
New-Item -ItemType Directory -Force $Dir | Out-Null
Expand-Archive $Package -DestinationPath "$work\x"
if (-not (Test-Path "$work\x\$pkg")) { Fail "unexpected package layout: no $pkg\ folder inside" }
Move-Item "$work\x\$pkg" $target
Set-Location $target
if (-not (Test-Path $conf)) { Fail "$conf missing from the package" }
# set "key": "value" in a flat JSON file, adding the key when it is absent;
# written back as UTF-8 WITHOUT BOM (a BOM makes the JSON unreadable to the component)
$script:text = [IO.File]::ReadAllText("$target\$conf")
function SetKey($key, $val) {
$re = '("' + [regex]::Escape($key) + '"\s*:\s*)"[^"]*"'
if ($script:text -match $re) { $script:text = [regex]::Replace($script:text, $re, { param($m) $m.Groups[1].Value + '"' + $val + '"' }) }
else { $script:text = ([regex]'\{').Replace($script:text, "{`r`n `"$key`": `"$val`",", 1) }
}
# ---- 4. configure ---------------------------------------------------------------
Info "Configuring $conf"
$ports = @()
switch ($Component) {
"webserver" {
Copy-Item $License "$target\license_MNS.dat"
if ($ApiPort) { SetKey "PortAPI" $ApiPort }
if ($WebPort) { SetKey "PortWEB" $WebPort }
}
"webserver-front" { Copy-Item -Recurse -Force "$FrontPki\*" $target; $script:text = [IO.File]::ReadAllText("$target\$conf") }
default {
SetKey "_sharedInternal" $SharedInternal
SetKey "webserver" $Webserver
SetKey "name" $Name
SetKey "description" "Mugnsoft $Component on $env:COMPUTERNAME"
if ($Port) { SetKey "port" $Port }
if ($Component -ne "integrator") { SetKey "location" $Location }
if ($Component -eq "monitor" -and $Advertise) { SetKey "ip" $Advertise }
if ($Component -eq "integrator") {
Copy-Item $License "$target\license_MNS.dat"
SetKey "os" "windows"
if (-not $WebserverUrl) { $WebserverUrl = "https://" + $Webserver.Split(":")[0] + ":9090" }
SetKey "webserverUrl" $WebserverUrl
}
}
}
[IO.File]::WriteAllText("$target\$conf", $script:text, (New-Object Text.UTF8Encoding $false))
$cfg = $script:text | ConvertFrom-Json
if ($Component -in @("webserver", "webserver-front")) { $ports = @($cfg.PortAPI, $cfg.PortWEB) } else { $ports = @($cfg.port) }
# ---- 5. open the port(s) in Windows Firewall --------------------------------------
if (-not $NoFirewall) {
$rule = "Mugnsoft $Component"
if (-not (Get-NetFirewallRule -DisplayName $rule -ErrorAction SilentlyContinue)) {
New-NetFirewallRule -DisplayName $rule -Direction Inbound -Protocol TCP -LocalPort $ports -Action Allow | Out-Null
Info "Firewall: inbound TCP $($ports -join ', ') allowed (rule '$rule')"
}
}
# ---- 6. install the service (components register with the Webserver here) ------
Info "Installing the service"
$out = (Native "$target\$bin" @("install")).Out
$out -split "`r?`n" | Where-Object { $_ -and $_ -notmatch '^time=' } | ForEach-Object { Write-Host " $_" }
# "Service '<name>' installed." - not "Service '<name>' not installed."
if ($out -notmatch "Service '[^']+' installed\.") { Fail "the service was not installed - read the messages above, fix, then run: cd $target; .\$bin install" }
# ---- 7. start it ----------------------------------------------------------------
Info "Starting the service"
(Native "$target\$bin" @("start")).Out -split "`r?`n" | Where-Object { $_ -and $_ -notmatch '^time=' } | ForEach-Object { Write-Host " $_" }
# install generates the webserver's _sharedInternal: read the config again
$cfg = [IO.File]::ReadAllText("$target\$conf") | ConvertFrom-Json
Write-Host ""
switch ($Component) {
"webserver" {
Write-Host "Webserver installed in $target"
Write-Host " Web UI: https://<this host>:$($cfg.PortWEB)/ (admin / admin, change it at first login)"
Write-Host " API: <this host>:$($cfg.PortAPI) -> the -Webserver value for the components"
Write-Host " _sharedInternal (pass it to every component as -SharedInternal):"
Write-Host " $($cfg._sharedInternal)"
}
"webserver-front" { Write-Host "Webserver-Front installed in $target - now configure ADMIN (see the Webserver-Front install page)." }
default {
Write-Host "$Component '$Name' installed in $target and registered with $Webserver."
Write-Host "Last step: on the Webserver, open Settings (gear) > Components, right-click '$Name' and choose enable server."
}
}
} finally {
Set-Location $env:TEMP
Remove-Item -Recurse -Force $work -ErrorAction SilentlyContinue
}
Option B — Step by step
The same steps by hand, in an elevated PowerShell.
1. Download and verify (on every host; $c is webserver, monitor, integrator or discovery_agent):
$v = "4.2.0"; $c = "monitor" # <- change $c for each host
$f = "mugnsoft-$c-$v.windows-amd64.zip"
Invoke-WebRequest https://mugnsoft.com/bin/$v/$f -OutFile $f -UseBasicParsing
Invoke-WebRequest https://mugnsoft.com/bin/$v/$f.sig -OutFile "$f.sig" -UseBasicParsing
Invoke-WebRequest https://mugnsoft.com/bin/Mugnsoft_public.key -OutFile Mugnsoft_public.key -UseBasicParsing
Verify in Git Bash (or a Gpg4win prompt) from the same folder. It must print Good signature from "Mugnsoft ..."; the This key is not certified warning is expected. A BAD signature means the file is corrupt or altered: delete it.
gpg --import Mugnsoft_public.key
gpg --verify mugnsoft-monitor-4.2.0.windows-amd64.zip.sig mugnsoft-monitor-4.2.0.windows-amd64.zip
Then extract (back in PowerShell):
Expand-Archive $f -DestinationPath C:\Mugnsoft
cd C:\Mugnsoft\$c
2. Webserver host: copy the license, install and start, then read _sharedInternal (the Webserver writes a random one into webserver.json at install):
Copy-Item C:\path\to\license_MNS.dat C:\Mugnsoft\webserver\
cd C:\Mugnsoft\webserver
.\webserver.exe install; .\webserver.exe start
Select-String _sharedInternal webserver.json
New-NetFirewallRule -DisplayName "Mugnsoft webserver" -Direction Inbound -Protocol TCP -LocalPort 8050,9090 -Action Allow
3. Monitor / Integrator / Sentinel Agent host: edit the .json file of the component (monitor.json, integrator.json or discovery_agent.json) with Notepad and set:
| Key | Set it to | Note |
|---|---|---|
_sharedInternal |
the Webserver’s value | Must be identical to the Webserver’s |
webserver |
10.0.0.5:8050 |
Webserver address and API port |
name |
a unique name, e.g. monitor-paris-1 |
Letters, digits, hyphens. The packaged value is an example |
location, description |
your text | The packaged values are examples |
port |
keep, or another free port | The Webserver must reach it |
ip |
monitor only, optional | The IP the Webserver must dial, when the host has several |
webserverUrl |
https://10.0.0.5:9090 |
Integrator only |
For the Integrator, also copy its license_MNS.dat into C:\Mugnsoft\integrator\. Then open the port, install (this registers the component) and start, replacing monitor and 8072 with your component and its port:
New-NetFirewallRule -DisplayName "Mugnsoft monitor" -Direction Inbound -Protocol TCP -LocalPort 8072 -Action Allow
.\monitor.exe install; .\monitor.exe start
install must print status: Success twice (registration, then certificate) and Service '...' installed.
Enable the components
A registered component is pending until you enable it:
- Sign in to
https://10.0.0.5:9090/(admin/admin; you must choose a new password at first sign-in). - Open the gear menu → components, right-click the new component → enable server. A success message confirms that the Webserver reached it.
Check the address. The Webserver connects to the IP address the component registered. A host with several network interfaces can register the wrong one: then enable server fails with getting access token: Failed. Make sure the component is running. Right-click the component → edit server, set the IP the Webserver can reach, save, then enable it again. For a monitor you can also pass -Advertise <ip> (or set ip in monitor.json) before installing.
Manage the services
| Task | Command (from the component folder) | Windows equivalent |
|---|---|---|
| Status | — | Get-Service MugnsoftMonitor |
| Stop / start / restart | .\monitor.exe stop, .\monitor.exe start, .\monitor.exe restart |
Restart-Service MugnsoftMonitor |
| Run in the foreground (debugging) | .\monitor.exe stop; .\monitor.exe run |
— |
| Register again with the Webserver | .\monitor.exe register |
— |
| Remove the service | .\monitor.exe uninstall (then delete the folder) |
— |
| Logs | log\monitor.log in the component folder |
— |
Replace monitor / MugnsoftMonitor with webserver / MugnsoftWebserver, integrator / MugnsoftIntegrator, discovery_agent / MugnsoftDiscoveryAgent. Removing a component from the Webserver is done on its Components page (right-click → delete server).
To upgrade, follow the order and the checks in the release notes of the target version; this page covers new installations.
Monitor probes: browsers for EUM journeys
URL, API, TCP, ping and the other monitor types need nothing more. EUM (Web UI) journeys need a browser on the probe host: Chrome, Edge or Firefox. At start, the monitor downloads the matching webdriver if it can reach the Internet. Otherwise, download the driver that matches the browser version yourself and put it in C:\Mugnsoft\monitor\drivers\:
| Browser | Driver | Download |
|---|---|---|
| Chrome | chromedriver.exe |
Chrome for Testing |
| Firefox | geckodriver.exe |
geckodriver releases |
| Edge | msedgedriver.exe |
Edge WebDriver |
To record journeys, use Mugnsoft Pulse or the Mugnsoft IDE.
Troubleshooting
| Message | Cause and fix |
|---|---|
self pre-registering ... status: Failed / Make sure that component can reach the Webserver API endpoint. |
The host cannot reach webserver on the API port: check the value, the Webserver service, the firewalls. Test with Test-NetConnection 10.0.0.5 -Port 8050 |
a server is already defined with this name |
A component with this name exists on the Webserver (an earlier attempt). Delete it on the Components page, or choose another -Name, then run install again |
a server is already defined with this IP and port |
A component already registered this IP address and port (a previous installation of this host). Delete it on the Components page, or use another -Port, then run install again |
Failed to install service '...': service ... already exists |
That component kind is already installed on this host: one per host. Use it, or uninstall it first |
No license ...\license_MNS.dat file found |
Integrator: copy its license file into its folder (-License with the script) |
license not valid for this machine |
The license file belongs to another host: licenses are bound to the host |
enable server: getting access token: Failed |
The Webserver cannot reach the component: wrong registered IP (see Check the address), or the component’s port is blocked |
enable server / Push Settings: rejected the internal login (HTTP 401) |
_sharedInternal differs from the Webserver’s: fix it in the component’s .json and restart the component |
running scripts is disabled on this system |
Start the script with powershell -ExecutionPolicy Bypass -File ... as shown above |
<folder> already exists (script) |
The script never overwrites an installation: choose another -Dir, or remove the old one first (uninstall) |
SIGNATURE CHECK FAILED (script) / BAD signature |
The package is corrupt or altered: download it again; never install it |
See also
- Requirements — supported systems and sizing
- Install the Webserver-Front — the read-only DMZ replica
- Folder structure — what each component folder holds
- Components Deep Dive — every setting of every component
- Hardening —
_sharedInternal, certificates and the rest of the security settings