diff --git a/emulator/DEPLOYMENT-PLAN.md b/emulator/DEPLOYMENT-PLAN.md index 2bf95f3..b0d8cf9 100644 --- a/emulator/DEPLOYMENT-PLAN.md +++ b/emulator/DEPLOYMENT-PLAN.md @@ -129,7 +129,11 @@ Single root folder + `postinstall.bat`. Everything the install needs is inside: runtime DLL, `wpcap.dll`, comes from the Npcap install - `ALPHA_1\` game content (REL410\BT, REL410\RP, SB16, GAUGE, ...) + `net-boot\` 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 with David; "decide later") - `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 2-4): -1. **Install Npcap** silently (`/S`, from the bundled installer -- the edition - whose installer supports unattended install). +1. **Check Npcap** (manual-install policy, 2026-07-10): detect the existing + 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 `realnic=` fragment (a contiguous substring of ONE GUID block, so it matches `\Device\NPF_{GUID}`; avoids the leading-digit-as-index trap). diff --git a/emulator/deploy/package.ps1 b/emulator/deploy/package.ps1 index 0d763ef..85e3ed1 100644 --- a/emulator/deploy/package.ps1 +++ b/emulator/deploy/package.ps1 @@ -78,9 +78,10 @@ if ($NoContent) { 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." } -# 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" } -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" } diff --git a/emulator/deploy/postinstall.bat b/emulator/deploy/postinstall.bat index 80d8378..e6a7ee7 100644 --- a/emulator/deploy/postinstall.bat +++ b/emulator/deploy/postinstall.bat @@ -19,15 +19,21 @@ if not defined 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" -if exist "!NPCAP!" ( - echo [postinstall] installing Npcap silently... +sc query npcap >nul 2>&1 +if not errorlevel 1 ( + echo [postinstall] Npcap already installed -- OK +) else if exist "!NPCAP!" ( + echo [postinstall] installing bundled Npcap silently... "!NPCAP!" /S if errorlevel 1 ( echo [postinstall] ERROR: Npcap install failed & exit /b 1 ) ) else ( - echo [postinstall] WARNING: bundled Npcap not found at "!NPCAP!" - echo [postinstall] the pcap bridge will not work without it + echo [postinstall] WARNING: Npcap is NOT installed on this machine. + 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 --------------------------