|
OpenCore
1.0.5
OpenCore Bootloader
|
If you want to use OpenCore + OpenLinuxBoot + Secure Boot it is possible to sign everything manually yourself, including any new Linux kernels after updates. This is possible since most standard distros leave at least the previous kernel bootable (and OpenLinuxBoot exposes this, via the Auxiliary menu), so you can boot into the old kernel, then sign the new kernel yourself.
More convenient may be to trust the signing keys of the specific distros which you want to boot, which are bundled into the shimx64.efi file installed with each distro. You can extract these with shim-to-cert.tool distributed with OpenCore, then install them in your system Secure Boot db variable. Best practice would be to install the deny list (vendor.dbx) from shimx64.efi, if any, into your system dbx variable, as well. (Otherwise you are ignoring any revocations which the vendor has made.)
Recently, Shim has added SBAT support, as a more efficient way to revoke unsafe binaries. Unfortunately, the SBAT enforcement code is part of Shim, and is not something you can extract and add to your system Secure Boot database.
To work round this, the new recommended way to boot OpenCore + OpenLinuxBoot + Secure Boot is to make a user build of Shim. The vendor certificates and revocation lists extracted from the distro shimx64.efi files are combined and signed by you, into your own build of Shim; in this approach, these vendor certificates should NOT also be included in the system Secure Boot database, and should be removed if you added them previously. Including them in both places will still boot under Secure Boot, but will effectively disable SBAT revocation.
If you are signing everything yourself, including Linux kernels after updates, that will still work as before and the below is not needed. Equally, if you are not using Secure Boot the below is not needed.
The advantages of using a user build of Shim are:
Disadvantages are:
Utilities/ShimUtils includes a script shim-make.tool which will download the current Shim source and build it for you, on macOS (using Ubuntu multipass) or on Linux (Ubuntu and Fedora supported, others may work).
vendor.db and vendor.dbx files from the shimx64.efi file of each distro which you want to load (using shim-to-cert.tool)shimx64.efi and so must be found by additional user researchcat fedora/vendor.db ubuntu/vendor.db > combined/vendor.db and cat fedora/vendor.dbx ubuntu/vendor.dbx > combined/vendor.dbx).der files directly, it will not work.der file, you can use VENDOR_CERT_FILE instead of VENDOR_DB_FILE in the make options below; otherwise, you will need to use cert-to-efi-sig-list from efitools to convert the .der file to a sig list - this is done automatically by shim-to-cert.tool when efitools are available (in Linux; or from within Ubuntu multipass on macOS, e.g. multipass shell oc-shim)./shim-make.tool setup./shim-make.tool clean (only needed if remaking after the initial make)./shim-make.tool make VENDOR_DB_FILE={full-path-to}/vendor.db VENDOR_DBX_FILE={full-path-to}/vendor.dbx/Users/{username}/shim_root when using shim-make.tool default settingsshimx64.efi and mmx64.efi as well as BOOTX64.CSV) to your mounted ESP volume, e.g.:./shim-make.tool install /Volumes/EFI (macOS)sudo ./shim-make.tool install /boot/efi (Linux)shimx64.efi and mmx64.efi with your own ISK (see e.g. https://habr.com/en/articles/273497/ - Google translate is your friend)mmx64.efi as well as shimx64.efi, your system will hang if any MOK operations are attemptedBOOTX64.CSV is not required and is for information onlyAs before you need to sign OpenCore.efi and any drivers it loads with your ISK. You now also need to add an empty SBAT section to OpenCore.efi before signing it.
An empty SBAT section means: 'I'm not part of the system which allocates SBAT names and signs them into boot files, and I don't want this boot file to be revoked by any future SBAT revocations'. Of course, you can still revoke boot files you signed yourself by rotating your own signing keys.
As noted here and here, the documented method for adding an SBAT section to an already-linked .efi file does not work correctly (GNU objcopy corrupts the executable). This third party python script does work. A suitable command is:
pe-add-sections.py -s .sbat <(echo -n) -z .sbat -i OpenCore.efi -o OpenCore_empty_sbat.efi
This file then needs to be signed and copied back into place, e.g.:
sbsign --key {path-to}/ISK.key --cert {path-to}/ISK.pem OpenCore_empty_sbat.efi --output OpenCore.efi
Finally, in order for OpenCore integration with Shim to work correctly UEFI/Quirks/ShimRetainProtocol must be enabled in config.plist, and LauncherPath should be set to \EFI\OC\shimx64.efi.
Using Ubuntu multipass, it is now possible to operate entirely within macOS for signing, key generation, etc. Note that the
~/shim_rootdirectory is already shared between macOS and theoc-shimmultipass VM (under its macOS path, e.g./Users/username/shim_root), and other macOS folders and volumes can be mounted if you wish, e.g.multipass mount /Volumes/EFI oc-shim:/Volumes/EFI.