diff --git a/debian-devuan-install-on-disk.sh b/debian-devuan-install-on-disk.sh new file mode 100755 index 0000000..15b8979 --- /dev/null +++ b/debian-devuan-install-on-disk.sh @@ -0,0 +1,144 @@ +#!/bin/sh +# Nico Schottelius, 2019-12-09 + +set -e +set -x + +if [ $# -ne 2 ]; then + echo $0 suite disk + exit 1 +fi + +suite=$1; shift +disk=$1; shift + +keyurl=https://key.wf + + +case $disk in + /dev/sd*) + partition=${disk}1 + ;; + /dev/mmcblk*|/dev/nvme*) + partition=${disk}p1 + ;; + *) + echo "Unsupported disk - edit this script" >&2 + exit 1 + ;; +esac + +chroot_dir=$(mktemp -d) +date=$(date +%F) + +basename=${suite}-${date} + +################################################################################ +# Disk preparation + +# Clean the first 2M - getting rid of old things +# in the gap and also the paritition table +dd if=/dev/zero of=${disk} bs=1M count=2 + +# Partition disk with 1 Linux partition +sudo sfdisk "$DISK" < ${chroot_dir}/etc/apt/sources.list + +chroot ${chroot_dir} apt update +chroot ${chroot_dir} apt install -y openssh-server rdnssd linux-image-amd64 firmware-bnx2 ifenslave vlan + +echo "unconfigured-host" > ${chroot_dir}/etc/hostname + +cp ${chroot_dir}/boot/vmlinuz-* ${kernel} + +echo '* * * * * root ip -o -6 addr show | grep -E -v " lo |one" > /etc/issue' > ${chroot_dir}/etc/cron.d/ipv6addr + +mkdir -p ${chroot_dir}/root/.ssh + +for key in sami dominique jinguk nico; do + curl -s ${keyurl}/${key} >> ${chroot_dir}/root/.ssh/authorized_keys +done + +# Fix possible permission issue from above +chown -R root:root ${chroot_dir}/root/ + +################################################################################ +# networking + +# echo bonding + +cat > ${chroot_dir}/etc/network/interfaces << EOF +auto lo +iface lo inet loopback + +# I would like to have a generic block like this below +# But as long as interface +auto bond0 +iface bond0 inet manual + bond-miimon 500 + bond-mode 4 + post-up /sbin/ip link set \$IFACE mtu 9000 + bond-slaves none + +auto eth0 +iface eth0 inet manual + bond-master bond0 + post-up /sbin/ip link set \$IFACE mtu 9000 + +auto eth1 +iface eth1 inet manual + bond-master bond0 + post-up /sbin/ip link set \$IFACE mtu 9000 + +# server network +auto bond0.11 +iface bond0.11 inet6 auto + post-up /sbin/ip link set \$IFACE mtu 9000 + vlan-raw-device bond0 + +EOF + +# # find the boot interfaces at boot: HP servers still have ifnames=1 +# cat > ${chroot_dir}/etc/rc.local <> /etc/network/interfaces << eof +# auto \$dev +# iface \$dev inet6 auto +# eof + +# ifup "\${dev}" + +# exit 0 +# EOF + +# chmod a+rx "${chroot_dir}/etc/rc.local" + +# ensure there is /init in the initramfs -> otherwise there is a kernel panic +# reason: initramfs is designed to be PRE regular os, so /init usually hands over to /sbin/init +# in our case, they are just the same +ln -fs /sbin/init ${chroot_dir}/init + +# Finally building the initramfs +( cd ${chroot_dir} ; find . | cpio -H newc -o | gzip -9 > ${initramfs} ) + +# Fix paranoid permissions +chmod a+rx ${abs_outdir} +chmod a+r ${kernel} ${initramfs} + + +exit 0