====== 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í [[https://www.armbian.com/espressobin/|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ý [[https://minio.k-space.ee/minio/armbian/dl/espressobin/u-boot/|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 [[https://www.alza.cz/sandisk-microsdhc-high-endurance-video-32gb-u3-v30-d5701039.htm|SanDisk High Endurance]], která by měla být odolnější proti neustálému přepisování. {{.:sandisk-high-endurance.png|SanDisk High Endurance}} {{.:sandisk-endurance-srovnavaci-test.jpg|Srovnání odolnosti paměťových karet}} ===== Flashování bootovacího firmware ===== Nejprve je potřeba flashnout bootovací firmware. Postup i aktuální firmware je popsaný na stránkách [[https://www.armbian.com/espressobin/|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 [[https://www.armbian.com/espressobin/|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ů. ===== Užitečné zdroje ===== * [[https://askubuntu.com/questions/1062651/dnsmasq-failed-to-create-listening-socket-for-port-53-address-already-in-use|dnsmasq: failed to create listening socket for port 53]] * [[https://www.armbian.com/espressobin/|Armbian pro Espressobin]] * [[https://linuxize.com/post/how-to-setup-a-firewall-with-ufw-on-ubuntu-20-04/|Jak nastavit firewall pomocí UFW na Ubuntu 20.04]]