Begin script for disk installation of debian/devuan
This commit is contained in:
parent
dd156563ce
commit
b17039d74e
1 changed files with 144 additions and 0 deletions
144
debian-devuan-install-on-disk.sh
Executable file
144
debian-devuan-install-on-disk.sh
Executable file
|
@ -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" <<EOF
|
||||
label: dos
|
||||
,,L
|
||||
EOF
|
||||
|
||||
# For creation, if an existing filesystem is on the partitions
|
||||
sudo mkfs.ext4 -F ${partition}
|
||||
|
||||
sudo mount ${partition} ${chroot_dir}
|
||||
|
||||
# Devuan: debootstrap beowulf /tmp/tmp.teGuJxytz0 http://packages.devuan.org/devuan
|
||||
debootstrap "${suite}" "${chroot_dir}"
|
||||
|
||||
# need non-free for firmware-bnx2
|
||||
echo "deb http://pkgmaster.devuan.org/merged ${suite} main contrib non-free" > ${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 <<EOF
|
||||
# mac=\$(cat /proc/cmdline | tr ' ' '\n' | awk -F= '/bootdev/ { print \$2 }')
|
||||
# dev=\$(ip -o link | awk -F: "/\$mac/ { print \\\$2 }" | sed 's/ *//g')
|
||||
|
||||
# cat >> /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
|
Loading…
Reference in a new issue