User:Jchdel: Difference between revisions

From Alpine Linux
mNo edit summary
mNo edit summary
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
My current home/lab setup is
My current home/lab setup is


* An Alpine router x86 running https://github.com/jchdel/select-fastest-gateway connected to two or three different uplinks
* An Alpine router x86_64 running https://github.com/jchdel/select-fastest-gateway connected to two or three different uplinks
* a switch
* a switch
* a R-Pi 4 (used as usual desktop)
* a R-Pi 4 (used as usual desktop) also in 64 bits
* a desktop (16 cores, 128GB RAM) (used as build box or simulator)
* 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)
* dual 43" 4K (DP to desktop, HDMI to R-Pi 4)
* a couple of x86-64 boxes lying aroung running Alpine
* 28" HD
* [''project''] home server ''(Alpine or Debian based?)''
** local time server
** local resolver cache
** Home Assistant (or Domoticz or... )
** Kodi (or other MMC)
** SMTP relay
** HTTP proxy (squid)
** privoxy
** file server
** HTTP reverse proxy (nginx)
** local package repository
** gitlab
** jenkins master (or other CI toolchain)
* [''project''] jenkins satellite build box(es)
* a CPL plug (to switch)
* a laptop (4 cores, 16GB RAM)
* a CPL plug (to emonPi)
* an emonPi, see http://openenergymonitor.org/, running MQTT
** a Davis Meteo station (data collected with weenx)
** a WKS Solar inverter (data collected with mpp-solar)
** several emonTh, see http://openenergymonitor.org/
** [''project''] https://www.zigbee2mqtt.io/
** [''project''] two Toons (by Quby) as home displays, see https://github.com/ToonSoftwareCollective


On top of the emonPI used as data logger for several IoT scattered among the house, I would like to deploy a multimedia center. And to add caching and filtering features to the router (squid, privoxy, tor, ...) and maybe basic internet services for internal consumption... Or I will dedicate a R-Pi 3 or a x86-64 as LAN server... dunno yet...
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.


I still have a full rack of servers and switches lying around but not the electricity power nor the internet uplink to make use of it :(
What about https://github.com/e1z0/Framebuffer-browser on Alpine? I plan to give a try and maybe package it...
 
<pre>
#!/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
</pre>

Latest revision as of 12:39, 30 May 2023

My current home/lab setup is

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