diff --git a/playbook/preinstall/oracle/Install-Oracle11r2.cmd b/playbook/preinstall/oracle/Install-Oracle11r2.cmd new file mode 100644 index 0000000..6904337 --- /dev/null +++ b/playbook/preinstall/oracle/Install-Oracle11r2.cmd @@ -0,0 +1,78 @@ +@echo off +REM Install-Oracle11r2.cmd +REM Expands the GE Oracle Client 11.2 Administrator zip to a temp dir and +REM runs Oracle Universal Installer silently with the GE-customized +REM response file. +REM +REM Accepted zip locations (first hit wins): +REM %~dp0Oracle_OracleDatabase_11r2_V03.zip (preinstall flat) +REM %~dp0..\apps\Oracle_OracleDatabase_11r2_V03.zip (SFLD share, enforcer) +REM +REM Called by: +REM - preinstall runner (Type=EXE, image build time) +REM - Install-FromManifest.ps1 (Type=CMD, runtime enforcer) +REM +REM Oracle 11.2 OUI exit codes worth knowing: +REM 0 = success +REM 3 = success but with warnings +REM 1 = general failure +REM 6 = silent install requested but missing / bad response file + +setlocal enabledelayedexpansion +set "LOG=C:\Logs\OracleClient\install.log" +if not exist "C:\Logs\OracleClient" mkdir "C:\Logs\OracleClient" + +REM Emit a datestamp +for /f "tokens=2 delims==" %%I in ('wmic os get localdatetime /value 2^>nul ^| find "="') do set LDT=%%I +set "STAMP=!LDT:~0,14!" + +echo [%STAMP%] Install-Oracle11r2.cmd starting >> "%LOG%" + +set "SRC_ZIP=%~dp0Oracle_OracleDatabase_11r2_V03.zip" +if not exist "%SRC_ZIP%" set "SRC_ZIP=%~dp0..\apps\Oracle_OracleDatabase_11r2_V03.zip" +set "STAGING=%TEMP%\oracle-11r2-install" +set "CLIENT_DIR=%STAGING%\Oracle_OracleDatabase_11r2_V03\client" +set "RSP=%CLIENT_DIR%\response\ge_client_install.rsp" + +if not exist "%SRC_ZIP%" ( + echo [%STAMP%] ERROR: zip not found at %SRC_ZIP% >> "%LOG%" + echo ERROR: zip not found at %SRC_ZIP% + exit /b 2 +) + +echo [%STAMP%] Expanding %SRC_ZIP% to %STAGING% >> "%LOG%" +if exist "%STAGING%" rmdir /s /q "%STAGING%" >nul 2>&1 +mkdir "%STAGING%" +powershell.exe -NoProfile -ExecutionPolicy Bypass -Command ^ + "try { Expand-Archive -Path '%SRC_ZIP%' -DestinationPath '%STAGING%' -Force -ErrorAction Stop; exit 0 } catch { Write-Error $_; exit 1 }" ^ + >> "%LOG%" 2>&1 + +if not exist "%CLIENT_DIR%\setup.exe" ( + echo [%STAMP%] ERROR: expanded setup.exe not found at %CLIENT_DIR%\setup.exe >> "%LOG%" + exit /b 3 +) + +if not exist "%RSP%" ( + echo [%STAMP%] ERROR: response file missing at %RSP% >> "%LOG%" + exit /b 4 +) + +echo [%STAMP%] Running OUI silent install (this takes 2-8 minutes) >> "%LOG%" +"%CLIENT_DIR%\setup.exe" -silent -waitforcompletion -nowait ^ + -ignoreSysPrereqs ^ + -responseFile "%RSP%" >> "%LOG%" 2>&1 +set RC=%ERRORLEVEL% + +echo [%STAMP%] OUI exit code: %RC% >> "%LOG%" + +REM Cleanup staging dir to reclaim ~1.5 GB - OUI copies everything to ORACLE_HOME +echo [%STAMP%] Cleaning up staging dir >> "%LOG%" +rmdir /s /q "%STAGING%" >nul 2>&1 + +REM OUI returns 0 for success, 3 for success-with-warnings. Treat both as OK. +if %RC%==3 ( + echo [%STAMP%] OUI reported warnings but install succeeded - returning 0 >> "%LOG%" + exit /b 0 +) + +exit /b %RC% diff --git a/playbook/preinstall/preinstall.json b/playbook/preinstall/preinstall.json index bfecdb2..3545423 100644 --- a/playbook/preinstall/preinstall.json +++ b/playbook/preinstall/preinstall.json @@ -2,6 +2,19 @@ "Version": "1.0", "Site": "West Jefferson", "Applications": [ + { + "_comment": "Oracle Client 11.2 Administrator - installed first because downstream apps (eDNC/NTLARS/UDC and CMM tooling) link against the Oracle home and fail cold if it's missing. Installer is a .cmd wrapper (Type=EXE is the preinstall runner's shim for non-MSI launchers, same pattern as OpenText Setup-OpenText.cmd). The wrapper expects Oracle_OracleDatabase_11r2_V03.zip (686 MB) staged next to it, unpacks to %TEMP%, runs Oracle Universal Installer silently with ge_client_install.rsp, then cleans up the staging dir. OUI exit 3 is treated as success (warnings-but-ok). Detection via the registered home key; downstream upgrades or version pins are handled by the runtime enforcer's Oracle Client 11.2 manifest entry in common/manifest.json.", + "Name": "Oracle Client 11.2", + "Installer": "oracle\\Install-Oracle11r2.cmd", + "Type": "EXE", + "InstallArgs": "", + "LogFile": "C:\\Logs\\OracleClient\\install.log", + "DetectionMethod": "Registry", + "DetectionPath": "HKLM:\\SOFTWARE\\Oracle\\KEY_OraClient11g_home1", + "DetectionName": "ORACLE_HOME_NAME", + "DetectionValue": "OraClient11g_home1", + "PCTypes": ["Standard", "CMM", "Genspect", "Keyence", "WaxAndTrace", "Display"] + }, { "_comment": "VC++ 2008 SP1 x86 - the bootstrapper (vcredist2008_x86.exe) ignores /norestart and triggers an immediate Windows reboot when files are in use (per Aaron Stebner's MSDN docs). Fix: install the extracted vc_red.msi directly with REBOOT=ReallySuppress, which IS hard-honored by Windows Installer. msiexec may return 3010 (would-have-rebooted-but-suppressed) but won't actually reboot. cab name 'vc_red.cab' is hardcoded in the MSI's Media table - do not rename.", "Name": "VC++ Redistributable 2008 x86",