Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (lub router malinowy z niebieską czapką)

Artykuł Raspberry Pi + CentOS = Hotspot Wi-Fi (lub router malinowy z czerwoną czapką) Mówiłem o sposobie przekształcenia Raspberry w bezprzewodowy punkt dostępowy za pomocą systemu operacyjnego CentOS. Montując mój domowy router zgodnie z tym rysunkiem, zaspokoiłem swoje twórcze ego i uzyskałem zastrzyk spokoju ducha dla krytycznego elementu mojej przytulnej infrastruktury. Dręczyło mnie jednak poczucie niekompletności rozwiązania i wewnętrzny perfekcjonizm: „niedoskonały wynik pracy nie ma prawa istnieć”. Myśl, że „ideał można i należy osiągnąć” nie opuściła mnie ani na chwilę.

I wtedy pewnego dnia na jednym z forów tematycznych natknąłem się na dyskusję na temat głębi bitowej istniejących systemów operacyjnych dla Raspberry (aarch64 vs armhfp): który system 64-bitowy w zasadzie może pasować i działać na Raspberry w wersji 3 ++?

Mój ukochany CentOS na architekturę ARM od „Userland” nie spieszył się z przejściem na najnowszą wersję jądra i przejściem na 64-bitowy. A repozytorium EPEL, połączone nie wiadomo skąd bez podpisu cyfrowego, było dla mnie koszmarem w niespokojnym śnie…

Wypowiadając się jako zwolennik dystrybucji opartych na RPM, ze zdziwieniem stwierdziłem, że w dyskusjach zupełnie zapomniano o systemie operacyjnym dla Raspberry Fedora! I to pomimo faktu, że jego wydanie
od wersji 28 oficjalnie wspiera Raspberry Pi 3B+ w wersji 64-bitowej!

Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (lub router malinowy z niebieską czapką)
W tym artykule omówię metodę instalacji Fedora (aarch64) na Raspberry Pi Model B + 3 в wyjątkowo minimalna wydajność. Pokrótce omówię funkcje podnoszenia punktu dostępu Wi-Fi, zidentyfikowane w wyniku próbnego działania mojej poprzedniej konfiguracji na 7 CentOS.

0. Czego będziesz potrzebować

Wszystko jest takie samo, jak opisano w poprzednim artykule:

  • Raspberry Pi 3 Model B+;
  • microSD >= 4 GB (później można „przenieść” system na dysk 2 GB);
  • Stacja robocza z systemem Linux i czytnikiem kart microSD;
  • Przewodowa łączność sieciowa pomiędzy Raspberry a stacją roboczą z systemem Linux (w tym przypadku do konfiguracji nie będzie potrzebny dodatkowy monitor i klawiatura), dostęp do Internetu z obu urządzeń;
  • Zaawansowana znajomość Linuksa (wiedzieć i nie bać się: rozstał się, dd и mkfs).

Podobny do iteracyjnego LFS-budując własnego Linuksa, zostanie wykorzystany obraz dystrybucji Fedory, a następnie na jego podstawie zostanie stworzony minimalny system (bez „kompilacji ze źródeł”).

1. Instalacja oryginalnej dystrybucji

Współrzędne surowego obrazu systemu w Internecie:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Po nagraniu go na kartę microSD, a przed jego użyciem należy:

  1. Rozwiń „root” systemu plików (trzecia partycja, ext3)
    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łącz SELinuksa
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Usuń Kreatora konfiguracji początkowej:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Zezwól 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żesz pobrać „malinę” z karty microSD i połączyć się z nią przez sieć.

Zimny ​​​​start trwa około półtorej minuty. TTX systemu po załadowaniu:

Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (lub router malinowy z niebieską czapką)

rpm -qa | wc -l
444

2. Montaż minimalnego systemu

Niestety „minimalna dystrybucja” od programistów okazuje się daleka od najskromniejszej pod względem zużycia zasobów. Obraz systemu można jeszcze zmniejszyć.

W tym celu należy uruchomić skrypt na Malince:

#!/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 uruchomieniu skryptu w bieżącym katalogu zostanie utworzony podkatalog ($P) z zawartością katalogu głównego nowej minimalnej wersji systemu operacyjnego. Możesz wyłączyć Raspberry i zwrócić kartę microSD do stacji roboczej z systemem Linux.

3. Instalacja systemu minimalnego

Instalacja sprowadza się do skopiowania minimalnych plików „obrazu” systemu operacyjnego (pozyskanych w poprzednim kroku) na specjalnie przygotowaną kartę microSD do odpowiednich katalogów.

Wystarczy karta 2GB i dwie partycje na niej:

  1. / boot / efi - EFI+FAT32, rozruch, 100MB;
  2. / (root) - EXT4, cała pozostała przestrzeń.

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

  • naprawić rozruch systemu operacyjnego;
  • włącz sieć;
  • skonfiguruj dostęp przez ssh.

Poprawka rozruchowa polega na zastąpieniu UUID sekcji w plikach:

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

i parametr zapisany_wpis= w ostatnim pliku

W pliku:

microSD:/etc/fstab

możesz znaleźć stare wartości i bieżące (aktualne) wartości w wynikach polecenia:

blkid | grep mmcblk | sort

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

Funkcjonalność sieciową przy pierwszym włączeniu Raspberry można osiągnąć za pomocą małej „kuli” - utwórz łącze (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 pobraniu uporządkuj uruchomienie systemd-siećd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

Dostęp administratora przez ssh konfiguruje się podobnie jak w kroku 1.

Po wykonaniu wszystkiego ostrożnie i bez błędów możesz przenieść kartę microSD do „maliny” i rozpocząć pracę z 64-bitowym systemem operacyjnym w wyjątkowo minimalnej wersji.

4. Gotowy system

„Obraz” gotowego systemu, stworzony według powyższej instrukcji, można pobrać pod linkiem:
Fedora-Tiny-31-5.5.7-200.aarch64

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

./install /dev/mmcblk0

Bądź ostrożny!

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

Po bezbłędnym wykonaniu skryptu kartę można uporządkować w „malinkę” i zastosować: catch via dhcp, hasło - „1”.

System jest wyczyszczony ze wszystkich identyfikatorów i kluczy, dlatego każda nowa instalacja jest niepowtarzalna.

Powtarzam jeszcze raz, system - minimalny! Dlatego nie przejmuj się: DNF jest dostępny, aby zadziałał, będziesz musiał „wymyślić” właściwy / Etc / resolv.conf.

Zimny ​​start Raspberry trwa około 40 sekund. TTX systemu po załadowaniu:

Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (lub router malinowy z niebieską czapką)

rpm -qa | wc -l
191

5. Wi-Fi

Zatrzymam się trochę na funkcjach wdrażania punktu dostępu Wi-Fi. Aby uzyskać szczegółowe informacje, możesz odwołać się do mojego poprzedniego Artykuł.

EPEL nie jest już potrzebny – wszystkie pakiety znajdują się w oficjalnych repozytoriach.

Chyba warto byłoby odpuścić dnsmasq, ponieważ Fedora, w przeciwieństwie do CentOS, ma całkiem nową sieć systemową, która ma normalne wbudowane serwery DHCP/DNS. Ale faktem jest, że w programistach RHEL8 odmówił obsługi stosu sieciowego za pomocą czegokolwiek innego niż NM, nie budzi zaufania w świetlaną przyszłość projektu (łotry). Krótko mówiąc, nie próbowałem.

Co więcej, aktualnych sterowników wbudowanego adaptera Wi-Fi nie można „ukraść” z dystrybucji Raspbian, ale można je pobrać bezpośrednio z GitHub.

Tak wyglądają pliki oprogramowania sprzętowego Broadcom na mojej Raspberry (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 uzyskasz 5 GHz/AC.

Odnośnie ilości i nazw interfejsów. Teraz zdecydowanie odradzam wszystkim, aby nie korzystali z „usług” przełączników oprogramowania, chyba że jest to absolutnie konieczne (most), które powodują znaczne obciążenie stosu sieciowego i utrudniają routing. Jeśli nie planujesz posiadania wielu kart bezprzewodowych, powinieneś używać wyłącznie interfejsów fizycznych. Mam dwa Wi-Fi, więc łączę tylko je w mostek programowy (chociaż możesz się bez tego obejść, inaczej patrząc na konfigurację hostapd).

Uwielbiam zmieniać nazwy interfejsów.

Aby to zrobić w Fedorze, musisz utworzyć dowiązanie symboliczne:

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

i wtedy będzie można nadawać sensowne nazwy bez szperania udev, ale tylko przy użyciu systemd-networkd.

Na przykład tak nazywają się karty sieciowe w moim routerze:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

2: wan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

3: lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

4: int: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lan state UP group default qlen 1000

5: ext: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master lan state UP group default qlen 1000

  • int - wbudowany, ext — zewnętrzne adaptery Wi-Fi (USB) zmontowane w „most” lan;
  • blady — Adapter Ethernet, do którego podłączony jest Internet.

Zauważony? fq_codel - naprawdę fajna rzecz. Razem ze świeżym jądrem Linuksa czynią prawdziwe cuda w zasięgu sieci bezprzewodowej: gwałtowne „pobieranie torrentów” nie doprowadzi do nagłego spadku prędkości wśród sąsiadów. Nawet domowa telewizja IP działająca „bezprzewodowo” z załadowanym kanałem nie „rozrywa się” i w ogóle się nie „zacina”!

Plik usługi demona został poddany niewielkim zmianom hostapd.

Wygląda to teraz 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

Oraz „magiczny” plik hostapd-int.conf do pracy w paśmie 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]

Mały Photoshop wykonany z mojego Ericssona A1018:

(Połączenie internetowe - 100Mbit/s)Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (lub router malinowy z niebieską czapką)
I na koniec małe FAQ.

6. FAQ

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

Można by odpowiedzieć po prostu: „ciekawe jest spróbować i tak dalej”.

Ale tak naprawdę wydaje mi się, że temat jest dość poważny. W dobie „cholernego” Internetu zakup routera w sklepie i pozostanie zakładnikiem jego producenta to bardzo ponura perspektywa. Wiele osób już rozumie, że siedzenie z CVE lub wbudowanym backdoorem nie jest możliwe.

Oczywiście możesz migrować do oprogramowania WRT od entuzjastów. Pewnie jest do nich większe zaufanie, ale jeśli nie chcesz na nich polegać, to po prostu skorzystaj z własnego produktu. Idealnie pełnoprawny komputer, żeby można było na nim zaimplementować wszystko na świecie. Oczywiście jeśli chodzi o routing.

Dlatego wybór „maliny” to posunięcie czysto ekonomiczne: prawdziwy komputer, a jednocześnie niedrogi. Chociaż może także - ze swoimi „sobowtórami” w środku.

6.2 Ale Raspberry to „niski router”: powolny i z jednym portem Ethernet!

Jako domowy router Wi-Fi Raspberry jest dla mnie więcej niż zadowalający. O prędkości lotu mówiłem już powyżej. A Ethernet jest tylko jeden, cóż, w podobnym produkcie Apple jest mniej więcej tak samo!

Ale poważnie, oczywiście, że chciałbym więcej. I pomimo tego, że w moim gospodarstwie domowym wszystkie urządzenia są połączone bezprzewodowo, czasem i tak potrzebne jest łącze miedziane. Na takie przypadki mam na stanie „mobilny hub”:

urządzenie - coś w tym styluRaspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (lub router malinowy z niebieską czapką)

6.3 Jeśli jest to router, nie ma mowy o „dostrajaniu” protokołu TCP/IP, ponieważ jest to ważne!

Oprócz skonfigurowania stosu sieciowego (tcp_fastopen, YeAH itp.) ten i poprzedni artykuł nie omawiają innych niuansów, w szczególności procesu przygotowania microSD do optymalnego użycia (chociaż instalator próbuje sformatować kartę pamięci w trudny sposób). Proces doskonalenia nie ma końca, wystarczy się w porę zatrzymać.

6.4 Dlaczego Fedora?

Ponieważ lubię! Fedora to system „głównego nurtu” dla maniaków, dla których właściwie przeznaczony jest ten artykuł. W momencie pisania tego tekstu, być może jedyny system operacyjny, który dla Raspberry w wersji 64-bitowej jest oficjalnie wspierany przez znaczną kadrę programistów (od których nie mogę się doczekać jądro 5.6).

6.5 Czy Bluetooth działa? Jak wideo/dźwięk/GPIO?

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

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

Ponieważ system jest minimalny, nie ma nawet zapory ogniowej ani narzędzi do jego konfiguracji. Każdy, kto tego potrzebuje, może zainstalować dodatkowo wszystko, czego potrzebuje.

6.7 Z systemu nie można korzystać, nie można zmienić hasła - brak hasła. Żadnego pingu, żadnego niczego!

Jest DNF. Lub ta opcja instalacji nie jest dla Ciebie - skorzystaj z zestawu dystrybucyjnego od programistów.

6.8 Gdzie jest SWAP? Nie mogę bez niego żyć!

Czy to prawda? OK, zatem:

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 od razu pobrać gotowy obraz ze skonfigurowanym punktem dostępowym Wi-Fi!

Przygotowanie instalatora „dla każdego” będzie wymagało trochę czasu i wysiłku. Jeśli (nagle!) komuś naprawdę uzna to za ciekawe i potrzebne, napisz do nas, a my coś wymyślimy.

Skończę z tym.

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

Źródło: www.habr.com

Dodaj komentarz