TurtleBot

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání
Verze k tisku již není podporovaná a může obsahovat chyby s vykreslováním. Aktualizujte si prosím záložky ve svém prohlížeči a použijte prosím zabudovanou funkci prohlížeče pro tisknutí.


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é:

  1. zmenšit diskový odddíl /dev/nvme0np2 na kterém je souborový systém ext4 s Ubuntu
  2. posunout diskový odddíl /dev/nvme0np3 na kterém je swap (ten bude využívat i disklessový OS)
  3. 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:

  1. Nahození aplikace wpa_supplicant
  2. Získání adresy přes aplikaci dhclient
  3. 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čí.

Upozornění 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í.

Skok

/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

Obsah souboru /etc/initramfs-tools/wpa_supplicant.conf

network={
        ssid="jmenowifi"
        #psk="heslowifi"
        psk=989c6426c04864f7f386d12ca3bb776131d5eece0860c6c84f1ce2e1d3bac5ec
}
Poznámka 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'.
  1. Trvalo téměř týden, než jsme na to díky Marku Beliškovi přišli.