#!/bin/bash -e #---------- # Interactive installation steps for Debian Bullseye from GRML using debootstrap # Setup network in grml grmlnetwork(){ ip link show # list interfaces ip addr add 203.0.113.66/24 dev eth0 ip link set eth0 up ip route add default via 203.0.113.1 echo 1.1.1.1 > /etc/resolv.conf } # Design decisions # - Add a small file-based swap partition as safety net # - Use systemd whereever possible (network, ntp, cron, journald logging) # - One partion on /dev/vda # - Minimal number of packages & cloud kernel # Variables mnt="/mnt/root" # mountpoint for the new root filesystem hostname="somehost.example.com" disk="/dev/vda" # lsblk --list disk1=$disk"1" netDev=eth0 netAddress=203.0.113.66/24 netGateway=203.0.113.1 netBroadcast=203.0.113.255 netDNS1=192.0.2.10 netDNS2=198.51.100.10 netNTP=pool.ntp.org [ -f ./config.sh ] && source config.sh # Check if the function exists case $1 in grmlnetwork) grmlnetwork() ;; install) install() ;; install2) install2() ;; bootloader) bootloader() ;; postinstall) postinstall() ;; *) echo "Valid functions are: grmlnetwork, install, postinstall" >&2 ;; esac install(){ #---------- # Prepare disks # Parition disks -- pkg: parted parted $disk -s \ mklabel msdos \ mkpart primary ext4 512M 100% toggle 1 boot fdisk -l $disk # Format disks -- pkg: e2fsprogs dosfstools and to file system check mkfs.ext4 $disk1 && e2fsck $disk1 # Prepare mount points and mount mkdir -p $mnt mount $disk1 $mnt # Create swapfile swapfile=$mnt/swapfile dd if=/dev/zero of=$swapfile bs=1M count=1024 status=progress # create 1GB file chmod 600 $swapfile #restric permissions mkswap $swapfile #format file #---------- # Bootstrap -- pkg: debootstrap # Remark: Debootstrap does not install recommands!! debootstrap --variant=minbase --arch=amd64 bullseye $mnt http://ftp2.de.debian.org/debian/ #---------- # Configuration # Configure disk mounts # Or get UUID from blkid... cat >$mnt/etc/fstab </etc/apt/sources.list <> /etc/hosts echo $hostname > /etc/hostname #---------- # Prepare chroot mount -o bind /dev $mnt/dev mount -o bind /dev/pts $mnt/dev/pts mount -t sysfs /sys $mnt/sys mount -t proc /proc $mnt/proc cp /proc/mounts $mnt/etc/mtab cp /etc/resolv.conf $mnt/etc/resolv.conf mkdir -p $mnt/installer cp $(dirname `realpath $0`)/*.sh $mnt/installer # Run script in chroot chroot $mnt /bin/bash $mnt/installer/bootrap-bullseye.sh install2 # Install bootloader $0 bootloader } #---------- # Function executed within chroot install2(){ # Install basic system apt-get update apt-get install --yes \ apt-utils dialog msmtp-mta \ systemd-sysv locales tzdata haveged \ linux-image-cloud-amd64 grub-pc \ iproute2 netbase \ ssh sudo \ less vim-tiny bash-completion pwgen lsof \ dnsutils iputils-ping curl # Upgrade and clean up apt-get upgrade --yes apt-get autoremove --yes apt-get clean --yes # Setup users pass=`pwgen --capitalize --numerals --ambiguous 12 1` useradd admin --create-home --shell /bin/bash echo "admin:$pass" | chpasswd echo 'root:sa' | chpasswd usermod -a -G sudo admin echo -e "\e[1;33;4;44mPassword for the user admin: $pass\e[0m" # Harden SSHD echo AllowUsers admin >> /etc/ssh/sshd_config sed -i -e 's/#Port 22/Port 50101/g' /etc/ssh/sshd_config sed -i -e 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config ## Configure network using systemd if [ ! -z $netAddress ] then ## Network OPTION 1 - DHCP cat >/etc/systemd/network/20-wired.network </etc/systemd/network/20-wired.network <>/etc/systemd/journald.conf </etc/update-motd.d/15-boot-errors<