Debian på PogoPlug – helt fra scratch

Updated to support Debian-9/Linux-4.12 November 2017

Begyndelsen af denne her POST er på sin vis helt overflødigt da Bodhi allerede har gjort arbejdet og stillet det færdige filsystem “Debian-3.17.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2” tilrådighed lige her http://forum.doozan.com/read.php?2,12096.
Brug den, og gå så videre til GENVEJ.

Hvis du nu ikke lytter til mit råd ovenfor og lige som mig vil vide hvordan det HELE er skruet sammen, så er her hvordan jeg gør:

Det at lave et helt ny Debian system helt fra scratch gør man ikke så tit så det er ikke værd at investere tid i at lave og teste et shell-script til at gøre det, men det er nu ikke særligt svært så det er bare at gå igang. Her er listen over de kommandoer jeg udførte for at gøre det.

På serveren

Vi kører på en PogoPlug der kunne være produktet af selve denne post eller den sidste post. Vi skal lave et Debian-root-filsystem i /home/pogo, så lad os gå igang:

mkdir /home/pogo
apt-get update
apt-get install debootstrap
EXTRAS=initramfs-tools,u-boot-tools,openssh-server,openssh-client,autofs,binutils,bzip2,file,mtd-utils,module-init-tools,logfs-tools,ntp,openssh-client,rpcbind,rsync,sudo
debootstrap --include $EXTRAS wheezy /home/pogo 
du -sh /home/pogo

Vi har nu installeret en minimal Debian, vi skal blot have tilføjet en ny Linux kernel “linux-3.17.0-kirkwood-tld-1-bodhi.tar.bz2” fra mit DIST dir, den kan også hentes fra http://forum.doozan.com/read.php?2,12096

cd /home/pogo
mkdir work
tar -C work -xvjf /home/DIST/linux-3.17.0-kirkwood-tld-1-bodhi.tar.bz2
for i in dev dev/pts sys proc;do mount -o bind /$i $i;done

På det “nye” system via chroot

Vi skal have installeret Bodhi’s Linux-kerne og FDT beskrivelserne.

LANG=C LC_ALL=C chroot .
dpkg -i work/linux-image-3.17.0-kirkwood-tld-1_1_armel.deb
tar -C boot -xvf work/linux-dtb-3.17.0-kirkwood-tld-1.tar
ln -s vmlinuz-3.17.0-kirkwood-tld-1 /boot/zImage
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /boot/initrd.img-3.17.0-kirkwood-tld-1 /boot/uInitrd                                                                                                     
passwd root                 # hvad med "Geheim" - det er hemmeligt
### support for fdt kerner
ln -s zImage-3.17.0-kirkwood-tld-1 boot/zImage
exit                        # slut på chroot

Tilbage på Serveren

Maskinen er sådan set klar, ihvertfald til boot fra disk/usbstick/sdcard
Så det er på sin plads at stoppe op og lave en kopi inden vi kører videre.

tar -C /home/pogo -cvjf /home/DIST/Debian-3.17.0-kirkwood-tld-1-rootfs-storepeter.tar.bz2 .

GENVEJ

Hvis du tager genvejen skal du i stedet for alt det ovenstående udpakke den Debian Bodhi stiller til rådighed, ellers skal du springe dette over

tar -C /home/pogo -xvjf /home/DIST/Debian-3.17.0-kirkwood-tld-1-rootfs-bodhi.tar.bz2 .
cd /home/pogo

NFSROOT relaterede ændringer, vi i /home/pogo, alle ændringer sker i filer herunder.

cp -r etc/initramfs/. etc/initramfs-nfsroot
echo BOOT=nfs >> etc/initramfs-nfsroot/initramfs.conf
echo MODULES=netboot >> etc/initramfs-nfsroot/initramfs.conf
mkinitramfs -d etc/initramfs-nfsroot -o boot/initrd.img-nfsroot
mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs-3.17.0-kirkwood-tld-1 -d boot/initrd.img-nfsroot boot/uInitrd

Fjern ctrl-alt-f[1-6] terminaler, enable seriel console, /tmp på tmpfs, hostname sættes fra DHCP og disable dhcp-client, og set /etc/resolv.conf og undgå problemer ved nedlukning (der jo ikke adgang til noget efter at nettet er lukket ned) / http://www.iram.fr/~blanchet/tutorials/read-only_diskless_debian7.pdf

sed -i.orig -e '/tty[1-6]$/s/^/#/' -e 's/^#T0:/T0:/' -e '/^T0:/s/9600/115200/' etc/inittab
echo ASYNCMOUNTNFS=no >> etc/default/rcS
echo RAMTMP=yes >> etc/default/rcS
echo CONFIGURE_INTERFACES=no >> etc/default/networking
rm /etc/hostname
cat << EOF
domain pogo.lorenzen.us
search pogo.lorenzen.us
nameserver 192.168.2.2
nameserver 192.168.2.1
EOF
sed -i.orig -e 's/reboot -d .*/reboot -d -f/g' etc/init.d/reboot
sed -i.orig -e 's/halt -d .*/reboot -d -f/g' etc/init.d/halt
exit

Nu skal vi exportere filsystemet og sætte DHCP serveren op så en af Plug-erne kan boote herfra, Jeg bruger dnsmasq som både håndterer DNS og DHCP, vær opmærksom på selv om man kan specificere “hostname, ipaddr, ethaddr” direkte i “dhcp-host”, så gør jeg det ikke da DNS delen kun svarer for de host der har en aktiv DHCP lease, så jeg har “hostname, ipaddr” i /etc/hosts, og “hostname, ethaddr” i dnsmasq-filen, hvis man glemmer at specificere den i /etc/hosts, får den blot en adresse fra poolen. Da jeg ofte servicerer mere end et net deler jeg opsætningen op som det fremgår af nedenstående:

apt-get install dnsmasq nfs-server

cat >> /etc/hosts << EOF 127.0.0.1 localhost 192.168.192.2 pogo80 srv 192.168.192.10 dockstar 192.168.192.11 pogo_e02 192.168.192.12 mobile 192.168.192.13 pogo_v4 # avoid pogoplug self-updating 192.168.192.201 service.cloudengines.com EOF cat > /etc/dnsmasq.d/common << EOF resolv-file=/etc/resolv-up.conf # dont forward single names upstream domain-needed domain=pogo.lorenzen.us,192.168.192.0/24 # For debugging purposes, log each DNS query as it passes through log-queries # Log lots of extra information about DHCP transactions. log-dhcp EOF cat >> /etc/dnsmasq.d/kirkwood << EOF # Repeat the line for more than one interface. interface=eth0 dhcp-range=interface:eth0,192.168.192.100,192.168.192.200,12h dhcp-host=00:10:75:1A:5B:4D,dockstar,set:dockstar dhcp-host=00:25:31:02:c9:59,pogo_e02,set:pogoe02 dhcp-host=00:25:31:03:f8:2f,mobile,set:pogov4 dhcp-host=00:25:31:05:17:cb,pogo_v4,set:pogov4 dhcp-option=tag:eth0,option:ntp-server,192.168.192.2 dhcp-option=tag:eth0,option:dns-server,192.168.192.2,192.168.192.1 # rootpath dhcp-option-force=tag:dockstar,17,"192.168.192.2:/home/pogo" dhcp-option-force=tag:pogoe02,17,"192.168.192.2:/home/pogo" dhcp-option-force=tag:pogov4,17,"192.168.192.2:/home/pogo" EOF cat >> /etc/exports << EOF
/home/pogo     *(ro,sync,no_root_squash,no_subtree_check) pogo_e02(rw,sync,no_root_squash,no_subtree_check)
EOF
/etc/init.d/dnsmasq restart
/etc/init.d/nfs-kernel-server restart
exportfs -a

Desvære er det ikke altid nok at restarte nfs-dæmonen,
hvis /etc/exports ikke indholdt exporterede filsystemer før skal maskinen restartes

Dette var ordene pogo_e02 maskine skulle nu kunne boote med et read/write nfs-monteret filsystem, de andre har readonly root.

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