#! /bin/bash
set -e
# Verificar se o bzImage existe
if [ -f "bzImage" ]; then
echo "bzImage já existe."
else
echo "bzImage não encontrado. Realizando o download..."
gdown 1P36I5D0y668fucIgVtglepLu5HUgzASv
fi
DISK="/dev/sda"
MOUNTPOINT="/mnt"
PRECOMPILED_BZIMAGE="/root/bzImage"
# Tamanhos em MiB
BOOT_SIZE=500
SWAP_SIZE=1024
echo "Detectando tamanho do disco $DISK..."
DISK_SIZE_BYTES=$(blockdev --getsize64 "$DISK")
DISK_SIZE_MIB=$((DISK_SIZE_BYTES / 1024 / 1024))
ROOT_SIZE=$((DISK_SIZE_MIB - BOOT_SIZE - SWAP_SIZE))
if (( ROOT_SIZE <= 0 )); then
echo "Erro: disco muito pequeno."
exit 1
fi
echo "Criando tabela de partições..."
parted -s "$DISK" mklabel msdos
parted -s -a optimal "$DISK" mkpart primary ext4 1MiB $((BOOT_SIZE + 1))MiB
parted -s "$DISK" set 1 boot on
parted -s -a optimal "$DISK" mkpart primary ext4 $((BOOT_SIZE + 1))MiB $((BOOT_SIZE + ROOT_SIZE + 1))MiB
parted -s -a optimal "$DISK" mkpart primary linux-swap $((BOOT_SIZE + ROOT_SIZE + 1))MiB 100%
BOOT_PART="${DISK}1"
ROOT_PART="${DISK}2"
SWAP_PART="${DISK}3"
echo "Formatando e Montando..."
mkfs.ext4 "$BOOT_PART"
mkfs.ext4 "$ROOT_PART"
mkswap "$SWAP_PART"
swapon "$SWAP_PART"
mount "$ROOT_PART" "$MOUNTPOINT"
mkdir -p "$MOUNTPOINT/boot"
mount "$BOOT_PART" "$MOUNTPOINT/boot"
cd "$MOUNTPOINT"
UBUNTU_BASE_URL='https://cdimage.ubuntu.com/ubuntu-base/releases/25.10/snapshot-1/ubuntu-base-25.10-snapshot1-base-amd64.tar.gz'
curl -LO "$UBUNTU_BASE_URL"
tar -xzf ubuntu-base-25.10-snapshot1-base-amd64.tar.gz
rm ubuntu-base-25.10-snapshot1-base-amd64.tar.gz
mount --bind /dev "$MOUNTPOINT/dev"
mount --bind /sys "$MOUNTPOINT/sys"
mount --bind /proc "$MOUNTPOINT/proc"
echo "nameserver 8.8.8.8" > "$MOUNTPOINT/etc/resolv.conf"
cp "$PRECOMPILED_BZIMAGE" "$MOUNTPOINT/boot/vmlinuz-custom"
echo "Entrando no chroot..."
chroot "$MOUNTPOINT" /bin/bash -c '
set -e
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y --no-install-recommends grub-pc linux-image-generic network-manager sudo systemd initramfs-tools locales
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
locale-gen
echo "root:root" | chpasswd
# Configuração de arquivos usando Quoted EOF para proteger variáveis
cat > /etc/fstab << "EOF"
/dev/sda2 / ext4 errors=remount-ro 0 1
/dev/sda1 /boot ext4 defaults 0 2
/dev/sda3 none swap sw 0 0
EOF
cat > /etc/default/grub << "EOF"
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Custom Linux"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="root=/dev/sda2"
EOF
# Gerando o menu customizado
cat > /etc/grub.d/10_linux_custom << "EOF"
#!/bin/sh
cat << EOM
menuentry "Custom Linux" {
load_video
insmod gzio
insmod part_msdos
insmod ext2
set root=(hd0,msdos1)
linux /boot/vmlinuz-custom root=/dev/sda2 ro quiet splash
initrd /boot/initrd.img-5.0.0-custom
}
EOM
EOF
chmod +x /etc/grub.d/10_linux_custom
grub-install --target=i386-pc --recheck /dev/sda
update-grub
systemctl enable NetworkManager
'
echo "Finalizando..."
umount "$MOUNTPOINT/dev" "$MOUNTPOINT/sys" "$MOUNTPOINT/proc" "$MOUNTPOINT/boot" "$MOUNTPOINT"
swapoff "$SWAP_PART"
echo "✅ Pronto!"