Mídia de instalação USB do macOS High Sierra (10.13.6) pelo Linux

Consiste em criar uma única partição HFS+, colocar o conteúdo de BaseSystem.dmg dentro e depois copiar alguns arquivos para o diretório Install macOS High Sierra.app/Contents/SharedSupport (incluindo o próprio BaseSystem.dmg). Para nossa sorte, o Linux tem suporte razoável, de leitura e escrita, ao HFS+, desde que não tenha journal. Instale o pacote hfsplus-tools (Fedora) ou hfsprogs (Debian).

Não funciona em Hackintosh. Rode como root e adapte USBDEV.

#!/bin/bash
set -e

# dispositivo a ser usado
# apagará tudo!
USBDEV=/dev/sdx

# para outras versões, pesquisar em
# https://swscan.apple.com/content/catalogs/others/index-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz
# https://swscan.apple.com/content/catalogs/others/index-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz
# https://swscan.apple.com/content/catalogs/others/index-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz
# https://swscan.apple.com/content/catalogs/others/index-10.16-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz
# https://swscan.apple.com/content/catalogs/others/index-12-10.16-10.15-10.14-10.13-10.12-10.11-10.10-10.9-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog.gz
# procurando pelo elemento <key>xxx-xxxxx</key> (ProductID) adequado
#
# aqui tem um script que automatiza o download, porém é para macOS:
# https://github.com/munki/macadmin-scripts
#
# somas de verificação:
# https://github.com/notpeter/apple-installer-checksums
#
wget http://swcdn.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/AppleDiagnostics.chunklist
wget http://swcdn.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/AppleDiagnostics.dmg
wget http://swcdn.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/BaseSystem.chunklist
wget http://swcdn.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/BaseSystem.dmg
wget http://swcdn.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/InstallESDDmg.pkg
wget http://swcdn.apple.com/content/downloads/06/50/041-91758-A_M8T44LH2AW/b5r4og05fhbgatve4agwy4kgkzv07mdid9/InstallInfo.plist
mv InstallESDDmg.pkg InstallESD.dmg

# torçamos para que a posição das linhas não mude em outras versões
sed -i '30,33d' InstallInfo.plist
sed -i 's/InstallESDDmg.pkg/InstallESD.dmg/' InstallInfo.plist
sed -i 's/com.apple.pkg.InstallESDDmg/com.apple.pkg.InstallESD/' InstallInfo.plist

# 7za não tem todos os recursos do 7-Zip oficial
# binário estático 7zzs funcionará em qualquer distribuição
wget https://www.7-zip.org/a/7z2201-linux-x64.tar.xz
tar -xf 7z2201-linux-x64.tar.xz
# queremos o sistema de arquivos
./7zzs e BaseSystem.dmg 4.hfs -t\*

# única partição do tipo Apple HFS/HFS+
echo ',,48465300-0000-11AA-AA11-00306543ECAC' | sfdisk --lock=yes --wipe=always --wipe-partitions=always --label=gpt $USBDEV
udevadm settle
mkfs.hfsplus -v 'OS X Base System' ${USBDEV}1

mkdir -pv /mnt/{mac-base,mac-usb}
mount -rv 4.hfs /mnt/mac-base
mount -v ${USBDEV}1 /mnt/mac-usb

# driver hfsplus trava copiando xattr (alguém disposto a reportar o bug?)
cp -avT --no-preserve=xattr /mnt/{mac-base,mac-usb}
mkdir -v "$(compgen -G /mnt/mac-usb/Install\*.app)/Contents/SharedSupport"
cp -v AppleDiagnostics.* BaseSystem.* InstallESD.dmg InstallInfo.plist /mnt/mac-usb/Install*.app/Contents/SharedSupport
umount -v /mnt/{mac-base,mac-usb}
rmdir -v /mnt/{mac-base,mac-usb}

Comentários