Skip to content

Instantly share code, notes, and snippets.

@DIEGOHORVATTI
Created November 10, 2024 02:41
Show Gist options
  • Save DIEGOHORVATTI/8e96c91f5a823ae8005e4c1991ed0a59 to your computer and use it in GitHub Desktop.
Save DIEGOHORVATTI/8e96c91f5a823ae8005e4c1991ed0a59 to your computer and use it in GitHub Desktop.
Creating a bootable USB from a macOS dmg file
#!/bin/bash
# Função de ajuda
show_help() {
echo "Uso: $0 --dmg <caminho_para_o_arquivo.dmg> --usb <dispositivo_usb>"
echo
echo "Exemplo: $0 --dmg ./sonoma.dmg --usb /dev/sdb"
exit 1
}
# Verificar se o script está sendo executado como root
if [ "$(id -u)" -ne 0 ]; then
echo "Este script deve ser executado como root."
exit 1
fi
# Função para verificar se o dispositivo existe
check_device() {
if [ ! -b "$1" ]; then
echo "Dispositivo $1 não encontrado!"
exit 1
fi
}
# Parse de parâmetros
while [[ "$#" -gt 0 ]]; do
case "$1" in
--dmg)
dmg_file="$2"
shift 2
;;
--usb)
usb_device="$2"
shift 2
;;
*)
show_help
;;
esac
done
# Verificar se os parâmetros foram fornecidos
if [ -z "$dmg_file" ] || [ -z "$usb_device" ]; then
echo "Erro: --dmg e --usb são obrigatórios."
show_help
fi
# Verificar se o arquivo DMG existe
if [ ! -f "$dmg_file" ]; then
echo "Arquivo DMG não encontrado: $dmg_file"
exit 1
fi
# Verificar se o dispositivo USB existe
check_device "$usb_device"
# Listar os dispositivos de armazenamento para confirmar
lsblk
# Confirmação do usuário para apagar o USB
echo "ATENÇÃO! Todos os dados do dispositivo $usb_device serão apagados!"
read -p "Deseja continuar? (y/n): " confirm
if [ "$confirm" != "y" ]; then
echo "Operação cancelada."
exit 1
fi
# Criar tabela de partições GPT no USB
echo "Criando tabela de partições GPT no dispositivo USB..."
parted $usb_device mklabel gpt
# Criar partição EFI (FAT32)
echo "Criando partição EFI..."
parted $usb_device mkpart primary fat32 1MiB 100%
# Esperar o sistema reconhecer a nova partição
sleep 2
# Formatando a partição como FAT32
echo "Formatando a partição como FAT32..."
mkfs.fat -F 32 ${usb_device}1
# Montar a partição EFI do USB
echo "Montando a partição do USB..."
mount ${usb_device}1 /mnt/usb
# Verificar se a ferramenta dmg2img está instalada para converter o DMG em ISO
if ! command -v dmg2img &> /dev/null; then
echo "dmg2img não encontrado, instalando..."
apt-get install -y dmg2img
fi
# Converter o DMG para ISO, se necessário
iso_file="/tmp/macos.iso"
echo "Convertendo DMG para ISO..."
dmg2img "$dmg_file" "$iso_file"
# Montar a ISO do macOS
echo "Montando a ISO do macOS..."
mkdir -p /mnt/macos
mount -o loop "$iso_file" /mnt/macos
# Copiar os arquivos da ISO para o USB
echo "Copiando os arquivos da ISO para o USB..."
cp -r /mnt/macos/* /mnt/usb/
# Instalar o rEFInd na partição EFI do USB
echo "Instalando o rEFInd no USB..."
apt update
apt install -y refind
refind-install --install-dir /mnt/usb/EFI
# Desmontar tudo
echo "Desmontando as partições..."
umount /mnt/macos
umount /mnt/usb
# Remover o arquivo ISO temporário
rm -f "$iso_file"
# Mensagem final
echo "USB inicializável com macOS criado com sucesso!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment