Simple script to prepare a diskless PXE/NFS Debian Buster

master
Vitaliy Filippov 2020-01-28 19:41:23 +03:00
commit c9d4b4a69a
2 changed files with 119 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
authorized_keys

118
debian_nfs.sh Executable file
View File

@ -0,0 +1,118 @@
#!/bin/bash
# Prepare diskless NFS Debian Buster with tmpfs overlay
# The idea is just to boot a node and expose SSH
# NFS export is /home/nfsboot
# TFTP root is /home/tftp
set -e
SERVER=172.31.1.5
SUBNET=172.31.1.0/24
CFG=`dirname $0`/debian_nfs.conf
[ -f "$CFG" ] && . $CFG
apt-get -y install pxelinux syslinux-common nfs-kernel-server dnsmasq
echo "/home/nfsboot $SUBNET(ro,no_root_squash)" >> /etc/exports
service nfs-kernel-server restart
service rpcbind restart
cat >/etc/dnsmasq.conf <<EOF
port=0
log-dhcp
enable-tftp
tftp-root=/home/tftp
dhcp-boot=pxelinux.0
pxe-service=x86PC,"Network Boot",pxelinux
dhcp-range=${SUBNET%%/*},proxy
#dhcp-host=70:85:C2:CE:B5:43,net:allow
#dhcp-ignore=tag:!known
EOF
service dnsmasq restart
mkdir -p /home/tftp
cp /usr/lib/PXELINUX/pxelinux.0 /home/tftp
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /home/tftp
mkdir -p /home/nfsboot
debootstrap buster /home/nfsboot
git clone https://github.com/chesty/overlayroot /home/overlayroot
mkdir -p /home/nfsboot/etc/initramfs-tools/hooks
mkdir -p /home/nfsboot/etc/initramfs-tools/scripts/init-bottom
cp /home/overlayroot/hooks-overlay /home/nfsboot/etc/initramfs-tools/hooks/
cp /home/overlayroot/init-bottom-overlay /home/nfsboot/etc/initramfs-tools/scripts/init-bottom/
mkdir -p /home/nfsboot/root/.ssh
cp `dirname $0`/authorized_keys /home/nfsboot/root/.ssh
chroot /home/nfsboot <<EOF
echo net-client > /etc/hostname
ln -s /proc/mounts /etc/mtab
echo 'deb http://http.debian.net/debian buster main contrib non-free' > /etc/apt/sources.list
echo 'APT::Install-Recommends "false";' > /etc/apt/apt.conf
echo 'APT::Install-Suggests "false";' >> /etc/apt/apt.conf
echo en_US.UTF-8 UTF-8 > /etc/locale.gen
echo ru_RU.UTF-8 UTF-8 >> /etc/locale.gen
apt-get update
apt-get install -y network-manager mc less git wget ca-certificates zip unzip curl smartmontools hdparm python3 bzip2 xz-utils file debootstrap \
openssh-server locales nfs-common linux-image-amd64 firmware-linux firmware-linux-nonfree firmware-amd-graphics firmware-realtek firmware-bnx2 firmware-bnx2x busybox
echo '/dev/nfs / nfs tcp,nolock,ro,soft 0 0' > /etc/fstab
echo 'tmpfs /tmp tmpfs defaults 0 0' >> /etc/fstab
rm -rf /var/tmp
ln -s /tmp /var/tmp
if ! grep -q "^overlay" /etc/initramfs-tools/modules; then
echo overlay >> /etc/initramfs-tools/modules
fi
cat >/etc/initramfs-tools/initramfs.conf <<EE
MODULES=netboot
BUSYBOX=auto
KEYMAP=n
COMPRESS=gzip
DEVICE=
NFSROOT=auto
BOOT=nfs
EE
update-initramfs -u -k all
rm -f /etc/ssh/ssh_host*
cat >/etc/rc.local <<EE
#!/bin/bash
ssh-keygen -A
systemctl restart ssh
exit 0
EE
chmod 755 /etc/rc.local
EOF
cp /home/nfsboot/boot/vmlinuz-* /home/tftp
cp /home/nfsboot/boot/initrd.img-* /home/tftp
cd /home/tftp
VMLINUZ=`ls -t vmlinuz-*|head -n1`
INITRD=`ls -t initrd.img-*|head -n1`
mkdir -p pxelinux.cfg
cat >pxelinux.cfg/default <<EOF
# boot diskless debian
default menu.c32
prompt 0
menu title pc-client
ontimeout debian_buster
timeout 5
label debian_buster
menu label $VMLINUZ debian buster
kernel $VMLINUZ
append root=/dev/nfs initrd=$INITRD nfsroot=$SERVER:/home/nfsboot ro nomodeset ipv6.disable=1
EOF