Deploy: Npcap is a one-time MANUAL install per cockpit (operator consensus)

Retire the bundled-silent-installer requirement: postinstall now detects an
existing Npcap service and moves on, warns clearly when absent, and still
honors a bundled deploy\npcap.exe if one is shipped. package.ps1 no longer
flags the missing bundle as a warning.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-10 23:49:36 -05:00
co-authored by Claude Fable 5
parent 4adfaf740a
commit 33a192a1fc
3 changed files with 22 additions and 10 deletions
+8 -3
View File
@@ -129,7 +129,11 @@ Single root folder + `postinstall.bat`. Everything the install needs is inside:
runtime DLL, `wpcap.dll`, comes from the Npcap install runtime DLL, `wpcap.dll`, comes from the Npcap install
- `ALPHA_1\` game content (REL410\BT, REL410\RP, SB16, GAUGE, ...) + `net-boot\` - `ALPHA_1\` game content (REL410\BT, REL410\RP, SB16, GAUGE, ...) + `net-boot\`
drivers (LSL/NE2000/ODIPKT/NET.CFG @ PORT 340/INT 10, loop.bat) drivers (LSL/NE2000/ODIPKT/NET.CFG @ PORT 340/INT 10, loop.bat)
- **Npcap silent installer** (bundled) - ~~Npcap silent installer (bundled)~~ **retired 2026-07-10 (operator
consensus): Npcap is installed MANUALLY, once per cockpit PC** -- a one-time
affair that survives game updates. postinstall detects an existing install
and only warns when absent (a bundled `deploy\npcap.exe` is still honored
if shipped)
- The renderer (**OPEN:** freeze to one exe vs bundle embeddable Python -- decide - The renderer (**OPEN:** freeze to one exe vs bundle embeddable Python -- decide
with David; "decide later") with David; "decide later")
- `net_*.conf` **templates** with `@@ROOT@@` / `@@REALNIC@@` tokens, launch - `net_*.conf` **templates** with `@@ROOT@@` / `@@REALNIC@@` tokens, launch
@@ -140,8 +144,9 @@ Single root folder + `postinstall.bat`. Everything the install needs is inside:
Implemented in `deploy/` (`postinstall.bat` = thin wrapper; `configure.ps1` does Implemented in `deploy/` (`postinstall.bat` = thin wrapper; `configure.ps1` does
2-4): 2-4):
1. **Install Npcap** silently (`/S`, from the bundled installer -- the edition 1. **Check Npcap** (manual-install policy, 2026-07-10): detect the existing
whose installer supports unattended install). service and move on; warn clearly if absent. Silent `/S` install only if a
bundled `deploy\npcap.exe` was shipped.
2. **Bind the NIC**: pick the one active adapter, write a safe letter-leading 2. **Bind the NIC**: pick the one active adapter, write a safe letter-leading
`realnic=` fragment (a contiguous substring of ONE GUID block, so it matches `realnic=` fragment (a contiguous substring of ONE GUID block, so it matches
`\Device\NPF_{GUID}`; avoids the leading-digit-as-index trap). `\Device\NPF_{GUID}`; avoids the leading-digit-as-index trap).
+3 -2
View File
@@ -78,9 +78,10 @@ if ($NoContent) {
if ($Renderer) { Copy-Item $Renderer (Join-Path $root 'renderer.exe'); Log "bundled renderer -> renderer.exe" } if ($Renderer) { Copy-Item $Renderer (Join-Path $root 'renderer.exe'); Log "bundled renderer -> renderer.exe" }
else { Warn "no -Renderer: renderer NOT bundled (freeze pending). pod-launch needs --renderer or a bundled render-bridge at runtime." } else { Warn "no -Renderer: renderer NOT bundled (freeze pending). pod-launch needs --renderer or a bundled render-bridge at runtime." }
# Npcap installer -- else flagged # Npcap installer -- optional: policy (2026-07-10) is a one-time MANUAL install
# per cockpit; postinstall detects it and only warns when absent.
if ($Npcap) { Copy-Item $Npcap (Join-Path $root 'deploy\npcap.exe'); Log "bundled Npcap -> deploy\npcap.exe" } if ($Npcap) { Copy-Item $Npcap (Join-Path $root 'deploy\npcap.exe'); Log "bundled Npcap -> deploy\npcap.exe" }
else { Warn "no -Npcap: installer NOT bundled. postinstall will warn + the pcap bridge won't work until Npcap is present." } else { Log "Npcap not bundled (manual-install policy; operator installs once per cockpit)" }
if ($VcRedist) { Copy-Item $VcRedist (Join-Path $root 'deploy\vc_redist.x64.exe'); Log "bundled VC++ runtime" } if ($VcRedist) { Copy-Item $VcRedist (Join-Path $root 'deploy\vc_redist.x64.exe'); Log "bundled VC++ runtime" }
+11 -5
View File
@@ -19,15 +19,21 @@ if not defined ROOT (
) )
echo [postinstall] ROOT=!ROOT! echo [postinstall] ROOT=!ROOT!
REM --- 1. Npcap silent install (bundled OEM-class installer supporting /S) -- REM --- 1. Npcap: POLICY (operator consensus 2026-07-10) = installed MANUALLY
REM once per cockpit. Detect an existing install; a bundled
REM deploy\npcap.exe is still honored if someone ships one.
set "NPCAP=!ROOT!\deploy\npcap.exe" set "NPCAP=!ROOT!\deploy\npcap.exe"
if exist "!NPCAP!" ( sc query npcap >nul 2>&1
echo [postinstall] installing Npcap silently... if not errorlevel 1 (
echo [postinstall] Npcap already installed -- OK
) else if exist "!NPCAP!" (
echo [postinstall] installing bundled Npcap silently...
"!NPCAP!" /S "!NPCAP!" /S
if errorlevel 1 ( echo [postinstall] ERROR: Npcap install failed & exit /b 1 ) if errorlevel 1 ( echo [postinstall] ERROR: Npcap install failed & exit /b 1 )
) else ( ) else (
echo [postinstall] WARNING: bundled Npcap not found at "!NPCAP!" echo [postinstall] WARNING: Npcap is NOT installed on this machine.
echo [postinstall] the pcap bridge will not work without it echo [postinstall] Run the Npcap installer manually ^(default options^),
echo [postinstall] then launch normally -- the pod's NIC bridge needs it.
) )
REM --- optional: bundled VC++ runtime, if present -------------------------- REM --- optional: bundled VC++ runtime, if present --------------------------