User:Jchdel: Difference between revisions
m (how to select fastest uplink on a router (optimization)) |
mNo edit summary |
||
(11 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
to | My current home/lab setup is | ||
* An Alpine router x86_64 running https://github.com/jchdel/select-fastest-gateway connected to two or three different uplinks | |||
* a switch | |||
* a R-Pi 4 (used as usual desktop) also in 64 bits | |||
* a tower (16 cores x86_64, 128GB RAM) running Alpine, [[openVSwitch]] and [[qemu]]-kvm | |||
* dual 43" 4K (DP to desktop, HDMI to R-Pi 4) | |||
I plan to run a Xorg desktop headless in some KVM and remotely connect to it from the R-Pi as X station... | |||
And to drive other dev and build boxes as KVM. | |||
What about https://github.com/e1z0/Framebuffer-browser on Alpine? I plan to give a try and maybe package it... | |||
<pre> | <pre> | ||
#!/bin/ | #!/bin/sh | ||
# This script | set -x | ||
# | # This script is intended to transform an Alpine Linux USB key running in | ||
# diskless mode into a PXE boot server. | |||
# It will run with a fixed IP 10.33.0.1 on eth0 acting as primary DHCP | |||
# server. | |||
# Only packages present in the local boot media will be available for | |||
# booted boxes. | |||
set -e | |||
mount -o remount,rw /media/usb | |||
do | # Let's do all downloads first! | ||
sed -i -e '/community/s/^#//' -e '/edge/d' /etc/apk/repositories | |||
apk update | |||
apk add darkhttpd nfs-utils dnsmasq syslinux | |||
ALPINE=alpine-netboot-3.17.3-x86_64.tar.gz | |||
[ -f $ALPINE ] || \ | |||
while true;do | |||
wget -c https://dl-cdn.alpinelinux.org/alpine/v3.17/releases/x86_64/$ALPINE \ | |||
&& break | |||
done | done | ||
mkdir -p /media/usb/tftpboot/pxelinux/pxelinux.cfg | |||
# populate TFTP server | |||
rm -fr /tmp/boot | |||
tar xf alpine-netboot-3.17.3-x86_64.tar.gz -C /tmp | |||
cp -r /tmp/boot/* /media/usb/tftpboot/pxelinux/ | |||
# populate HTTP server | |||
#cd /media/usb | |||
# add default apkovl.tar.gz here | |||
# configure darkhttpd | |||
sed -i -e 's+/var/www/localhost/htdocs+/media/usb+' /etc/init.d/darkhttpd | |||
lbu add /etc/init.d/darkhttpd | |||
# populate NFS server | |||
## implicit as we publish /media/usb | |||
# configure NFS for PXE boot | |||
cat << EOF > /etc/exports | |||
# /etc/exports | |||
# | |||
# See exports(5) for a description. | |||
# | |||
# use exportfs -arv to reread | |||
# | /media/usb *(ro,no_root_squash,no_subtree_check) | ||
EOF | |||
# configure dnsmasq for PXE boot | |||
cat << EOF > /etc/dnsmasq.d/stamp.conf | |||
# DNS related options | |||
interface=eth0 | |||
listen-address=10.33.0.1 | |||
listen-address=127.0.0.1 | |||
## uplink resolver | |||
# | server=1.1.1.1 | ||
# DHCP related options | |||
dhcp-range=10.33.0.1,10.33.1.254,12h | |||
## push router | |||
dhcp-option=option:router,10.33.0.1 | |||
## push resolver | |||
dhcp-option=6,10.33.0.1 | |||
# PXE (TFTP) related options | |||
enable-tftp | |||
dhcp-boot=pxelinux/pxelinux.0 | |||
tftp-root=/media/usb/tftpboot | |||
EOF | |||
cp /usr/share/syslinux/pxelinux.0 /media/usb/tftpboot/pxelinux/ | |||
cp /usr/share/syslinux/ldlinux.c32 /media/usb/tftpboot/pxelinux/ | |||
cat << EOF > /media/usb/tftpboot/pxelinux/pxelinux.cfg/default | |||
PROMPT 0 | |||
TIMEOUT 3 | |||
default alpine | |||
LABEL alpine | |||
LINUX vmlinuz-lts | |||
INITRD pxerd | |||
APPEND ip=dhcp alpine_dev=nfs:10.33.0.1:/media/usb/boot modloop=http://10.33.0.1/boot/modloop-lts nomodeset apkovl=http://10.33.0.1/stamp/default.apkovl.tar.gz alpine_repo=http://10.33.0.1/apks | |||
EOF | |||
# generate initramfs for PXE | |||
if [ ! -f /media/usb/tftpboot/pxelinux/pxerd ];then | |||
cd /etc/mkinitfs/features.d/ | |||
echo "kernel/drivers/net/virtio_net.ko" >> network.modules | |||
echo "kernel/drivers/net/ethernet/e1000/*.ko" >> network.modules | |||
echo "/usr/share/udhcpc/default.script" > dhcp.files | |||
echo "kernel/net/packet/af_packet.ko" > dhcp.modules | |||
echo "kernel/fs/nfs/*" > nfs.modules | |||
cd /etc/mkinitfs/ | |||
echo 'features="ata base bootchart cdrom cramfs ext2 ext3 ext4 xfs floppy keymap kms raid scsi usb virtio squashfs network dhcp nfs"' > mkinitfs.conf | |||
mkinitfs -o /media/usb/tftpboot/pxelinux/pxerd | |||
fi | |||
# console welcome message | |||
cat << EOF > /etc/motd | |||
This a PXE server intended to deploy a fleet of diskless Alpine Linux. | |||
EOF | |||
cat << EOF > /etc/network/interfaces | |||
auto lo | |||
iface lo inet loopback | |||
auto eth0 | |||
iface eth0 inet static | |||
address 10.33.0.1 | |||
netmask 255.255.0.0 | |||
EOF | |||
# force install from cache at reboot | |||
cat << EOF > /etc/local.d/fix.start | |||
#!/bin/sh | |||
apk add darkhttpd | |||
service darkhttpd start | |||
EOF | |||
chmod +x /etc/local.d/fix.start | |||
# enable services at reboot | |||
rc-update add local | |||
rc-update add darkhttpd | |||
rc-update add nfs | |||
rc-update add dnsmasq | |||
# persist changes | |||
sync | |||
apk cache -v sync | |||
mount -o remount,ro /media/usb | |||
lbu ci | |||
echo "Press 'Enter' to reboot and act as PXE boot server" | |||
echo "or 'ctrl-c' to go back to the terminal..." | |||
read | |||
reboot | |||
</pre> | </pre> |
Latest revision as of 12:39, 30 May 2023
My current home/lab setup is
- An Alpine router x86_64 running https://github.com/jchdel/select-fastest-gateway connected to two or three different uplinks
- a switch
- a R-Pi 4 (used as usual desktop) also in 64 bits
- a tower (16 cores x86_64, 128GB RAM) running Alpine, openVSwitch and qemu-kvm
- dual 43" 4K (DP to desktop, HDMI to R-Pi 4)
I plan to run a Xorg desktop headless in some KVM and remotely connect to it from the R-Pi as X station... And to drive other dev and build boxes as KVM.
What about https://github.com/e1z0/Framebuffer-browser on Alpine? I plan to give a try and maybe package it...
#!/bin/sh set -x # This script is intended to transform an Alpine Linux USB key running in # diskless mode into a PXE boot server. # It will run with a fixed IP 10.33.0.1 on eth0 acting as primary DHCP # server. # Only packages present in the local boot media will be available for # booted boxes. set -e mount -o remount,rw /media/usb # Let's do all downloads first! sed -i -e '/community/s/^#//' -e '/edge/d' /etc/apk/repositories apk update apk add darkhttpd nfs-utils dnsmasq syslinux ALPINE=alpine-netboot-3.17.3-x86_64.tar.gz [ -f $ALPINE ] || \ while true;do wget -c https://dl-cdn.alpinelinux.org/alpine/v3.17/releases/x86_64/$ALPINE \ && break done mkdir -p /media/usb/tftpboot/pxelinux/pxelinux.cfg # populate TFTP server rm -fr /tmp/boot tar xf alpine-netboot-3.17.3-x86_64.tar.gz -C /tmp cp -r /tmp/boot/* /media/usb/tftpboot/pxelinux/ # populate HTTP server #cd /media/usb # add default apkovl.tar.gz here # configure darkhttpd sed -i -e 's+/var/www/localhost/htdocs+/media/usb+' /etc/init.d/darkhttpd lbu add /etc/init.d/darkhttpd # populate NFS server ## implicit as we publish /media/usb # configure NFS for PXE boot cat << EOF > /etc/exports # /etc/exports # # See exports(5) for a description. # use exportfs -arv to reread /media/usb *(ro,no_root_squash,no_subtree_check) EOF # configure dnsmasq for PXE boot cat << EOF > /etc/dnsmasq.d/stamp.conf # DNS related options interface=eth0 listen-address=10.33.0.1 listen-address=127.0.0.1 ## uplink resolver server=1.1.1.1 # DHCP related options dhcp-range=10.33.0.1,10.33.1.254,12h ## push router dhcp-option=option:router,10.33.0.1 ## push resolver dhcp-option=6,10.33.0.1 # PXE (TFTP) related options enable-tftp dhcp-boot=pxelinux/pxelinux.0 tftp-root=/media/usb/tftpboot EOF cp /usr/share/syslinux/pxelinux.0 /media/usb/tftpboot/pxelinux/ cp /usr/share/syslinux/ldlinux.c32 /media/usb/tftpboot/pxelinux/ cat << EOF > /media/usb/tftpboot/pxelinux/pxelinux.cfg/default PROMPT 0 TIMEOUT 3 default alpine LABEL alpine LINUX vmlinuz-lts INITRD pxerd APPEND ip=dhcp alpine_dev=nfs:10.33.0.1:/media/usb/boot modloop=http://10.33.0.1/boot/modloop-lts nomodeset apkovl=http://10.33.0.1/stamp/default.apkovl.tar.gz alpine_repo=http://10.33.0.1/apks EOF # generate initramfs for PXE if [ ! -f /media/usb/tftpboot/pxelinux/pxerd ];then cd /etc/mkinitfs/features.d/ echo "kernel/drivers/net/virtio_net.ko" >> network.modules echo "kernel/drivers/net/ethernet/e1000/*.ko" >> network.modules echo "/usr/share/udhcpc/default.script" > dhcp.files echo "kernel/net/packet/af_packet.ko" > dhcp.modules echo "kernel/fs/nfs/*" > nfs.modules cd /etc/mkinitfs/ echo 'features="ata base bootchart cdrom cramfs ext2 ext3 ext4 xfs floppy keymap kms raid scsi usb virtio squashfs network dhcp nfs"' > mkinitfs.conf mkinitfs -o /media/usb/tftpboot/pxelinux/pxerd fi # console welcome message cat << EOF > /etc/motd This a PXE server intended to deploy a fleet of diskless Alpine Linux. EOF cat << EOF > /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.33.0.1 netmask 255.255.0.0 EOF # force install from cache at reboot cat << EOF > /etc/local.d/fix.start #!/bin/sh apk add darkhttpd service darkhttpd start EOF chmod +x /etc/local.d/fix.start # enable services at reboot rc-update add local rc-update add darkhttpd rc-update add nfs rc-update add dnsmasq # persist changes sync apk cache -v sync mount -o remount,ro /media/usb lbu ci echo "Press 'Enter' to reboot and act as PXE boot server" echo "or 'ctrl-c' to go back to the terminal..." read reboot