Created
November 10, 2024 02:41
-
-
Save DIEGOHORVATTI/8e96c91f5a823ae8005e4c1991ed0a59 to your computer and use it in GitHub Desktop.
Creating a bootable USB from a macOS dmg file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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