Skip to content

Instantly share code, notes, and snippets.

@Filiprogrammer
Last active April 26, 2023 13:57
Show Gist options
  • Select an option

  • Save Filiprogrammer/601095701430d205b9fc7c9712e8f693 to your computer and use it in GitHub Desktop.

Select an option

Save Filiprogrammer/601095701430d205b9fc7c9712e8f693 to your computer and use it in GitHub Desktop.
#!/bin/sh
cd "$(dirname "$(readlink -f "$0")")"
set -e
set -x
IMAGE_SIZE=2G
BOOT_PARTITION_SIZE=64MiB
IMAGE_OUTPUT_FILE=debian.img
DEBIAN_ROOT=$(mktemp -d)
dd bs=$IMAGE_SIZE seek=1 of=$IMAGE_OUTPUT_FILE count=0
parted -s $IMAGE_OUTPUT_FILE mklabel gpt
parted -m $IMAGE_OUTPUT_FILE print
parted -s $IMAGE_OUTPUT_FILE -- mkpart EFI fat16 0% $BOOT_PARTITION_SIZE
parted -s $IMAGE_OUTPUT_FILE set 1 msftdata on
parted -m $IMAGE_OUTPUT_FILE print
parted -s $IMAGE_OUTPUT_FILE -- mkpart primary ext2 $BOOT_PARTITION_SIZE 100%
parted -m $IMAGE_OUTPUT_FILE print
KPARTX_OUTPUT=$(kpartx -asv $IMAGE_OUTPUT_FILE)
DEB_P1=$(echo $KPARTX_OUTPUT | awk '{print $3}')
DEB_P2=$(echo $KPARTX_OUTPUT | awk '{print $12}')
/sbin/mkfs -t vfat -n FILDEBFIRM /dev/mapper/$DEB_P1
/sbin/mkfs -t ext4 -L FILDEBROOT /dev/mapper/$DEB_P2
mkdir -p $DEBIAN_ROOT
mount /dev/mapper/$DEB_P2 $DEBIAN_ROOT
mkdir -p $DEBIAN_ROOT/boot/efi
mount /dev/mapper/$DEB_P1 $DEBIAN_ROOT/boot/efi
apt-get update
apt-get install --no-install-recommends debootstrap
debootstrap --verbose --arch amd64 --variant=minbase --components main,contrib,non-free bullseye $DEBIAN_ROOT http://deb.debian.org/debian
mount --rbind /sys $DEBIAN_ROOT/sys
mount --make-rslave $DEBIAN_ROOT/sys
mount --rbind /dev $DEBIAN_ROOT/dev
mount --make-rslave $DEBIAN_ROOT/dev
mount --rbind /proc $DEBIAN_ROOT/proc
mount --make-rslave $DEBIAN_ROOT/proc
# Add some mirrors to the package manager.
echo "deb http://deb.debian.org/debian bullseye main contrib non-free" > $DEBIAN_ROOT/etc/apt/sources.list
echo "deb http://deb.debian.org/debian bullseye-updates main contrib non-free" >> $DEBIAN_ROOT/etc/apt/sources.list
echo "deb http://security.debian.org/debian-security bullseye-security main contrib non-free" >> $DEBIAN_ROOT/etc/apt/sources.list
chroot $DEBIAN_ROOT apt-get update
chroot $DEBIAN_ROOT apt-get -y install --no-install-recommends linux-image-amd64 firmware-linux grub-efi-amd64 systemd-sysv
chroot $DEBIAN_ROOT apt-get -y install --no-install-recommends grub-pc
# Clean up package manager cache to free up some space.
chroot $DEBIAN_ROOT apt-get clean
chroot $DEBIAN_ROOT rm -rf /var/lib/apt/lists
echo "LABEL=FILDEBROOT / ext4 rw 0 1" > $DEBIAN_ROOT/etc/fstab
echo "LABEL=FILDEBFIRM /boot/efi vfat rw 0 2" >> $DEBIAN_ROOT/etc/fstab
echo "tmpfs /tmp tmpfs rw,nosuid,nodev 0 0" >> $DEBIAN_ROOT/etc/fstab
echo "debian" > $DEBIAN_ROOT/etc/hostname
sed -i 's,root:[^:]*:,root::,' $DEBIAN_ROOT/etc/shadow
chroot $DEBIAN_ROOT grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian --recheck --no-nvram --removable
chroot $DEBIAN_ROOT update-grub
umount $DEBIAN_ROOT/boot/efi
umount -R $DEBIAN_ROOT/sys
umount -R $DEBIAN_ROOT/dev
umount -R $DEBIAN_ROOT/proc
umount $DEBIAN_ROOT
kpartx -dsv $IMAGE_OUTPUT_FILE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment