Toto je starší verze dokumentu!
Instalace distribuce Armbian na Espressobin
Poznámka k datu vzniku: Tento článek vychází z praktické zkušenosti z 5. 6. 2021. Postup odpovídá tehdejším verzím Armbianu, firmware a doprovodných balíků a dnes už nemusí přesně odpovídat aktuálnímu stavu.
Již nějakou dobu jsem měl zprovozněný router Espressobin s distribucí Armbian. Bohužel zhruba každý měsíc jsem měl přepnutý filesystem do režimu readonly a vždycky bylo příčinou poškození filesystemu. Tentokrát bylo poškození tak fatální, že jsem routeru přestal důvěřovat a rozhodl jsem se pro novou instalaci.
Mé rozhodnutí podpořilo ještě několik dalších důvodů. Zjistil jsem, že je připravený nový firmware datovaný k 4. 1. 2021. Doufal jsem tedy, že nový firmware pomůže k lepší stabilitě. Pro moji verzi Espressobinu se jednalo o firmware flash-image-ddr4-1g-1cs-1000_800.bin.
Na Armbianu jsem měl starší jádro, takže dalším vylepšením bylo novější jádro. A jako poslední důvod, proč jsem do toho šel, byla výměna SD karty za SanDisk High Endurance, která by měla být odolnější proti neustálému přepisování.
Flashování bootovacího firmware
Nejprve je potřeba flashnout bootovací firmware. Postup i aktuální firmware je popsaný na stránkách Armbianu. Nejprve je nutné nahrát firmware na flash disk formátovaný na FAT32. Flash disk připojit do USB 3.0 portu Espressobinu. Mít vytaženou SD kartu, aby se systému nepodařilo nabootovat. Připojit napájení a připojit se přes terminál pomocí minicomu.
Pak stačí napsat:
bubt flash-image-ddr4-1g-1cs-1000_800.bin spi usb
Za pár vteřin dojde k aktualizaci firmware. Jen upozorňuji, že příkazová řádka nenapoví, jaké soubory jsou na USB disku. Musel jsem název napsat přesně a musí se shodovat s názvem firmware, který bude instalován.
Příprava SD karty
Ze stránek Armbianu jsem stáhnul aktuální image distribuce pro Espressobin založenou na jádře 5.10. Image jsem rozbalil a nahrál na SD kartu.
xz -d Armbian_21.05.1_Espressobin_buster_current_5.10.34.img.xz dd if=Armbian_21.05.1_Espressobin_buster_current_5.10.34.img of=/dev/sda bs=1024k status=progress
Pak už jen stačilo vložit SD kartu do Espressobinu a nabootovat. Armbian jako první krok po nabootování zvětší filesystem na maximum konkrétní SD karty. Poté provede základním nastavením, jako je heslo pro roota a vytvoření nového uživatele.
Drobná oprava message of the day
Po přihlášení do systému se zobrazí základní informace, tedy MOTD. V posledním řádku jsem měl chybu. Funkčně to nemělo na nic vliv, ale hodně mě to dráždilo.
RX today: Error: Unable to read database "/var/lib/vnstat/br0": No such file or directory Merge "br0+eth0+lan0+lan1+wan+wlp1s0+w" failed.
Příčina problému byla v tom, že systém nemohl rozhodnout, která síťová karta bude primární. Když se podíváme na výpis vnstat, ukazuje kolik dat se přeneslo přes které zařízení.
vnstat
Řešením byla oprava v souboru /etc/default/armbian-motd. Zakomentoval jsem původní řádek s PRIMARY_INTERFACE a změnil jej na zařízení, které chci vidět:
#PRIMARY_INTERFACE="$(ls -1 /sys/class/net/ | grep -v lo | sed -n -e 'H;${x;s/\n/+/g;s/^+//;p;}')" PRIMARY_INTERFACE="eth0"
Nastavení sítě
Espressobin využívám jako router. Internet mám připojený do zařízení lan1. V routeru mám připojenou mini PCI kartu Wi-Fi 5 GHz a USB Wi-Fi kartu 2,4 GHz.
Zbytek zařízení mám tedy v bridgi a pro přístup do internetu budou forwardovány na lan1. Prvním krokem bylo nastavit síťová zařízení v /etc/systemd/network.
# /etc/systemd/network/10-br0.netdev [NetDev] Name=br0 Kind=bridge
# /etc/systemd/network/10-br0.network [Match] Name=br0 [Network] #DHCP=ipv4 DHCP=no Address=192.168.1.1/24
# /etc/systemd/network/10-eth0.network [Match] Name=eth0 [Network] DHCP=ipv4
# /etc/systemd/network/10-lan0.network [Match] Name=lan0 [Network] Bridge=br0
# /etc/systemd/network/10-lan1.network [Match] Name=lan1 [Network] #Bridge=br0 #DHCP=ipv4
# /etc/systemd/network/10-wan.network [Match] Name=wan [Network] Bridge=br0
Nastavení statické IP adresy
Protože mám statickou IP adresu, nastavil jsem ji editací souboru /etc/network/interfaces:
auto lan1
iface lan1 inet static
address xx.xx.xx.xx
netmask 255.255.255.255
gateway xx.xx.xx.xx
Změna MAC adresy síťového zařízení
Pokud bych si nechal přidělovat IP adresu z DHCP, tak je u mého poskytovatele vázána na MAC adresu síťové karty. Může se stát, že v čase budu něco konfigurovat a budu chtít využít dynamického přidělování, tak ať nejsem nemile překvapen. Rovnou jsem změnil MAC adresu síťového zařízení lan1. MAC adresa se nastavuje v souboru /boot/armbianEnv.txt.
Nejprve jsem si vypsal přehled síťových zařízení, která systém vidí, a následně porovnal se souborem /boot/armbianEnv.txt. V mém případě jsem potřeboval změnit MAC adresu zařízení eth3addr.
verbosity=1 emmc_fix=off spi_workaround=off eth1addr=0E:BA:9F:93:CB:03 eth2addr=fa:ad:4e:84:25:2f eth3addr=D0:AF:CC:23:24:ED rootdev=UUID=4ab813fc-eda7-41af-a81e-1dca466c4454 rootfstype=ext4 usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
Změna portu SSH
Jeden z kroků, který u serverů dělám, je změna portu, na kterém běží SSH démon.
grep -i port /etc/ssh/sshd_config # Port 8888 systemctl restart sshd
Instalace Wi-Fi karet
Pro kontrolu jsem si vypsal, zda jádro detekovalo obě Wi-Fi zařízení.
lspci
lsusb
To vypadalo nadějně, ale když jsem dal vypsat konkrétní jména zařízení, nebyla nalezena žádná, která by příslušela Wi-Fi kartě.
iwconfig
První mě napadlo, že nemám nainstalovaný firmware k Wi-Fi kartám. A odhad byl správný. K instalaci firmwaru lze využít utilitu přímo od Armbianu:
armbian-config
V menu je nutné se proklikat na Software → Mini a nainstalovat mini firmware package. Po instalaci firmware a restartování mikropočítače už byly Wi-Fi karty funkční.
Nastavení automatického přidělování IP adres
Jednotlivá síťová zařízení jsou nakonfigurována, nyní je třeba nastavit automatické přidělování IP adres. Tento krok předchází konfiguraci konkrétních Wi-Fi sítí. K tomu využívám nástroj dnsmasq.
apt install dnsmasq
Po čerstvé instalaci se mi zobrazila chybová hláška a démon nešel spustit:
dnsmasq: failed to create listening socket for port 53: Address already in use
Chvíli jsem se potrápil, proč čerstvá instalace nefunguje. Pak jsem přišel na to, že je potřeba konfigurace a problém způsobuje chybějící parametr bind-interfaces v konfiguraci. Vytvořil jsem tedy soubor /etc/dnsmasq.d/settings.conf:
interface=br0 listen-address=192.168.1.1 bind-interfaces server=8.8.8.8 domain-needed bogus-priv dhcp-range=192.168.1.50,192.168.1.150,12h # přiřazení konkrétní IP adresy na základě MAC adresy dhcp-host=02:8d:04:23:9B:6A,192.168.1.45
NetworkManager
Posledním krokem bylo nastavení NetworkManageru tak, aby pracoval s démonem dnsmasq a aby ignoroval Wi-Fi zařízení.
# /etc/NetworkManager/NetworkManager.conf [main] dns=dnsmasq rc-manager=file plugins=ifupdown,keyfile [ifupdown] managed=true
# /etc/NetworkManager/conf.d/10-ignore-interfaces.conf [keyfile] unmanaged-devices=interface-name:eth*,interface-name:wan*,interface-name:lan*,interface-name:br*,interface-name:wlp1s0,interface-name:wlx00117f1bf337
Nastavení Wi-Fi AP pomocí hostapd
Hostapd byl na zařízení už nainstalován. Stačilo do souboru /etc/hostapd.conf vložit konfiguraci k síti. Tady jsem se chvíli potrápil, protože konfigurace nefungovala. Postupně jsem tedy odstraňoval řádky v konfiguračním souboru do chvíle, než jsem našel problém. Účelem článku není podrobně rozepsat konfiguraci Wi-Fi, proto sem dávám svoji funkční konfiguraci.
ssid=ESSPRESSOBIN5 interface=wlp1s0 channel=40 bridge=br0 driver=nl80211 logger_syslog=0 logger_syslog_level=0 wmm_enabled=1 wpa=2 preamble=1 wpa_passphrase=silneheslo wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP auth_algs=1 macaddr_acl=0 # IEEE 802.11n ieee80211n=1 ht_capab=[HT40-][LDPC][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40] country_code=CZ ieee80211d=1 # IEEE 802.11a hw_mode=a # IEEE 802.11ac ieee80211ac=1 vht_capab=[MAX-MPDU-11454][SHORT-GI-80][TX-STBC-2BY1][RX-STBC-1][MAX-A-MPDU-LEN-EXP3] vht_oper_chwidth=1 vht_oper_centr_freq_seg0_idx=42 ctrl_interface=/var/run/hostapd ctrl_interface_group=0
Zde je ještě konfigurace USB Wi-Fi v /etc/hostapd-usb.conf:
ssid=ESSPRESSOBIN2 interface=wlx00117f1bf337 hw_mode=g channel=9 bridge=br0 driver=nl80211 logger_syslog=0 logger_syslog_level=0 wmm_enabled=1 wpa=2 preamble=1 wpa_passphrase=silneheslo wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP auth_algs=1 macaddr_acl=0 # IEEE 802.11n ht_capab=[LDPC][SHORT-GI-20][SHORT-GI-40][TX-STBC][RX-STBC1][DSSS_CCK-40][SMPS-STATIC] country_code=CZ ieee80211d=1 ctrl_interface=/var/run/hostapd ctrl_interface_group=0
Nyní je potřeba nastavit spuštění hostapd po startu systému. Nejprve jsem v /etc/default/hostapd nastavil, kde má démon načítat hlavní konfigurační soubor, a poté jej zapnul.
DAEMON_CONF="/etc/hostapd.conf"
systemctl enable hostapd
Pro spuštění konfigurace USB Wi-Fi 2,4 GHz je nutné spustit druhou instanci démona po startu systému. Vyřešil jsem to tak, že jsem do souboru /etc/rc.local přidal řádek:
/usr/sbin/hostapd -B /etc/hostapd-usb.conf
Výsledkem je, že po restartu systému by se měla načíst všechna síťová zařízení a mělo by docházet k přidělování IP adres. Poslední, co je potřeba nastavit, je firewall a routování.
Routování a nastavení firewallu
Pro nastavení firewallu jsem zvolil utilitu UFW. Nastavoval jsem čistě pro IPv4. Po instalaci jsem nejprve zapnul forwardování IPv4 v /etc/sysctl.conf. Rovnou jsem v souboru nastavil i další věci, jako je například snížené swapování a hlavně větší alokaci paměti. Změny se projeví až po restartu zařízení.
# /etc/sysctl.conf net.ipv4.ip_forward=1 vm.swappiness=0 vm.min_free_kbytes=65536 vm.overcommit_memory = 1
Dále bylo nutné povolit forwardování IPv4 v souboru /etc/ufw/sysctl.conf:
net/ipv4/ip_forward=1
Dále forwardování v souboru /etc/default/ufw:
DEFAULT_FORWARD_POLICY="ACCEPT"
Routování v souboru /etc/ufw/before.rules musí být hned na začátku souboru:
*nat :POSTROUTING ACCEPT [0:0] # Forward traffic through lan1 -A POSTROUTING -s 192.168.1.0/24 -o lan1 -j MASQUERADE COMMIT
Protože jsem měl už nachystaná uživatelská pravidla pro připojení SSH a další služby, přepsal jsem soubor /etc/ufw/user.rules souborem z předchozího systému, kde už jsem měl veškerá nastavení připravená.
ufw enable
ufw status
A teprve potom začalo routování fungovat. Mohl jsem se připojit přes SSH a pustit se do nastavení dalších programů.

