AMARGO LIBS

Ubuntu Install Test

janeiro 26, 2026


#! /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!"