mirror of
https://github.com/dockur/macos.git
synced 2026-03-11 08:34:24 +00:00
77 lines
1.6 KiB
Bash
77 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
DST="/images"
|
|
OUT="/tmp/extract"
|
|
|
|
rm -rf "$OUT"
|
|
rm -rf "$DST"
|
|
|
|
mkdir -p "$OUT"
|
|
mkdir -p "$DST"
|
|
|
|
echo "Extracting template image..."
|
|
|
|
if [ ! -f "$1" ] || [ ! -s "$1" ]; then
|
|
echo "Could not find image file \"$1\"." && exit 10
|
|
fi
|
|
|
|
START=$(sfdisk -l "$1" | grep -i -m 1 "EFI System" | awk '{print $2}')
|
|
mcopy -bspmQ -i "$1@@${START}S" ::EFI "$OUT"
|
|
|
|
echo "Building OpenCore image..."
|
|
|
|
cp "$2" "$OUT/EFI/OC/"
|
|
|
|
MB=256
|
|
CLUSTER=4
|
|
START=2048
|
|
SECTOR=512
|
|
FIRST_LBA=34
|
|
|
|
SIZE=$(( MB*1024*1024 ))
|
|
OFFSET=$(( START*SECTOR ))
|
|
TOTAL=$(( SIZE-(FIRST_LBA*SECTOR) ))
|
|
LAST_LBA=$(( TOTAL/SECTOR ))
|
|
COUNT=$(( LAST_LBA-(START-1) ))
|
|
|
|
FILE="OpenCore.img"
|
|
IMG="/tmp/$FILE"
|
|
rm -f "$IMG"
|
|
|
|
if ! truncate -s "$SIZE" "$IMG"; then
|
|
rm -f "$IMG"
|
|
echo "Could not allocate file $IMG for the OpenCore image." && exit 11
|
|
fi
|
|
|
|
PART="/tmp/partition.fdisk"
|
|
|
|
{ echo "label: gpt"
|
|
echo "label-id: 1ACB1E00-3B8F-4B2A-86A4-D99ED21DCAEB"
|
|
echo "device: $FILE"
|
|
echo "unit: sectors"
|
|
echo "first-lba: $FIRST_LBA"
|
|
echo "last-lba: $LAST_LBA"
|
|
echo "sector-size: $SECTOR"
|
|
echo ""
|
|
echo "${FILE}1 : start=$START, size=$COUNT, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=05157F6E-0AE8-4D1A-BEA5-AC172453D02C, name=\"primary\""
|
|
|
|
} > "$PART"
|
|
|
|
sfdisk -q "$IMG" < "$PART"
|
|
|
|
echo "drive c: file=\"$IMG\" partition=0 offset=$OFFSET" > /etc/mtools.conf
|
|
|
|
mformat -F -M "$SECTOR" -c "$CLUSTER" -T "$COUNT" -v "EFI" "C:"
|
|
|
|
echo "Copying files to image..."
|
|
|
|
mcopy -bspmQ "$OUT/EFI" "C:"
|
|
rm -rf "$OUT"
|
|
|
|
echo "Compressing image..."
|
|
|
|
gzip -c "$IMG" > "$DST/$FILE.gz"
|
|
rm -f "$IMG"
|
|
|
|
echo "Finished succesfully!"
|