În articol 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

Î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 .
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ă: , și ).
Asemenea unei construcții iterative a -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:
După ce a fost copiat pe microSD și înainte de utilizare, este necesar să:
- 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 - Dezactivează SELinux
echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config - Elimină Asistentul de Configurare Inițială:
find /mnt/3/etc/systemd/ -iname initial-setup.service -delete - 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:

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:
- /boot/efi — EFI+FAT32, bootabil, 100MB;
- / (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 :
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:
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 .
Pornirea „malinka” durează aproximativ 40 de secunde. Specificațiile sistemului după bootare:

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. .
EPEL nu va mai fi necesar — toate pachetele sunt conținute în repozitoriile oficiale.
Probabil ar fi trebuit să renunțăm la , 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 , 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 .
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ă.), 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 , 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? — 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 .
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)
Ș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 acesta
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) ).
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ă . 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
