Difference between revisions of "TurtleBot"

From DCEwiki
Jump to: navigation, search
m (Overlay nad NFS)
m (Vytvoření ramdisku s podporou Wi-Fi)
Line 151: Line 151:
  
 
{{Poznámka|K vygenerování obsahu tohoto souboru můžete použít utilitu '''wpa_passphrase''', která je součástí instalačního balíku <code>wpasupplicant</code>. Řetězec 'psk' se vygeneruje kombinací 'ssid' a plain hesla 'psk'.}}
 
{{Poznámka|K vygenerování obsahu tohoto souboru můžete použít utilitu '''wpa_passphrase''', která je součástí instalačního balíku <code>wpasupplicant</code>. Řetězec 'psk' se vygeneruje kombinací 'ssid' a plain hesla 'psk'.}}
 +
 +
* https://www.cyberpunk.rs/termshark-terminal-ui-for-tshark termshark
 +
* https://github.com/gcla/termshark/blob/master/docs/UserGuide.md termshark
 +
* https://github.com/gcla/termshark/blob/master/docs/FAQ.md tshark
 +
* https://serverfault.com/questions/354102/tcpdump-filter-on-network-and-subnet-mask filtrování výstupu z tcpdump
  
 
=== Overlay nad NFS ===
 
=== Overlay nad NFS ===

Revision as of 19:29, 27 August 2019


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

Soubor /etc/initramfs-tools/hooks/enable-wireless, je spustitelný skript, který spustí příkaz update-initramfs -u při sestavení ramdisku. Skript se postará o nakopírování potřebných modulů, utilit, knihoven a konfiguračních souborů pro nahození wi-fi, tak aby byly splněny všechny potřebné závislosti.

#!/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

V tomto ukázkovém skriptu je uvedena pouze je minimální sada nástrojů potřebná k rozběhání připojení přes wifi na turtlebotu. Na většinu ostatních věcí stačí příkazy, které jsou součástí busyboxu. V souvislosti s připojením se ale mohou vyskytnout různé problémy, proto není od věci si do ramdisku přidat i užitečné nástroje, které umožní testování kvality síťového připojení či testování blokového zařízení:

Utilita Inst. balík Použití Kolik přidá na objemu ramdisku
ip iproute2 Příkaz ip, se kterým pracuje busybox má omezené konfigurační možnosti, proto se k nastavení sítě v našem případě používá plnotučný nástroj ip
iwconfig wireless-tools Příkaz iwconfig je užitečný v pokud si nejste jisti zda wpa_supplicant navázal spojení. S jeho pomocí totiž můžete zjistit aktuální nastavení vašeho zařízení, nebo zda-li došlo k připojení. Pokud si přidáte i nástroj iwlist, který je ve stejném instalačním balíku, tak si můžete vypsat i parametry sítí, které vaše wifi "vidí".
dhclient isc-dhcp-client Standardně se pro nastavení sítě v ramdisku používá tzv. mikro klient udhcp. Ovšem v našem případě získanou adresu nebyl schopen nastavit, proto je lepší použít "plnotučného" DHCP klienta.
ping iputils-ping Nástroj ping vám umožní rychle zjistit zda-li stroj na druhé straně sítě žije. V nouzi místo něj můžete použít telnet, když po otevření portu na druhé straně odklepnete GET
arping iputils-arping -
tracepath iputils-tracepath -
termshark termshark Je GUI rozhraní pro tshark, což terminálová verze utility wireshark, která vám umožní zachytávat síťové pakety na vaší wi-fi. Je to jediné místo, kde můžete zjistit co běhá vzduchem mezi AP a vaším klientem, protože komunikace mezi nimi je jinak šifrovaná.
nc iputils-ping -
tcpdump tcpdump
netstat net-tools Umožňuje zjistit jaké jsou aktuálně otevřené porty.
Poznámka Busybox, který běží v ramdisku by default podporuje řadu příkazů, pro které v "plnotučném" systému může existovat samostatná utilita. Pokud ji do ramdisku přes tento skript nakopírujete, tak se použije přednostně.

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'.

Overlay nad NFS

Standardní sendwich:

NFS → TMPFS → FS

NFS → FS → TMPFS → FS

Systémový disk je z NFS namountovaný s parametrem fsc. Tím se zapne FS-cache namountovaná na adresář DO kterého se ukládají načítané soubory.

Přes něj je potom vytvořený overlay, u kterého se změny Z disklessového systému ukládají do tmpfs.

FS-cache instalace balíku cachefilesd

https://en.wikipedia.org/wiki/CacheFS

  1. Trvalo téměř týden, než jsme na to díky Marku Beliškovi přišli.