From 99802ebbc98c91287edf8387a6182b1173d3a006 Mon Sep 17 00:00:00 2001 From: cproudlock Date: Fri, 8 May 2026 17:23:28 -0400 Subject: [PATCH] BIOS: add OptiPlex 7080 (1.37.0) Models.txt entry maps "7080" substring (matches WMI csproduct name "OptiPlex 7080") to OptiPlex_7080_1.37.0.exe. BIOS .exe already deployed to /srv/samba/winpeapps/_shared/BIOS/ on the live PXE server via download-drivers.py. Also adds docs/geastandardpbr-overrides.md tracking the local geastandardpbr/ edits (user_selections.json + HardwareDriver.json get a 7080 entry under "D11 OptiPlex Family") that the gitignore prevents from being tracked directly. Includes a Python snippet to idempotently re-apply after a fresh USB import. Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/geastandardpbr-overrides.md | 111 +++++++++++++++++++++++ playbook/shopfloor-setup/BIOS/models.txt | 5 +- 2 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 docs/geastandardpbr-overrides.md diff --git a/docs/geastandardpbr-overrides.md b/docs/geastandardpbr-overrides.md new file mode 100644 index 0000000..56e16f4 --- /dev/null +++ b/docs/geastandardpbr-overrides.md @@ -0,0 +1,111 @@ +# geastandardpbr/ overrides + +`geastandardpbr/` is gitignored (USB-imported GE deployment package). Edits made +locally to support new hardware models do not survive a fresh import. + +This file tracks the local edits so they can be re-applied after a re-import. +Apply by hand or via the snippet at the bottom. + +## OptiPlex 7080 (added 2026-05-08) + +Reason: a 7080 arrived on the floor; check-bios.cmd was returning +"no update in catalog" because no 7080 entry existed in the catalog files. + +### `geastandardpbr/Tools/user_selections.json` + +Add to `HardwareModelSelection` (insert before the existing `7090 / D12 OptiPlex Family` entry): + +```json +{ + "Model": "7080", + "Id": "D11 OptiPlex Family" +} +``` + +### `geastandardpbr/Deploy/Control/HardwareDriver.json` + +Add a new entry (insert before the existing `D12 OptiPlex Family / 7090` entry): + +```json +{ + "manufacturer": "Dell", + "manufacturerfriendlyname": "Dell", + "family": "D11 OptiPlex Family", + "models": "OptiPlex 7080", + "modelsfriendlyname": "7080", + "FileName": "", + "DestinationDir": "*destinationdir*\\Deploy\\Out-of-box Drivers\\Dell_11\\OptiPlex\\D11 OptiPlex Family", + "url": "", + "hash": "", + "size": 0, + "modifiedDate": "0001-01-01T00:00:00", + "osId": "20,21", + "aOsIds": [ + "20", + "21" + ], + "imagedisk": 0 +} +``` + +`FileName`, `url`, `hash`, `size` left empty. `scripts/download-drivers.py` resolves +the actual driver pack from Dell's catalog by model name (`extract_model_ids` +matches "7080") and downloads the latest pack at run time. + +### Side artifacts already on the live PXE server (10.9.100.1) + +- `\\10.9.100.1\winpeapps\_shared\BIOS\OptiPlex_7080_1.37.0.exe` (39.8 MB, BIOS update) +- `\\10.9.100.1\image-upload\Deploy\Out-of-box Drivers\Dell_11\OptiPlex\D11 OptiPlex Family\win11_70809ntr8_a09.zip` (Win11 driver pack, 2.6 GB) +- `\\10.9.100.1\winpeapps\_shared\BIOS\models.txt` includes the 7080 line. + +These persist regardless of `geastandardpbr/` rebuilds. Only the model-registry +edits need to be re-applied after a USB re-import. + +## Re-applying after a fresh `geastandardpbr/` import + +Either edit the two JSON files by hand following the snippets above, or run: + +```bash +cd /home/camp/projects/pxe +python3 - <<'PY' +import json, sys +us = 'geastandardpbr/Tools/user_selections.json' +hd = 'geastandardpbr/Deploy/Control/HardwareDriver.json' + +data = json.load(open(us)) +add = {"Model": "7080", "Id": "D11 OptiPlex Family"} +for d in data: + if "HardwareModelSelection" in d: + if not any(m.get("Model") == "7080" for m in d["HardwareModelSelection"]): + for i, m in enumerate(d["HardwareModelSelection"]): + if m.get("Id") == "D12 OptiPlex Family": + d["HardwareModelSelection"].insert(i, add) + break +json.dump(data, open(us, 'w'), indent=2) + +data = json.load(open(hd)) +add = { + "manufacturer": "Dell", + "manufacturerfriendlyname": "Dell", + "family": "D11 OptiPlex Family", + "models": "OptiPlex 7080", + "modelsfriendlyname": "7080", + "FileName": "", + "DestinationDir": "*destinationdir*\\Deploy\\Out-of-box Drivers\\Dell_11\\OptiPlex\\D11 OptiPlex Family", + "url": "", + "hash": "", + "size": 0, + "modifiedDate": "0001-01-01T00:00:00", + "osId": "20,21", + "aOsIds": ["20", "21"], + "imagedisk": 0 +} +if not any(e.get("models") == "OptiPlex 7080" for e in data): + for i, e in enumerate(data): + if e.get("family") == "D12 OptiPlex Family" and e.get("models") == "7090": + data.insert(i, add) + break +json.dump(data, open(hd, 'w'), indent=2) +print("done") +PY +``` diff --git a/playbook/shopfloor-setup/BIOS/models.txt b/playbook/shopfloor-setup/BIOS/models.txt index 167bacb..d31914d 100644 --- a/playbook/shopfloor-setup/BIOS/models.txt +++ b/playbook/shopfloor-setup/BIOS/models.txt @@ -6,6 +6,7 @@ 16 Plus MB16250|Dell_Pro_Max_MB16250_MB18250_2.2.2.exe|2.2.2 24250|Dell_Pro_Plus_QB24250_QC24250_QC24251_1.9.2.exe|1.9.2 5430|Latitude_5430_7330_Rugged_1.41.0.exe|1.41.0 +7080|OptiPlex_7080_1.37.0.exe|1.37.0 7090|OptiPlex_7090_1.40.0.exe|1.40.0 7220 Rugged|Latitude_7220_Rugged_Extreme_Tablet_1.50.0.exe|1.50.0 7230 Rugged Extreme Tablet|Latitude_7230_1.30.1.exe|1.30.1 @@ -24,7 +25,9 @@ Latitude 5540|Precision_5540_1.42.0.exe|1.42.0 Latitude 7430|Latitude_7X30_1.38.0.exe|1.38.0 Latitude 7440|Latitude_7X40_1.28.1.exe|1.28.1 Latitude 7450|OptiPlex_7450_1.34.0.exe|1.34.0 -Micro 7010|OptiPlex_7010_1.33.0_SEMB.exe|1.33.0 +Micro 7010|OptiPlex_7010_1.34.0_SEMB.exe|1.34.0 +SFF Plus 7010|OptiPlex_7010_1.34.0_SEMB.exe|1.34.0 +Tower Plus 7010|OptiPlex_7010_1.34.0_SEMB.exe|1.34.0 Micro QCM1250|Dell_Pro_QBT1250_QBS1250_QBM1250_QCT1250_QCS1250_QCM1250_SEMB_1.12.2.exe|1.12.2 OptiPlex 3000|OptiPlex_3000_1.38.0.exe|1.38.0 OptiPlex 7000|OptiPlex_7000_1.38.0.exe|1.38.0