aboutsummaryrefslogtreecommitdiff
path: root/custom/opencore-image-ng.sh
diff options
context:
space:
mode:
authorsickcodes <[email protected]>2021-03-09 20:00:40 +0000
committersickcodes <[email protected]>2021-03-09 20:00:40 +0000
commit8cd84276a3d84a6747549505b5cbfde0c718ac3d (patch)
tree69bcb15c69d8d2dd763cb40e6d0ad0803d35cca6 /custom/opencore-image-ng.sh
parentIncorrect link update (diff)
downloaddocker-osx-8cd84276a3d84a6747549505b5cbfde0c718ac3d.tar.xz
docker-osx-8cd84276a3d84a6747549505b5cbfde0c718ac3d.zip
Add temporary folder for hardlinks ./custom
Diffstat (limited to 'custom/opencore-image-ng.sh')
-rwxr-xr-xcustom/opencore-image-ng.sh164
1 files changed, 164 insertions, 0 deletions
diff --git a/custom/opencore-image-ng.sh b/custom/opencore-image-ng.sh
new file mode 100755
index 0000000..5743b05
--- /dev/null
+++ b/custom/opencore-image-ng.sh
@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+# https://github.com/kraxel/imagefish
+
+######################################################################
+# defaults
+
+iso=""
+img=""
+cfg=""
+
+######################################################################
+# create work dir
+
+function msg() {
+ local txt="$1"
+ local bold="\x1b[1m"
+ local normal="\x1b[0m"
+ echo -e "${bold}### ${txt}${normal}"
+}
+
+function do_cleanup() {
+ msg "cleaning up ..."
+ if test "$GUESTFISH_PID" != ""; then
+ guestfish --remote -- exit >/dev/null 2>&1 || true
+ fi
+ sudo rm -rf "$WORK"
+}
+
+WORK="${TMPDIR-/var/tmp}/${0##*/}-$$"
+mkdir "$WORK" || exit 1
+trap 'do_cleanup' EXIT
+
+BASE="$(dirname $0)"
+
+######################################################################
+# parse args
+
+function print_help() {
+cat <<EOF
+usage: $0 [ options ]
+options:
+ --iso <iso-image>
+ --img <disk-image>
+ --cfg <clover-config>
+EOF
+}
+
+while test "$1" != ""; do
+ case "$1" in
+ --iso)
+ iso="$2"
+ shift; shift
+ ;;
+ --img)
+ img="$2"
+ shift; shift
+ ;;
+ --cfg)
+ cfg="$2"
+ shift; shift
+ ;;
+ esac
+done
+
+######################################################################
+# guestfish script helpers
+
+function fish() {
+ echo "#" "$@"
+ guestfish --remote -- "$@" || exit 1
+}
+
+function fish_init() {
+ local format
+
+ case "$img" in
+ *.raw) format="raw" ;;
+ *) format="qcow2";;
+ esac
+
+ msg "creating and adding disk image"
+ fish disk-create $img $format 384M
+ fish add $img
+ fish run
+}
+
+function fish_fini() {
+ fish umount-all
+}
+
+# disabled by @sickcodes to allow unattended image overwrites
+######################################################################
+# sanity checks
+
+# if test ! -f "$cfg"; then
+# echo "ERROR: cfg not found: $cfg"
+# exit 1
+# fi
+# if test -f "$img"; then
+# if test "$allow_override" = "yes"; then
+# rm -f "$img"
+# else
+# echo "ERROR: image exists: $img"
+# exit 1
+# fi
+# fi
+
+######################################################################
+# go!
+
+msg "copy files from local folder"
+BASE="$(dirname $0)"
+cp -a $BASE/EFI $WORK
+find "$WORK"
+
+#msg "[debug] list drivers in EFI/OC"
+#(cd $WORK/EFI/OC; find driver* -print)
+
+export LIBGUESTFS_BACKEND=direct
+eval $(guestfish --listen)
+if test "$GUESTFISH_PID" = ""; then
+ echo "ERROR: starting guestfish failed"
+ exit 1
+fi
+
+fish_init
+
+msg "partition disk image"
+fish part-init /dev/sda gpt
+fish part-add /dev/sda p 2048 300000
+fish part-add /dev/sda p 302048 -2048
+fish part-set-gpt-type /dev/sda 1 C12A7328-F81F-11D2-BA4B-00A0C93EC93B
+fish part-set-bootable /dev/sda 1 true
+fish mkfs vfat /dev/sda1 label:EFI
+fish mkfs vfat /dev/sda2 label:OpenCoreBoo
+fish mount /dev/sda2 /
+fish mkdir /ESP
+fish mount /dev/sda1 /ESP
+
+msg "copy files to disk image"
+cp -v "$cfg" $WORK/config.plist
+fish mkdir /ESP/EFI
+fish mkdir /ESP/EFI/OC
+fish mkdir /ESP/EFI/OC/Kexts
+fish mkdir /ESP/EFI/OC/ACPI
+fish mkdir /ESP/EFI/OC/Resources
+fish mkdir /ESP/EFI/OC/Tools
+fish copy-in $WORK/EFI/BOOT /ESP/EFI
+fish copy-in $WORK/EFI/OC/OpenCore.efi /ESP/EFI/OC
+fish copy-in $WORK/EFI/OC/Drivers /ESP/EFI/OC/
+fish copy-in $WORK/EFI/OC/Kexts /ESP/EFI/OC/
+fish copy-in $WORK/EFI/OC/ACPI /ESP/EFI/OC/
+fish copy-in $WORK/EFI/OC/Resources /ESP/EFI/OC/
+fish copy-in $WORK/EFI/OC/Tools /ESP/EFI/OC/
+
+# Note
+fish copy-in startup.nsh /
+
+BASE="$(dirname $0)"
+fish copy-in "$WORK/config.plist" /ESP/EFI/OC/
+
+fish find /ESP/
+fish_fini