Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (sau routerul zmeu în pălărie albastră)

În articol Raspberry Pi + CentOS = Punct de acces Wi-Fi (sau routerul zmeură în pălăria roșie) Am vorbit despre modul în care poți transforma un „Raspberry Pi” într-un punct de acces wireless folosind sistemul de operare CentOS. Construind routerul meu acasă pe baza acestui plan, mi-am satisfăcut ego-ul creativ și am obținut un sentiment de liniște în legătură cu un element critic al infrastructurii mele confortabile. Cu toate acestea, senzația de incompletitudine a soluției și perfecționismul meu interior nu m-au lăsat în pace: „un rezultat imperfect nu are dreptul să existe”. Gândul că „idealul poate și trebuie să fie atins” nu m-a părăsit nici o clipă.

Și astfel, într-o zi, pe unul dintre forumurile tematice, am dat peste o discuție despre arhitectura sistemelor de operare existente pentru „Raspberry Pi” (aarch64 vs armhfp): ce sisteme de operare pe 64 de biți pot să funcționeze pe Raspberry versiunea 3++?

Preferata mea CentOS pentru arhitectura ARM de la „Userland” nu se grăbea să treacă la ultimul kernel și să devină 64-bit. Iar repository-ul EPEL, conectat cine știe de unde fără semnătură digitală, era un coșmar în somnul meu neliniștit...

Fiind un adept al distribuțiilor bazate pe RPM, am descoperit cu surprindere că în discuțiile despre sistemele de operare pentru „Raspberry Pi” a fost complet uitat Fedora! Și asta în condițiile în care lansarea sa
de la versiunea 28 susține oficial Raspberry Pi 3B+ în variantă de 64 de biți!

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (sau routerul zmeu în pălărie albastră)
În acest articol vă voi explana cum să instalați Fedora (aarch64) pe Raspberry Pi 3 Model B+ în într-o variantă extrem de minimă. Voi trece rapid prin caracteristicile configurării punctului de acces Wi-Fi, identificate în urma experienței anterioare cu configurația mea pe CentOS 7.

0. Ce va fi necesar

Exact aceleași lucruri ca și cele enumerate în articolul anterior:

  • Raspberry Pi 3 Model B+;
  • microSD >= 4GB (mai târziu poți „muta” sistemul pe un mediu de 2GB);
  • O stație de lucru cu Linux și un cititor de carduri microSD;
  • Conexiune de rețea prin cablu între „Raspberry Pi” și stația de lucru cu Linux (în acest caz nu vor fi necesare un monitor și o tastatură suplimentare pentru configurare), acces la Internet de pe ambele dispozitive;
  • Abilități avansate în Linux (să știi și să nu-ți fie frică: parted, dd și mkfs).

Asemenea unei construcții iterative a LFS-distribuție proprie Linux, va fi utilizat imaginea distribuitivă Fedora, iar apoi pe baza ei se va crea un sistem minim (fără „compilare din surse”).

1. Instalarea distribuției originale

Coordonatele imaginii raw a sistemului în rețea:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

După ce a fost copiat pe microSD și înainte de utilizare, este necesar să:

  1. Extinderea „rădăcinii” sistemului de fișiere (a treia partiție, 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. Dezactivează SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Elimină Asistentul de Configurare Inițială:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Permite accesul prin 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
    

Acum poți porni „miniPC-ul” cu microSD și să te conectezi la el prin rețea.

Pornirea rece durează aproximativ un minut și jumătate. Specificațiile tehnice ale sistemului după bootare:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (sau routerul zmeu în pălărie albastră)

rpm -qa | wc -l
444

2. Construirea unui sistem minim

Din păcate, „distribuția minimă” de la dezvoltatori se dovedește a nu fi cea mai economă în consumul de resurse. Imaginea sistemului poate fi făcută și mai mică.

Pentru aceasta, pe „miniPC” trebuie să execute un script:

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

După rularea scriptului, în directorul curent va fi creat un subdirector ($P) care va conține rădăcina noii editii minime a sistemului de operare. Poți opri „miniPC-ul” și să returnezi microSD-ul în stația de lucru Linux.

3. Instalarea sistemului minim

Instalarea constă în copierea fișierelor imaginii minime a sistemului de operare (obținute la pasul anterior) pe un microSD pregătită special în directoarele corespunzătoare.

Este suficient un card de 2GB și două partiții pe el:

  1. /boot/efi — EFI+FAT32, bootabil, 100MB;
  2. / (rădăcină) — EXT4, tot restul spațiului.

După pregătirea microSD-ului și copierea fișierelor, trebuie:

  • să repari bootarea sistemului;
  • să activezi rețeaua;
  • să configurezi accesul prin ssh.

Repararea bootării constă în înlocuirea UUID-urilor partițiilor în fișierele:

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

și parametrul saved_entry= în ultimul fișier.

În fișierul:

microSD:/etc/fstab

poți găsi valorile vechi, iar cele actuale (corecte) — în rezultatul comenzii:

blkid | grep mmcblk | sort

După înlocuire, ar trebui să corectezi și conținutul fstab de pe microSD, pentru ca punctele de montare să corespundă noilor UUID-uri ale partițiilor.

Funcționalitatea rețelei la prima pornire a „miniPC-ului” poate fi obținută cu o mică „îndreptare” — creând un link (schematic):

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

și fișierul:

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

După un boot de succes — adu în ordine pornirea systemd-networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

Accesul superutilizatorului prin ssh se configurează similar cu punctul 1.

După ce am făcut totul cu atenție și fără erori, putem muta microSD în «malinka» și începe să lucrăm cu sistemul de operare pe 64 de biți în cea mai minimă formă.

4. Sistemul gata

„Imaginea” sistemului gata, creată conform instrucțiunilor de mai sus, poate fi descărcată prin link:
Fedora-Tiny-31-5.5.7-200.aarch64

Va fi un arhivă, care conține două fișiere: scriptul de instalare și TGZ cu fișierele sistemului de operare. Arhiva trebuie dezarhivată pe stația de lucru Linux, se introduce microSD (o carte de 2GB este suficientă) și se rulează scriptul cu parametrul — numele dispozitivului:

.\/install \/dev\/mmcblk0

Fiți atenți!

Fără niciun fel de avertisment, dispozitivul va fi formatat și pe el – va fi instalat sistemul de operare.

După executarea corectă a scriptului, cardul poate fi mutat în „malinka” și folosit: se va conecta prin dhcp, parola – „1”.

Sistemul este curățat de orice ID-uri și chei, motiv pentru care fiecare nouă instalare este unică.

Reiterez, sistemul este minim.Nu vă alarmați: DNF este disponibil, pentru a-i permite funcționarea va trebui să „inventăm” corect /etc/resolv.conf.

Pornirea „malinka” durează aproximativ 40 de secunde. Specificațiile sistemului după bootare:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (sau routerul zmeu în pălărie albastră)

rpm -qa | wc -l
191

5. Wi-Fi

Voi petrece puțin timp discutând despre particularitățile implementării punctului de acces Wi-Fi. Detalii pot fi verificate în articolul meu anterior. pe care l-ați citit.

EPEL nu va mai fi necesar — toate pachetele sunt conținute în repozitoriile oficiale.

Probabil ar fi trebuit să renunțăm la dnsmasq, pentru că în Fedora, spre deosebire de CentOS, există un systemd-networkd destul de nou, în care – există servere DHCP\/DNS integrate corespunzătoare. Dar faptul că în RHEL8 dezvoltatorii au renunțat la sprijinul stivei de rețea pentru orice altceva în afară de NM, nu inspiră încredere în viitorul luminos al proiectului (răufăcători). Pe scurt, nu am încercat.

În continuare, driverele actuale pentru adapterul Wi-Fi încorporat nu trebuie „furate” din distribuția Raspbian, ci pot fi descărcate direct de la github.

Așa arată la „malinka” mea fișierele firmware-ului Broadcom (schematic):

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

Fără ele nu va fi posibil 5GHz\/AC.

Referitor la numărul și denumirile interfețelor. Acum deja recomand cu insistență să nu recurgem la „serviciile” switch-urilor software fără o necesitate specială.bridge), care aduc o sarcină semnificativă în stiva de rețea și inhibă rutarea. Dacă nu se preconizează utilizarea mai multor adaptoruri wireless, atunci trebuie utilizate exclusiv interfețele fizice. Eu am două Wi-Fi, așa că le combin doar pe ele într-un pod software (deși se poate face și fără asta, privind diferit configurarea hostapd).

Îmi place să redenumesc interfețele.

Pentru asta, în Fedora trebuie să creezi un link simbolic:

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

și atunci poți da nume semnificative fără a te răsfoia prin udev, ci doar cu ajutorul systemd-networkd.

Iată cum se numesc, de exemplu, adaptoarele de rețea în routerul meu:

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 — încorporat, ext — adaptor Wi-Fi extern (USB), adunate într-un "pod" lan;
  • wan — adaptor Ethernet în care este conectat Internetul.

Ai observat? fq_codel — este cu adevărat o chestie excelentă. Împreună cu un kernel Linux recent, fac minuni în spectrul wireless: un "torent" intens nu va duce la o degradare bruscă a vitezei la vecini. Chiar și IP-TV-ul de acasă funcționând "pe aer" nu se "dezintegrează" și nu "gâtuiește" deloc!

Fișierul de serviciu al demonului a suferit câteva modificări hostapd.

Acum arată așa (pe exemplul adaptorului integrat):

[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 "magicul" hostapd-int.conf pentru funcționarea în 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]

Puțin „Photoshop”, făcut cu telefonul meu „Ericsson A1018s”:

(conexiune la Internet — 100Mbit/s)Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (sau routerul zmeu în pălărie albastră)
Și în concluzie, un mic FAQ.

6. FAQ

6.1 De ce să faci un router Wi-Fi pe Raspberry?

Răspunsul ar putea fi simplu, adică „e interesant să încerci și atât”.

Dar, de fapt, după părerea mea, subiectul este destul de serios. În epoca internetului „sângeros”, a cumpăra un router din magazin și a rămâne prizonierul producătorului său — este o perspectivă destul de sumbră. Să stai cu un CVE sau un backdoor încorporat este deja ceva ce mulți încep să înțeleagă că nu este acceptabil.

Desigur, poți migra pe firmware WRT de la entuziaști. Probabil că există mai multă încredere în ele, dar dacă nu vrei să depinzi nici de ele, atunci soluția este — propriul tău produs. Ideal — un computer complet pentru a realiza tot ce îți dorești. În ceea ce privește rutarea, desigur.

De aceea, alegerea „malinei” este o mișcare pur economică: un adevărat computer și totuși — ieftin. Deși, poate, și el are propriile „ambiguități” interne.

6.2 Dar Raspberry — este un „ne-router”: lent și cu un singur port Ethernet!

Ca router Wi-Fi acasă, „malina” mă mulțumește mai mult decât suficient. Despre viteza „aeriană” am povestit deja mai sus. Și, având un singur Ethernet, ei bine, la un produs similar de la Apple este cam același lucru!

Dar, dacă vorbim serios, desigur că mi-ar plăcea să am mai mult. Și, deși toate dispozitivele mele sunt conectate fără fir, uneori este necesară totuși o conexiune pe cablu. Pentru aceste cazuri, am pregătit un „hub mobil”:

dispozitiv — de tipul acestaRaspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (sau routerul zmeu în pălărie albastră)

6.3 Dacă acesta este router, atunci nu s-a spus nimic despre „tunarea” TCP/IP, ceea ce este important!

Pe lângă configurarea stivei de rețea (tcp_fastopen, YeAH etc.), în acest articol și în cel anterior nu sunt dezvăluite alte nuanțe, în special, procesul de pregătire a microSD pentru o utilizare optimă (deși installerul încearcă să formateze cardul de memorie într-un mod neobișnuit). Procesul de perfecționare este nesfârșit, trebuie doar să te oprești la timp.

6.4 De ce Fedora?

Pentru că îmi place! Fedora — este sistemul „mainstream” — destinat geek-ilor, pentru care, de fapt, este scris acest articol. La momentul scrierii, probabil este singura OS care pentru Raspberry are suport oficial în 64 de biți din partea unei echipe semnificative de dezvoltatori (de la care nu am nicio veste) nuclee 5.6).

6.5 Funcționează Bluetooth? Cum stă treaba cu video/sunet/GPIO?

Nu știu. Articolul este despre instalarea minimă a sistemului și utilizarea acestuia ca router Wi-Fi.

6.6 De ce toate articolele despre CentOS/Fedora/RedHat încep cu dezactivarea SELinux?

Pentru că sistemul este minimal, nu are nici firewall și utilitare pentru configurarea acestuia. Cine are nevoie poate instala suplimentar tot ce este necesar.

6.7 Sistemul nu poate fi folosit, nu se poate schimba parola - nu există passwd. Nu există ping, nu este nimic!

Există DNF. Sau această variantă de instalare nu este pentru tine - folosește distribuția de la dezvoltatori.

6.8 Și unde este SWAP? Nu pot trăi fără el!

Sincer? Bine, iată:

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 Mi-ar plăcea să descarc direct o imagine gata cu punctul de acces Wi-Fi configurat!

Pentru a pregăti instalatorul "pentru toți" va fi necesar un anumit timp și efort. Dacă (dintr-o dată!) cuiva i se pare asta cu adevărat interesant și necesar - scrieți, vom găsi ceva de făcut.

Aici voi încheia.

Îi doresc tuturor navigare sigură și control maxim asupra infrastructurii!

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster