Add macOS boot options
This commit is contained in:
parent
547038c560
commit
3189fc464a
7 changed files with 89 additions and 7 deletions
|
|
@ -26,6 +26,11 @@ BOOT_FILES = {
|
||||||
'/syslinux': 'cfg',
|
'/syslinux': 'cfg',
|
||||||
'/EFI/boot': 'conf',
|
'/EFI/boot': 'conf',
|
||||||
}
|
}
|
||||||
|
IMAGE_BOOT_ENTRIES = {
|
||||||
|
'El Capitan': 'UFD-MACOS-10.11',
|
||||||
|
'High Sierra': 'UFD-MACOS-10.13',
|
||||||
|
'Catalina': 'UFD-MACOS-10.15',
|
||||||
|
}
|
||||||
|
|
||||||
# Definitions: Sources and Destinations
|
# Definitions: Sources and Destinations
|
||||||
## NOTES: Paths are relative to the root of the ISO/UFD
|
## NOTES: Paths are relative to the root of the ISO/UFD
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,22 @@ import logging
|
||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
from subprocess import CalledProcessError
|
||||||
|
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from docopt import docopt
|
from docopt import docopt
|
||||||
|
|
||||||
from wk import io, log, std
|
from wk import io, log, std
|
||||||
from wk.cfg.main import KIT_NAME_FULL, KIT_NAME_SHORT
|
from wk.cfg.main import KIT_NAME_FULL, KIT_NAME_SHORT
|
||||||
from wk.cfg.ufd import BOOT_ENTRIES, BOOT_FILES, ITEMS, ITEMS_HIDDEN, SOURCES
|
from wk.cfg.ufd import (
|
||||||
from wk.exe import run_program
|
BOOT_ENTRIES,
|
||||||
|
BOOT_FILES,
|
||||||
|
IMAGE_BOOT_ENTRIES,
|
||||||
|
ITEMS,
|
||||||
|
ITEMS_HIDDEN,
|
||||||
|
SOURCES,
|
||||||
|
)
|
||||||
|
from wk.exe import get_json_from_command, run_program
|
||||||
from wk.os import linux
|
from wk.os import linux
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -104,7 +112,7 @@ def build_ufd():
|
||||||
function=create_table,
|
function=create_table,
|
||||||
dev_path=ufd_dev,
|
dev_path=ufd_dev,
|
||||||
use_mbr=args['--use-mbr'],
|
use_mbr=args['--use-mbr'],
|
||||||
images=args['EXTRA_IMAGES'],
|
images=extra_images,
|
||||||
)
|
)
|
||||||
try_print.run(
|
try_print.run(
|
||||||
message='Setting boot flag...',
|
message='Setting boot flag...',
|
||||||
|
|
@ -170,6 +178,8 @@ def build_ufd():
|
||||||
try_print.run(
|
try_print.run(
|
||||||
message='Updating boot entries...',
|
message='Updating boot entries...',
|
||||||
function=update_boot_entries,
|
function=update_boot_entries,
|
||||||
|
ufd_dev=ufd_dev,
|
||||||
|
images=extra_images,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Install syslinux (to partition)
|
# Install syslinux (to partition)
|
||||||
|
|
@ -259,7 +269,7 @@ def copy_source(source, items, overwrite=False):
|
||||||
|
|
||||||
|
|
||||||
def create_table(dev_path, use_mbr=False, images=None):
|
def create_table(dev_path, use_mbr=False, images=None):
|
||||||
"""Create GPT or DOS partition table."""
|
"""Create GPT or DOS partition table, returns dict."""
|
||||||
cmd = [
|
cmd = [
|
||||||
'sudo',
|
'sudo',
|
||||||
'parted', dev_path,
|
'parted', dev_path,
|
||||||
|
|
@ -484,10 +494,10 @@ def show_selections(args, sources, ufd_dev, ufd_sources, extra_images):
|
||||||
std.print_standard(' ')
|
std.print_standard(' ')
|
||||||
|
|
||||||
|
|
||||||
def update_boot_entries():
|
def update_boot_entries(ufd_dev, images=None):
|
||||||
"""Update boot files for UFD usage"""
|
"""Update boot files for UFD usage"""
|
||||||
configs = []
|
configs = []
|
||||||
uuid = get_uuid('/mnt/UFD')
|
uuids = [get_uuid('/mnt/UFD')]
|
||||||
|
|
||||||
# Find config files
|
# Find config files
|
||||||
for c_path, c_ext in BOOT_FILES.items():
|
for c_path, c_ext in BOOT_FILES.items():
|
||||||
|
|
@ -506,7 +516,7 @@ def update_boot_entries():
|
||||||
'sed',
|
'sed',
|
||||||
'--in-place',
|
'--in-place',
|
||||||
'--regexp-extended',
|
'--regexp-extended',
|
||||||
f's#archisolabel={ISO_LABEL}#archisodevice=/dev/disk/by-uuid/{uuid}#',
|
f's#archisolabel={ISO_LABEL}#archisodevice=/dev/disk/by-uuid/{uuids[0]}#',
|
||||||
*configs,
|
*configs,
|
||||||
]
|
]
|
||||||
run_program(cmd)
|
run_program(cmd)
|
||||||
|
|
@ -529,6 +539,43 @@ def update_boot_entries():
|
||||||
]
|
]
|
||||||
run_program(cmd, check=False)
|
run_program(cmd, check=False)
|
||||||
|
|
||||||
|
# Bail early
|
||||||
|
if not images:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Get PARTUUID values
|
||||||
|
cmd = ['lsblk', '--json', '--output', 'partuuid', ufd_dev]
|
||||||
|
try:
|
||||||
|
uuids = get_json_from_command(cmd)
|
||||||
|
except (CalledProcessError, ValueError):
|
||||||
|
# Bail
|
||||||
|
return
|
||||||
|
uuids = [v['partuuid'] for v in uuids['blockdevices']]
|
||||||
|
|
||||||
|
# Uncomment extra image entries if present
|
||||||
|
for _i, image in enumerate(images):
|
||||||
|
for name, comment in IMAGE_BOOT_ENTRIES.items():
|
||||||
|
if name.lower() in image.name.lower():
|
||||||
|
cmd = [
|
||||||
|
'sudo',
|
||||||
|
'sed',
|
||||||
|
'--in-place',
|
||||||
|
'--regexp-extended',
|
||||||
|
fr's/(#{comment}#.*)"PARTUUID/\1"{uuids[_i+2]}/',
|
||||||
|
*configs,
|
||||||
|
]
|
||||||
|
run_program(cmd, check=False)
|
||||||
|
cmd = [
|
||||||
|
'sudo',
|
||||||
|
'sed',
|
||||||
|
'--in-place',
|
||||||
|
f's/#{comment}#//',
|
||||||
|
*configs,
|
||||||
|
]
|
||||||
|
run_program(cmd, check=False)
|
||||||
|
IMAGE_BOOT_ENTRIES.pop(name)
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
def verify_sources(args, ufd_sources):
|
def verify_sources(args, ufd_sources):
|
||||||
"""Check all sources and abort if necessary, returns dict."""
|
"""Check all sources and abort if necessary, returns dict."""
|
||||||
|
|
|
||||||
BIN
setup/linux/profile_base/EFI/boot/icons/wk_mac_10.11.png
Normal file
BIN
setup/linux/profile_base/EFI/boot/icons/wk_mac_10.11.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 338 KiB |
BIN
setup/linux/profile_base/EFI/boot/icons/wk_mac_10.13.png
Normal file
BIN
setup/linux/profile_base/EFI/boot/icons/wk_mac_10.13.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 373 KiB |
BIN
setup/linux/profile_base/EFI/boot/icons/wk_mac_10.15.png
Normal file
BIN
setup/linux/profile_base/EFI/boot/icons/wk_mac_10.15.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 320 KiB |
BIN
setup/linux/profile_base/EFI/boot/icons/wk_mac_11.png
Normal file
BIN
setup/linux/profile_base/EFI/boot/icons/wk_mac_11.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 116 KiB |
|
|
@ -41,6 +41,36 @@ menuentry "Linux" {
|
||||||
#UFD-MINIMAL#}
|
#UFD-MINIMAL#}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#UFD-MACOS-10.11#menuentry "macOS (El Capitan)" {
|
||||||
|
#UFD-MACOS-10.11# icon /EFI/boot/icons/wk_mac_10.11.png
|
||||||
|
#UFD-MACOS-10.11# volume "PARTUUID"
|
||||||
|
#UFD-MACOS-10.11# loader /System/Library/CoreServices/secretboot.efi
|
||||||
|
#UFD-MACOS-10.11# graphics
|
||||||
|
#UFD-MACOS-10.11# submenuentry "Mac MemTest" {
|
||||||
|
#UFD-MACOS-10.11# add_options "-s"
|
||||||
|
#UFD-MACOS-10.11# }
|
||||||
|
#UFD-MACOS-10.11#}
|
||||||
|
|
||||||
|
#UFD-MACOS-10.13#menuentry "macOS (High Sierra)" {
|
||||||
|
#UFD-MACOS-10.13# icon /EFI/boot/icons/wk_mac_10.13.png
|
||||||
|
#UFD-MACOS-10.13# volume "PARTUUID"
|
||||||
|
#UFD-MACOS-10.13# loader /System/Library/CoreServices/secretboot.efi
|
||||||
|
#UFD-MACOS-10.13# graphics
|
||||||
|
#UFD-MACOS-10.13# submenuentry "Mac MemTest" {
|
||||||
|
#UFD-MACOS-10.13# add_options "-s"
|
||||||
|
#UFD-MACOS-10.13# }
|
||||||
|
#UFD-MACOS-10.13#}
|
||||||
|
|
||||||
|
#UFD-MACOS-10.15#menuentry "macOS (Catalina)" {
|
||||||
|
#UFD-MACOS-10.15# icon /EFI/boot/icons/wk_mac_10.15.png
|
||||||
|
#UFD-MACOS-10.15# volume "PARTUUID"
|
||||||
|
#UFD-MACOS-10.15# loader /System/Library/CoreServices/secretboot.efi
|
||||||
|
#UFD-MACOS-10.15# graphics
|
||||||
|
#UFD-MACOS-10.15# submenuentry "Mac MemTest" {
|
||||||
|
#UFD-MACOS-10.15# add_options "-s"
|
||||||
|
#UFD-MACOS-10.15# }
|
||||||
|
#UFD-MACOS-10.15#}
|
||||||
|
|
||||||
#UFD-WINPE#menuentry "WindowsPE" {
|
#UFD-WINPE#menuentry "WindowsPE" {
|
||||||
#UFD-WINPE# ostype windows
|
#UFD-WINPE# ostype windows
|
||||||
#UFD-WINPE# icon /EFI/boot/icons/wk_win.png
|
#UFD-WINPE# icon /EFI/boot/icons/wk_win.png
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue