Skip to content

NodePilot 1.1.0

Choose a tag to compare

@Sev7eNup Sev7eNup released this 05 Aug 21:05
· 417 commits to main since this release
cfd920e

The server installation now has a setup you can double-click.

v1.0.1 shipped the artifacts; installing them still meant reading docs/deployment-guide.md,
creating a SQL login by hand, granting the service account access to a certificate's private key,
and getting a dozen Install-NodePilot.ps1 parameters right on the first try. This release adds
NodePilot-Server-Setup, a signed GUI installer that runs those same scripts, checks the host
before it changes anything, and fixes what it can fix itself.

Downloads

Asset For
NodePilot-Server-Setup-1.1.0.exe Windows service — the production rollout. Wizard, or /VERYSILENT with an answer file. Carries the signed artifact inside; nothing else to download.
NodePilot-Desktop-Setup-1.1.0.exe Desktop app — one machine. Bundles a local PostgreSQL and the .NET runtime, installs both as services, opens a native window. Offline, no prerequisites.
NodePilot-1.1.0.zip + .manifest.json + .manifest.json.p7s The scripted path, for automation and troubleshooting: deploy/Install-NodePilot.ps1 -ArtifactPath …. This is exactly what the setup runs.
SHA256SUMS.txt Checksums over everything above.
nodepilot-release-signing.cer Public signing certificate (see below).

Building from source stays fully supported and is documented in the README.

What the server setup does for you

  • Checks the host first, and says why. Administrator rights, the ports (naming HTTP.SYS when
    the kernel — not IIS — is holding 443), the .NET runtime, the TLS certificate, the service
    account, and whether the database is reachable at all. Nothing is changed until every blocking
    item is green.
  • Creates the database access it needs. SQL Server: the login for the service identity and the
    database, with db_owner on it. PostgreSQL: the role and the database, from superuser
    credentials you supply on the page or in the answer file. Both check first and skip what already
    exists, and both refuse politely — with the missing privilege named — when the running account
    may not do it. This used to be a block of SQL the wizard printed for you to run somewhere else.
  • Picks the certificate from a list instead of asking for a thumbprint. An expired certificate
    blocks the install; one whose name does not match the public hostname is a warning you can
    override, because split-DNS deployments are legitimate.
  • Grants the private key to the service account, sets the ACLs and the firewall rule, installs
    the service, starts it, and waits for /healthz/ready before calling it done.
  • Shows the first-login details on the finish page — the setup token and, if you enabled it,
    the external-trigger API key. That page is the only place they are ever shown.
  • Runs unattended for SCCM or GPO:
    NodePilot-Server-Setup-1.1.0.exe /VERYSILENT /SUPPRESSMSGBOXES /ANSWERFILE=answers.json.
    The answer file can create the first administrator and seed the installation from a
    configuration backup, so a rollout does not end with someone typing a setup token into a browser.
  • Upgrades in place. An existing installation keeps its configuration; the service is down for
    roughly half a minute.

You still bring two things: a TLS certificate in LocalMachine\My (imported with
MachineKeySet|PersistKeySet, otherwise the private key cannot be granted later) and a database
server whose TLS the NodePilot host trusts. The short version of all of this is the Quick start
at the top of deploy/server/README.md.

Fixes

  • Changing the service identity no longer bricks the installation it replaces. Installing over
    an existing instance under a different account (LocalSystem → gMSA) left the identity-bound
    secrets readable by nobody. The secrets are handed over to the new identity, and a failed switch
    now rolls the directory ACL back instead of leaving a half-migrated install.
  • An update leaves the service running. It used to stop the service and hand it back stopped.
  • The uninstaller waits for the service process instead of orphaning a still-running one.
  • The service waits for its database at boot rather than crash-looping past it, in both the
    server and desktop postures.
  • AllowedHosts derived from the public hostname no longer excludes localhost, which broke the
    installer's own health probe.
  • Registry ACLs are addressed by path, not by a literal that drifted.
  • The global query-error toast no longer fires every fifteen seconds while a background refresh
    retries.

Verifying the download

Publisher   : CN=NodePilot Release Signing
Thumbprint  : 277EAB317A581C88302CE92BE805938C86B4650D
Valid until : 2031-08-02
Get-FileHash .\NodePilot-1.1.0.zip -Algorithm SHA256             # compare with SHA256SUMS.txt
(Get-PfxCertificate .\nodepilot-release-signing.cer).Thumbprint  # must equal the value above
Import-Certificate -FilePath .\nodepilot-release-signing.cer -CertStoreLocation Cert:\LocalMachine\Root

Both installers are Authenticode-signed with that same certificate, RFC-3161 timestamped. It is a
self-signed publisher, not a public CA — that is why the thumbprint is published here and why
you should compare it before importing anything into LocalMachine\Root. Expect a SmartScreen
warning; it has no reputation to draw on. If your organisation will not trust a self-signed
publisher, build and sign both artifacts with your own enterprise certificate — the walkthrough is
in docs/deployment-guide.md.

Also in this release

Roughly fifty commits since v1.0.1. Beyond the setup itself: the installer pre-flight was
extracted so it can run without side effects (the wizard and the scripts now check the same way),
the setup's PowerShell adapter and the deployment templates gained contract tests, and the
deployment documentation was corrected where it named a build parameter that no longer exists.

Licensed under Apache-2.0.