Debian på PogoPlug diskløs – 10 år senere

Pogo-Plug er en 15 år gammel computer med en 1.2 GHz ARM CPU, Gigabit ethernet og 256 Mb RAM,  Dagens standard  er f.ex en Raspberry Pi 5, som har en Quad core 2.4 GHz ARM CPU, og op til 16 Gb RAM.  I mine øjne er der ikke ske meget på 15 år, i hvertfald ikke i forhold til hvad jeg kørte på i 1985, Da var state of the art en Sun3/50 med 15Mhz 68020 CPU og 4 Mb Ram, den bootede over netværket og det var der NFS-v2 protokollen blev introduceret.

Year 1985 2010 2025
CPU MC 68020
15 Mhz
Arm v5
1.2 GHz
Arm v8
4 x 2.4GHz
Netværk 10 Mbit/sec 1 Gbit/sec 1 Gbit/sec
MIPS 1.5 996 7814
MIPS stigning/år 30% 15%
Network stigning/år 20% 0%

 

Sålænge man holder sig fra grafik og floating-point beregninger, er Kirkwood CPU-en i en PogoPlug faktisk ganske fin selv idag. Den er sammenlignelig med en Raspberry Pi zero, med Gigabit ethernet og halvt så meget RAM.  I sin tid kunne man være heldig og købe dem for $10 leveret, da CloudEngines troede de skulle tjene penge på Skyen.

For mere end 10 år siden beskrev jeg hvordan jeg brugte Pogo-Plugs som diskløse klienter, ved at skifte alt programmelet på dem inklusiv BIOS.

Der er såmænd ikke sket så meget de sidste 10 år, den største udvikling er at mange Linux distributioner ikke supporterer NFS-v2 file-server-protokollen mere.  Dermed skal man enten bruge en ældre Linux distribution, eller man skal opdatere uBoot på selve Pogo-Plugen til en nyere version der kan boot via NFS-v3, proceduren beskrev jeg tilbage i 2015

Bodhi har opdateret uBoot flere gange siden, men proceduren er den samme.

Bodhi sørger stadig for at Debian på Pogo-Plugs er helt up-to-date, i skrivende stund er det Debian-12 med en 6.15.2 Linux kernel

Download:

På serveren

Jeg bruger Ubuntu filserver, men det kunne være hvad-som-helst,

  • Ubuntu-20.04 har NFS-v2 server support som standard
  • Ubuntu-22.04 kan bringes til at supportere NFS-v2 ved at tilføje: udp=y og vers=2 til /etc/nfs.conf
  • Ubuntu-24.04 ingen NFS-v2 mulighed, så der skal bootes via TFTP som er en endnu ældre protokol – Det er tid for mig til at sige farvel til Ubuntu, det har været 20 gode år.

Her er hvad jeg gør for at installere et NFS bootbart filsystem.

Vi skal lave et Debian-root-filsystem i /home/pogo/debian12-armel, så lad os gå igang:

POGO_ROOT=/home/pogo/debian12-armel
mkdir  $POGO_ROOT
tar -C $POGO_ROOT -xvf Debian-6.5.7-kirkwood-tld-1-rootfs-bodhi.tar.bz2
tar -C root -xvf linux-6.15.2-kirkwood-tld-1-bodhi.tar.bz2

 

I 2018 beskrev jeg hvordan man kan configurere filsystemet for en Raspberry Pi  fra et Intel baseret linux computer.

Dette kan vi selvfølgelig også gøre her, og dermed kan vi configure alt vi ønsker inden vi booter vores Pogo-Plug første gang, og uden at forlade sofaen.

#!/bin/sh
usage() {
	[ $# == 0 ] || echo "ERROR: $*"
	echo "usage: pogodo <-s> <cmd>"
	echo " -s	chroot shell on pogo (default)"
	echo " cmd      chroot rpi cmd"
	exit
}
POGO_ROOT=/home/pogo/debian12.armel
VERBOSE=${VERBOSE-0}
  echo2() { echo "# $*" 1>&2; }
 vecho2() { [ $VERBOSE -lt 1 ] || echo2 $*; }
vvecho2() { [ $VERBOSE -lt 2 ] || echo2 $*; }

is_mounted() { mount | grep $(realpath $1) >/dev/null; }

while getopts ?qsv opt;do
	case $opt in
	s) CMD="bash -i" ;;
	v) VERBOSE=$(($VERBOSE+1)) ;;
	*) usage ;;
	esac
done
[ $VERBOSE -lt 2 ] || set -x

if [ x"$CMD" = x ]; then
	shift $(($OPTIND-1))
	CMD="$@"
fi

if [ ! -d "${POGO_ROOT}" -o ! -f "$POGO_ROOT/etc/issue" ]; then
	usage Pogo rootfs not as expected
fi

for f in proc dev sys home/peter-iot; do
	is_mounted $POGO_ROOT/$f || sudo mount --bind /$f $POGO_ROOT/$f
done

sudo rsync /usr/bin/qemu-arm*-static ${POGO_ROOT}/usr/bin/
sudo chroot ${POGO_ROOT} $CMD

for f in proc dev sys home/peter-iot; do
	sudo umount $POGO_ROOT/$f
done

pogodo scriptet der er ovenfor, kører en shell eller kommando i et chroot miljø, qemu sørger for programmerne der jo er armel binære kan køres på en den Intel CPU der sider i min server.

Bodhi’s Linux-kernen og FDT beskrivelserne, som vi pakkede ud under root ovenfor skal installeres

pogodo   # resten foregår inde fra en chroot environment
KVER=6.15.2-kirkwood-tld-1_1_armel
cd /root 
dpkg -i linux-image-$KVER.deb
tar -C /boot -xvf linux-dtb-$KVER.tar
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 \
        -n initramfs -d /boot/initrd.img-$KVER /boot/uInitrd                                                                                                     
passwd root   # hvad med "Geheim" - det er hemmeligt
ln -s vmlinuz-$KVER /boot/zImage 
apt update # upgrade fra Debian-12.2 til nyest som er  Debian-12.11
apt dist-upgrade

Vi har nu installeret en minimal Debian-12 og en nyere linux-kerne i et directory på filserveren. Filsystemet er sådan set klar, ihvertfald til boot fra disk/usbstick/sdcard, men vi skal også lave et par NFSROOT relaterede ændringer:

apt install initramfs-tools
echo BOOT=nfs >> /etc/initramfs-tools/initramfs.conf
echo MODULES=netboot >> /etc/initramfs-tools/initramfs.conf
mkinitramfs -d /etc/initramfs-tools
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 \
        -n initramfs -d /boot/initrd.img-$KVER /boot/uInitrd

hostname fjernes så det kan sættes fra DHCP, nettet er allerede konfigureret, uden denne konfiguration skal vi sætte resolv.conf op selv, og for at undgå problemer ved nedlukning (der jo ikke adgang til noget hvis  nettet er lukket ned) skal reboot og halt ikke lukke nettet ned. http://www.iram.fr/~blanchet/tutorials/read-only_diskless_debian7.pdf

echo ASYNCMOUNTNFS=no >> /etc/default/rcS
echo RAMTMP=yes >> /etc/default/rcS
echo CONFIGURE_INTERFACES=no >> /etc/default/networking
rm /etc/hostname
cat << EOF >/etc/resolv.conf
domain pogo.lorenzen.us
search pogo.lorenzen.us
nameserver 192.168.3.1
nameserver 192.168.6.1
EOF

Filsystemet  skal exporteres og  DHCP serveren konfigureres så Pogo-Plug-erne kan boote herfra, en har root ReadWrite access, resten ReadOnly

cat <<EOF >/etc/exports
/home/pogo/debian12-armel *(ro,sync,no_root_squash,no_subtree_check) pogo_e02(rw,sync,no_root_squash,no_subtree_check)
/home/pogo/var/192.168.3.81 192.168.3.81(rw,insecure,sync,no_root_squash,no_subtree_check)
/home/pogo/var/192.168.3.82 192.168.3.82(rw,insecure,sync,no_root_squash,no_subtree_check)
/home/pogo/var/192.168.3.83 192.168.3.83(rw,insecure,sync,no_root_squash,no_subtree_check)
EOF
exportfs -a

Dette var ordene Pogo-Plugern skulle nu kunne boote, den der har Read/Write NFS-monteret filsystem kan installere software der også kan bruges af de andre Pogo-Plug-er der har ReadOnly root.

Der er nok ikke mange der kommer hele vejen igennem og læser dette, det gør ikke noget, det er mest for mig selv, f.ex. tog hele denne opgradering blot et par dage incl denne blog-post, da jeg jo havde min blog-post fra tidligere at gå ud fra

This entry was posted in HomeAutomation, Linux. Bookmark the permalink.

One Response to Debian på PogoPlug diskløs – 10 år senere

  1. Pingback: Klipper på PogoPlug | StorePeter

Comments are closed.