3.4 KiB
Explicit platform identity overrides
By default, Darling keeps the existing host-derived UUID and DARLING- serial.
No override file is generated by installation or launch. This tool imports
values supplied by the user; it does not generate Apple serials or replace OS,
CPU, GPU, or security metadata.
Preview an OpenCore config.plist, a flat GenSMBIOS JSON file, or an existing
darling-smbios.conf without changing the selected prefix:
python3 tools/configure-darling-platform.py --prefix /absolute/prefix --import /path/to/config.plist
After reviewing the preview, shut down that prefix and explicitly save:
DPREFIX=/absolute/prefix python3 build/runtime/tools/stop-darling-runtime.py
python3 tools/configure-darling-platform.py --prefix /absolute/prefix --import /path/to/config.plist --write
The default prefix selection is --prefix, then DPREFIX, then saved
build/config.json, then ~/.darling. Writing refuses a live prefix. The
configuration is activated when that prefix's iokitd starts again; it is an
immutable startup snapshot. An absent or invalid configuration preserves the
existing defaults. Invalid daemon-side configuration is reported once.
The file is <prefix>/private/etc/darling-platform.plist. It uses this schema:
{
"schema": 1,
"properties": {
"IOPlatformSerialNumber": "USER-SUPPLIED",
"model": "UserSuppliedModel"
}
}
Supported properties:
| Property | Configuration value | IOKit value |
|---|---|---|
IOPlatformSerialNumber |
Printable ASCII string, 1–64 characters | NSString |
IOPlatformUUID |
Nonzero UUID; normalized to uppercase | NSString |
manufacturer, model, product-name, board-id |
Printable ASCII string, 1–128 characters | NUL-terminated NSData |
mlb-serial-number |
Printable ASCII string, 1–64 characters | NUL-terminated NSData |
ROM |
Exactly 6 bytes; JSON accepts hexadecimal text | NSData |
system-id |
Exactly 16 bytes; JSON accepts hexadecimal text | NSData |
Supplying a model also supplies the matching product name unless one is
explicitly provided. Supplying a UUID derives its EFI little-endian system-id;
a conflicting explicit system ID is rejected. No other missing fields are
invented. These properties belong to the existing platform service; the tool
does not manufacture a firmware/NVRAM registry hierarchy.
For OpenCore, the importer reads PlatformInfo/Generic (or a standalone Generic
dictionary): SystemProductName, SystemSerialNumber, SystemUUID, MLB,
and ROM. It ignores unrelated boot and security settings. GenSMBIOS aliases
include Type, Serial, Board Serial, and SmUUID. Legacy SMBIOS_* identity
keys are accepted from .conf; parsing never executes shell expressions.
Existing configured fields survive a partial import. A new explicit UUID
replaces its previously derived system ID. --set KEY=VALUE can update an
individual field. Unknown schema versions, unsupported properties, malformed
values, and duplicate JSON fields are rejected.
Writes are atomic with mode 0600. Repeating the same write changes nothing. The
first previous configuration is kept as
darling-platform.plist.before-platform-change, also with mode 0600. Importing
an older .conf never edits that source. Symlinks escaping the prefix are
rejected. To restore the original defaults, remove the override file while the
prefix is stopped, then restart it.