Raspberry Pi + Fedora (aarch64) = hotspot Wi-Fi (lub malinowy router w niebieskim kapeluszu)

W artykule Raspberry Pi + CentOS = Wi-Fi Hotspot (lub malinowy router w czerwonej czapce) Opisałem sposób przekształcenia «malinki» w bezprzewodowy punkt dostępu przy użyciu systemu operacyjnego CentOS. Budując mój domowy router według tego schematu, zaspokoiłem swoje twórcze ego i zyskałem poczucie spokoju co do krytycznie ważnego elementu mojej przytulnej infrastruktury. Jednak uczucie niedokończonego rozwiązania oraz wewnętrzny perfekcjonizm nie dawały mi spokoju: «niedoskonały efekt pracy nie ma prawa istnieć». Myśl, że «ideał można i należy osiągnąć», nie opuszczała mnie ani na chwilę.

I pewnego dnia natknąłem się na jednym z tematycznych forów na dyskusję o architekturach istniejących systemów operacyjnych dla «malinki» (aarch64 vs armhfp): jakie 64-bitowe OS mogą w ogóle obsłużyć i działać na Raspberry wersji 3++?

Mój ulubiony CentOS dla architektury ARM od «Userland» nie spieszył się z przejściem na jądro ostatniej wersji i przekształceniem w 64-bitowy. A repozytorium EPEL, podłączone Bóg wie skąd bez cyfrowego podpisu, stało się koszmarem w moich niespokojnych snach...

Jako zwolennik dystrybucji opartych na RPM, zaskoczyło mnie to, że w dyskusjach o OS dla «malinki» całkowicie zapomniano o Fedora! I to mimo, że jej wydanie
od 28 wersji oficjalnie wspiera Raspberry Pi 3B+ w 64-bitowej wersji!

Raspberry Pi + Fedora (aarch64) = hotspot Wi-Fi (lub malinowy router w niebieskim kapeluszu)
W tym artykule opowiem o sposobie instalacji Fedora (aarch64) na Raspberry Pi 3 Model B+ do w wersji super minimalnej. Krótko omówię cechy konfiguracji Wi-Fi punktu dostępu, które ujawniły się w wyniku praktycznych testów mojej poprzedniej konfiguracji na CentOS 7.

0. Co będzie potrzebne

Wszystko to, co zostało wymienione w poprzednim artykule:

  • Raspberry Pi 3 Model B+;
  • microSD >= 4GB (później można «przenieść» system na 2GB nośnik);
  • Stacja robocza z Linuxem i czytnikiem kart microSD;
  • Przewodowe połączenie sieciowe «malinki» i stacji roboczej z Linuxem (w tym przypadku nie będą potrzebne dodatkowy monitor i klawiatura do konfiguracji), dostęp do Internetu z obu urządzeń;
  • Zaawansowane umiejętności w Linuxie (znać i się nie bać: parted, dd i mkfs).

Podobnie jak w iteracyjnej LFS-kompilacji własnego Linuxa, zostanie użyty dystrybucyjny obraz Fedora, a następnie na jego podstawie stworzony zostanie minimalny system (bez «kompilacji z źródeł»).

1. Instalacja oryginalnej dystrybucji

Lokalizacja obrazu raw systemu w Sieci:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Po zapisaniu na microSD i przed rozpoczęciem użytkowania należy:

  1. Rozszerzyć „korzeń” systemu plików (3. partycja, ext4)
    parted /dev/mmcblk0 resizepart 3 100%
    e2fsck -f /dev/mmcblk0p3; resize2fs /dev/mmcblk0p3; e2fsck -f /dev/mmcblk0p3
    for i in 1 2 3; do mkdir -p /mnt/$i; mount /dev/mmcblk0p$i /mnt/$i; done
    

  2. Wyłączyć SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Usunąć Kreatora pierwszego uruchomienia:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Zezwolić na dostęp przez ssh:
    mkdir -p /mnt/3/root/.ssh
    cp -fv ~/.ssh/id_rsa.pub /mnt/3/root/.ssh/authorized_keys
    sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/g' /mnt/3/etc/ssh/sshd_config
    

Teraz można uruchomić „malinkę” z microSD i połączyć się z nią przez sieć.

Zimny start trwa około półtorej minuty. Właściwości systemu po uruchomieniu:

Raspberry Pi + Fedora (aarch64) = hotspot Wi-Fi (lub malinowy router w niebieskim kapeluszu)

rpm -qa | wc -l
444

2. Budowa minimalnego systemu

Niestety, „minimalny dystrybucyjny” od twórców okazuje się być daleki od najskromniejszego pod względem zużycia zasobów. Obraz systemu można uczynić jeszcze mniejszym.

Aby to zrobić, na „malince” należy wykonać skrypt:

#!/bin/bash

. /etc/os-release
P=$(mktemp --directory $(pwd)/$ID-$VERSION_ID.XXX)

dnf --installroot=$P --releasever=$VERSION_ID --setopt=install_weak_deps=false 
--assumeyes install  
    bcm283x-firmware 
    dnf              
    grub2-efi-aa64   
    kernel           
    openssh-server   
    shim-aa64

for f in /boot/efi/EFI/fedora/grub.cfg 
         /boot/efi/EFI/fedora/grubenv  
         /boot/efi/rpi3-u-boot.bin     
         /etc/default/grub             
         /etc/fstab
do
  cp -fv $f $P$f
done

rm  -fv $P/dev/*
rm -rfv $P/var/cache/dnf

echo "--------------------------------------------------------------------------------"
du -hs $P

Po wykonaniu skryptu w bieżącym katalogu zostanie utworzony podkatalog ($P) z zawartością korzenia nowej minimalnej edycji systemu operacyjnego. Można wyłączyć „malinkę” i zwrócić microSD do stacji roboczej Linux.

3. Instalacja minimalnego systemu

Instalacja polega na skopiowaniu plików minimalnego „obrazka” systemu (uzyskanego na poprzednim kroku) na specjalnie przygotowaną microSD do odpowiednich katalogów.

Wystarczy karta 2GB i dwie partycje na niej:

  1. /boot/efi — EFI+FAT32, rozruchowa, 100MB;
  2. / (korzeń) — EXT4, całe pozostałe miejsce.

Po przygotowaniu microSD i skopiowaniu na nią plików, należy:

  • naprawić uruchamianie systemu;
  • włączyć sieć;
  • konfigurować dostęp przez ssh.

Naprawa uruchamiania polega na wymianie UUID partycji w plikach:

microSD:/boot/efi/EFI/fedora/grub.cfg
microSD:/boot/efi/EFI/fedora/grubenv

i parametru saved_entry= w ostatnim pliku

W pliku:

microSD:/etc/fstab

można znaleźć stare wartości, a bieżące (aktualne) — w wyniku polecenia:

blkid | grep mmcblk | sort

Po wymianie należy również poprawić zawartość fstab na microSD, aby punkty montowania odpowiadały nowym UUID partycji.

Sieciową sprawność przy pierwszym włączeniu „malinki” można osiągnąć drobnym „strojeniem” — utworzyć link (schematycznie):

ln -s /usr/lib/systemd/system/systemd-networkd.service 
microSD:/etc/systemd/system/multi-user.target.wants

i plik:

mkdir -p microSD:/etc/systemd/network
cat > microSD:/etc/systemd/network/dhcp.network << EOF
[Match]
Name=*
[Network]
DHCP=ipv4
EOF

Po pomyślnym uruchomieniu — uporządkować start systemd-networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

Dostęp superużytkownika przez ssh konfiguruje się analogicznie do punktu 1.

Po wykonaniu wszystkich kroków starannie i bez błędów, można przestawiać microSD w „malince” i zaczynać pracę z 64-bitowym systemem operacyjnym w ultra minimalnej wersji.

4. Gotowy system

„Obraz” gotowego systemu, utworzony zgodnie z powyższą instrukcją, można pobrać pod tym linkiem:
Fedora-Tiny-31-5.5.7-200.aarch64

Będzie to archiwum, które zawiera dwa pliki: skrypt instalacyjny oraz TGZ z plikami systemu operacyjnego. Archiwum należy rozpakować na stacji roboczej Linux, włożyć microSD (wystarczy karta 2GB) i uruchomić skrypt z parametrem — nazwą urządzenia:

.\/install \/dev\/mmcblk0

Uważaj!

Bez żadnych ostrzeżeń urządzenie zostanie sformatowane i zostanie na nim zainstalowany system operacyjny.

Po bezbłędnym wykonaniu skryptu kartę można przestawiać w „malinkę” i korzystać: złapać przez dhcp, hasło — „1”.

System został oczyszczony ze wszelkich ID i kluczy, dzięki czemu każda nowa instalacja jest unikalna.

Powtarzam jeszcze raz, system — minimalny! Dlatego nie martwcie się: DNF jest dostępny, aby działał, trzeba „stwórzyć” odpowiedni /etc/resolv.conf.

Zimny start „malinki” trwa około 40 sekund. TTH systemu po załadowaniu:

Raspberry Pi + Fedora (aarch64) = hotspot Wi-Fi (lub malinowy router w niebieskim kapeluszu)

rpm -qa | wc -l
191

5. Wi-Fi

Chcę zwrócić uwagę na specyfikę realizacji punktu dostępu Wi-Fi. Po szczegóły można skontaktować się z moim wcześniejszym artykuł.

EPEL nie będzie już potrzebny — wszystkie pakiety znajdują się w oficjalnych repozytoriach.

Możliwe, że warto byłoby zrezygnować z dnsmasq, ponieważ w Fedora, w przeciwieństwie do CentOS, — wystarczająco świeży systemd-networkd, w którym znajdują się normalne wbudowane serwery DHCP/DNS. Ale fakt, że w RHEL8 deweloperzy zrezygnowali z wsparcia stosu sieciowego na rzecz NM, nie napawa optymizmem co do jasnej przyszłości projektu (łobuziaki). W skrócie, nie próbowałem.

Dalej, aktualne sterowniki wbudowanego adaptera Wi-Fi można pobierać bezpośrednio z github.

Tak wyglądają na mojej „malince” pliki firmware Broadcom (schematycznie):

ls \/usr\/lib\/firmware\/brcm | grep 43455

 [612775] brcmfmac43455-sdio.bin
  [14828] brcmfmac43455-sdio.clm_blob
[symlink] brcmfmac43455-sdio.raspberrypi,3-model-b-plus.txt -> brcmfmac43455-sdio.txt
   [2099] brcmfmac43455-sdio.txt

Bez nich nie uzyskamy 5GHz/AC.

Co do liczby i nazw interfejsów. Teraz wszystkim gorąco zalecam, bez szczególnej potrzeby, nie korzystać z „usług” programowych przełączników (bridge), które wprowadzają znaczące obciążenie do stosu sieciowego i tłumią routowanie. Jeśli nie przewiduje się użycia kilku adapterów bezprzewodowych, należy korzystać wyłącznie z interfejsów fizycznych. Mam dwa Wi-Fi, dlatego tylko je łączę w mostek programowy (choć da się obejść bez tego, spoglądając inaczej na konfigurację hostapd).

Lubię zmieniać nazwy interfejsów.

W tym celu w systemie Fedora trzeba stworzyć symboliczne łącze:

/etc/systemd/network/99-default.link -> /dev/null

i wtedy można nadać sensowne nazwy, nie grzebiąc w udev, a jedynie środkami systemd-networkd.

Tak, na przykład, nazywają się adaptery sieciowe w moim routerze:

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

2: wan:  mtu 1500 qdisc fq_codel state UP group default qlen 1000

3: lan:  mtu 1500 qdisc noqueue state UP group default qlen 1000

4: int:  mtu 1500 qdisc fq_codel master lan state UP group default qlen 1000

5: ext:  mtu 1500 qdisc mq master lan state UP group default qlen 1000

  • int — wbudowany, ext — zewnętrzne adaptery Wi-Fi (USB), złączone w „mostek” lan;
  • wan — adapter Ethernet, do którego podłączony jest Internet.

Zauważyłeś? fq_codel — to naprawdę świetna rzecz. Razem z nowym jądrem Linuxa robią prawdziwe cuda w zakresie łączności bezprzewodowej: intensywne pobieranie torrentów nie prowadzi do nagłej degradacji prędkości u sąsiadów. Nawet domowe IPTV działające „w powietrzu” nie „łamią się” ani nie „przerywa” w ogóle, nawet przy obciążonym kanale!

Służbowy plik demona przeszedł niewielkie zmiany hostapd.

Teraz wygląda on tak (na przykładzie wbudowanego adaptera):

[Unit]
Description=Hostapd IEEE 802.11 AP, IEEE 802.1X/WPA/WPA2/EAP/RADIUS Authenticator
After=network.target
BindsTo=sys-subsystem-net-devices-int.device

[Service]
Type=forking
PIDFile=/run/hostapd-int.pid
#ExecStartPre=/usr/sbin/iw dev int set power_save off
ExecStart=/usr/sbin/hostapd /path/to/hostapd-int.conf -P /run/hostapd-int.pid -B

[Install]
RequiredBy=sys-subsystem-net-devices-int.device

I „magiczny” hostapd-int.conf do pracy w 5GHz/AC:

ssid=rpi
wpa_passphrase=FedoRullezZ

# 5180 MHz  [36] (20.0 dBm)
# 5200 MHz  [40] (20.0 dBm)
# 5220 MHz  [44] (20.0 dBm)
# 5240 MHz  [48] (20.0 dBm)
# 5745 MHz [149] (20.0 dBm)
# 5765 MHz [153] (20.0 dBm)
# 5785 MHz [157] (20.0 dBm)
# 5805 MHz [161] (20.0 dBm)
# 5825 MHz [165] (20.0 dBm)

channel=36
#channel=149

# channel+6
# http://blog.fraggod.net/2017/04/27/wifi-hostapd-configuration-for-80211ac-networks.html

vht_oper_centr_freq_seg0_idx=42
#vht_oper_centr_freq_seg0_idx=155

country_code=US

interface=int
bridge=lan

driver=nl80211

auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

macaddr_acl=0

hw_mode=a
wmm_enabled=1

# N
ieee80211n=1
require_ht=1
ht_capab=[HT40+][SHORT-GI-40][SHORT-GI-20]

# AC
ieee80211ac=1
ieee80211d=0
ieee80211h=0
vht_oper_chwidth=1
require_vht=1
vht_capab=[SHORT-GI-80]

Trochę „Photoshopa”, zrobionego z mojego „Ericsson A1018s”:

(połączenie z Internetem — 100Mbit/s)Raspberry Pi + Fedora (aarch64) = hotspot Wi-Fi (lub malinowy router w niebieskim kapeluszu)
I na koniec małe FAQ.

6. FAQ

6.1 Po co robić router Wi-Fi na Raspberry?

Można by odpowiedzieć krótko, że 'ciekawie spróbować i tyle'.

Jednak w rzeczywistości, moim zdaniem, temat jest dość poważny. W epoce 'krwawych' Internetów kupowanie routera w sklepie i bycie więźniem jego producenta to dość smutna perspektywa. Siedzenie z CVE lub wbudowanym backdoorem już wielu zrozumiało, że nie jest wskazane.

Oczywiście, można migrować na firmware WRT od entuzjastów. Zaufanie do nich, prawdopodobnie, jest większe, ale jeśli nie chce się być od nich zależnym, to tylko — własny produkt. W idealnym przypadku – pełnoprawny komputer do realizacji na nim wszystkiego, co można sobie wyobrazić. Mówiąc o routingu, oczywiście.

Dlatego wybór 'malinki' to czysto ekonomiczny ruch: prawdziwy komputer i przy tym — niedrogi. Choć, być może, też — ze swoimi 'dwuznacznościami' w środku.

6.2 Ale Raspberry to 'nie-router': wolny i z jednym portem Ethernet!

Jako domowy router Wi-Fi, 'malinka' mnie bardziej niż zadowala. O prędkości 'po powietrzu' już wspomniałem powyżej. A tylko jeden Ethernet, no cóż, w analogicznym produkcie od Apple jest to dokładnie to samo!

A jeśli mówimy serio, to oczywiście chciałbym więcej. I mimo że w moim gospodarstwie wszystkie urządzenia są podłączone bezprzewodowo, czasami jednak potrzebne jest połączenie przewodowe. Na takie okazje mam przygotowany 'mobilny hub':

urządzenie — coś takiegoRaspberry Pi + Fedora (aarch64) = hotspot Wi-Fi (lub malinowy router w niebieskim kapeluszu)

6.3 Jeśli to router, to nic nie mówi o 'tuningu' TCP/IP, a to ważne!

Oprócz konfiguracji stosu sieciowego (tcp_fastopen, YeAH itp.), w tym i poprzednim artykule nie zostały przedstawione inne niuanse, w szczególności proces przygotowania microSD do optymalnego użycia (prawda, instalator podejmuje próbę sformatowania karty pamięci w sprytny sposób). Proces doskonalenia jest nieskończony, trzeba tylko w porę się zatrzymać.

6.4 Dlaczego Fedora?

Bo mi się podoba! Fedora to 'mainstream' — system geeków, dla których ta artykuł jest właściwie przeznaczony. W momencie pisania, to właściwie jedyny system operacyjny, który dla Raspberry w 64-bitowej wersji jest oficjalnie wspierany przez solidny zespół programistów (na których niestety nie mogę się doczekać jądra 5.6).

6.5 A Bluetooth działa? Jak z wideo/dźwiękiem/GPIO?

Nie wiem. Artykuł dotyczy minimalnej instalacji systemu i jego późniejszego użycia jako routera Wi-Fi.

6.6 Dlaczego wszystkie artykuły o CentOS/Fedora/RedHat zaczynają się od wyłączenia SELinux?

Ponieważ system jest minimalny, nie ma w nim nawet zapory ogniowej ani narzędzi do jej konfiguracji. Kto potrzebuje, może dodatkowo zainstalować wszystko, co niezbędne.

6.7 Z systemu nie można korzystać, nie można zmienić hasła — nie ma passwd. Nie ma ping, nie ma nic!

Tak DNF. Lub ta metoda instalacji nie jest dla Ciebie – skorzystaj z dystrybucji od deweloperów.

6.8 A gdzie SWAP? Nie mogę bez niego żyć!

Naprawdę? No dobrze:

fallocate -l 1G /swap
chmod -v 0600 /swap
mkswap -f /swap
swapon -v /swap
grep "/swap" /etc/fstab || echo "/swap swap swap defaults 0 0" >> /etc/fstab

6.9 Chciałbym pobrać od razu gotowy obraz z skonfigurowanym punktem dostępu Wi-Fi!

Przygotowanie instalatora „dla wszystkich” będzie wymagało pewnego czasu i wysiłku. Jeśli (nagle!) ktoś uzna to za naprawdę interesujące i niezbędne – napisz, coś wymyślimy.

Na tym — zakończę.

Życzę wszystkim bezpiecznego surfowania i maksymalnej kontroli nad infrastrukturą!

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster