TurtleBot
TurtleBot, je robotické zařízení, používané při výuce na Katedře kybernetiky. Jeho "mozkem" je Intel NUC, který sice může komunikovat přes ethernet, ale primárně komunikuje přes Wi-Fi.
Zařízení se dodává s předinstalovaným Ubuntu, ale v rámci sjednocení vývojového prostředí je potřeba na něm rozběhat stejnou diskless instalaci, jako v laboratořích.
Jelikož klasické PXE funguje pouze v rámci na ethernetu, jsou TurtleBoty vytvořené podobným způsobem, je virtuální stroje typu Half-Diskless. Rozdíl je pouze v tom, že se při spouštění nepoužívá virtuální disk publikovaný přes NFS, nýbrž lokální NVME disk.
Co to obnáší?
Příprava na diskless
Parametry NUC7i7DNKE Intel(R) Client Systems verze J85069-205
- 8 jader CPU Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz
- 8 GB RAM (1x 8GB modul Kingston + volný slot)
- Ethernet Connection I219-LM
- 01:00.0 Network controller: Intel Corporation Wireless 8265 / 8275 (rev 78)
~# lsmod | grep iw iwlwifi 151552 0 cfg80211 598016 1 iwlwifi
~# cat /proc/partitions major minor #blocks name 259 0 234431064 nvme0n1 259 1 524288 nvme0n1p1 EFI flags boot, esp (zachovat) 259 2 225643520 nvme0n1p2 ext4 Ubuntu (zmenšit) orig 220355, nově 200000 259 3 8261632 nvme0n1p3 linux-swap (posunout)
NUC pro TurtleBoty je dodáván s předinstalovaným Ubuntu, proto bylo nutné:
- zmenšit diskový odddíl
/dev/nvme0np2
na kterém je souborový systém ext4 s Ubuntu - posunout diskový odddíl
/dev/nvme0np3
na kterém je swap (ten bude využívat i disklessový OS) - vytvořit nový diskový odddíl
/dev/nvme0np4
Tento nově vytvořený diskový oddíl /dev/nvme0np4
byl naformátován na souborový systém Btrfs, aby bylo možné subvolume pro systém nainstalovaný přes debootstrap snapshotovat.
Instalace
Formátování fs, vytvoření subvolume,…
/mnt# debootstrap --verbose --include=firmware-iwlwifi,isc-dhcp-common,openssh-server,wpasupplicant,nfs-common --variant=minbase --components main,contrib,non-free --arch=amd64 unstable ./
…snapshot, bind {/dev,/proc,/sys}, chroot
Editace grub.cfg
Pro zavádění jádra disklessového systému se využívá zavaděč předinstalovaného Ubuntu. K tomu byla nutná následující úprava souboru /mnt/grub/grub.cfg
:
...
Automatizace procesu distribuce na ostatní TurtleBoty
Aby vše fungovalo jak má, musí mít všechny TurtleBoty stejnou výchozí konfiguraci, upravený soubor grub.cfg
na předinstalovaném Ubuntu a vytvořený diskový oddíl /dev/nvme0np4
, s nainstalovaným ramdiskem s podporou wi-fi a jádrem.
Export NFS adresáře
Na NFS serveru byl vytvořen nový Btrfs subvolume s názvem bullseye
, který byl vyexportován přes NFS s následujícími parametry:
/srv/diskless/version/bullseye (rw,fsid=11,nohide,async,subtree_check,no_root_squash)
Výsledek uvedeného nastavení po exportu:
(rw,async,wdelay,nohide,no_root_squash,fsid=11,sec=sys,rw,secure,no_root_squash,no_all_squash)
Úprava instalace disklessu
Po spuštění lokálního systému:
- Nahození aplikace wpa_supplicant
- Získání adresy přes aplikaci dhclient
- Mount NFS adresáře budoucího disklessu
Přejmenování
# hostnamectl set-hostname bullseye
Vytvoření ramdisku s podporou Wi-Fi
Při vytvoření ramdisku s podporou Wi-Fi jsem postupoval podle webové stránky Marka Fargase. Bohužel se ukázalo, že uvedený postup pro připojení přes WPA2 nestačí.
Aby fungovalo ověřování přes WPA2, musí mít wpa_supplicant k dispozici další dva jaderné moduly: ccm a ctr[1]. Bez nich funguje pouze anonymní připojení. |
/etc/initramfs-tools/hooks/enable-wireles
Je spustitelný skript, který se při sestavení ramdisku postará o nakopírování potřebných modulů, utilit, knihoven a konfiguračních souborů.
#!/bin/sh set -e PREREQ="" prereqs(){ echo "${PREREQ}" } case "${1}" in prereqs) prereqs exit 0 ;; esac . /usr/share/initramfs-tools/hook-functions manual_add_modules cfg80211 mac80211 iwlwifi iwlmvm ccm ctr copy_exec /bin/ip copy_exec /sbin/wpa_supplicant copy_exec /sbin/wpa_cli copy_exec /sbin/dhclient copy_exec /sbin/dhclient-script copy_file config /etc/initramfs-tools/wpa_supplicant.conf /etc/wpa_supplicant.conf
Toto je minimální sada nástrojů potřebná k rozběhání pořipojení přes wifi na turtlebotu. Ale pro potřebu testování sítě si můžete přidat i další potřebné nástroje, jako např. ping, nc, tcpdump, aj. |
Obsah souboru /etc/initramfs-tools/wpa_supplicant.conf
network={ ssid="jmenowifi" #psk="heslowifi" psk=989c6426c04864f7f386d12ca3bb776131d5eece0860c6c84f1ce2e1d3bac5ec }
K vygenerování obsahu tohoto souboru můžete použít utilitu wpa_passphrase, která je součástí instalačního balíku wpasupplicant . Řetězec 'psk' se vygeneruje kombinací 'ssid' a plain hesla 'psk'.
|
Overlay nad NFS
- ↑ Trvalo téměř týden, než jsme na to díky Marku Beliškovi přišli.