Nell'articolo Ho parlato del modo di trasformare il "raspberry" in un punto di accesso wireless utilizzando il sistema operativo CentOS. Costruendo il mio router domestico seguendo questo schema, ho soddisfatto il mio ego creativo e ho ottenuto tranquillità riguardo a un elemento critico della mia infrastruttura accogliente. Tuttavia, la sensazione di incompletezza della soluzione e il mio perfezionismo interiore non mi lasciavano in pace: "un risultato imperfetto non ha diritto di esistere". Il pensiero che "l'ideale può e deve essere raggiunto" non mi ha mai abbandonato.
Un giorno, su uno dei forum tematici, mi sono imbattuto in una discussione sulla architettura delle attuali distribuzioni di sistemi operativi per il "raspberry" (aarch64 vs armhfp): quali sistemi operativi a 64 bit possono essere installati e funzionare sulla versione Raspberry 3++?
La mia amata CentOS per architettura ARM di "Userland" non si affrettava a passare all'ultima versione del kernel e a diventare a 64 bit. Inoltre, il repository EPEL, attivato chissà da dove senza firma digitale, era un incubo nei miei sogni inquieti...
Essendo un sostenitore delle distribuzioni basate su RPM, ho scoperto con sorpresa che, nelle discussioni sui sistemi operativi per il "raspberry", era completamente dimenticata Fedora! E questo nonostante il suo rilascio

In questo articolo parlerò del metodo di installazione Fedora (aarch64) con Raspberry Pi 3 Model B+ in in versione extra minimale. Faccio una breve panoramica delle caratteristiche per attivare un punto di accesso Wi-Fi, emerse dall'esperienza con la mia configurazione precedente su .
0. Cosa serve
Tutto ciò che è stato menzionato nell'articolo precedente:
- Raspberry Pi 3 Model B+;
- microSD >= 4GB (in seguito potresti "trasferire" il sistema su un'unità da 2GB);
- Postazione di lavoro con Linux e lettore di schede microSD;
- Collegamento di rete cablato tra il "raspberry" e la postazione di lavoro con Linux (in questo caso non serviranno monitor e tastiera aggiuntivi per la configurazione), accesso a Internet da entrambi i dispositivi;
- Competenze avanzate in Linux (sapere e non avere paura: , e ).
Analogamente all'iterativa -compilazione del proprio Linux, utilizzerò l'immagine del sistema operativo Fedora, e poi su questa base creerò un sistema minimale (senza "compilazione da sorgente").
1. Installazione della distribuzione originale
Coordinate dell'immagine raw del sistema in rete:
Dopo averlo registrato su microSD e prima di iniziare ad usarlo, è necessario:
- Espandere il "root" del filesystem (3° partizione, 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 - Disabilitare SELinux
echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config - Rimuovere il Maestro della configurazione iniziale:
find /mnt/3/etc/systemd/ -iname initial-setup.service -delete - Abilitare l'accesso 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
Adesso è possibile avviare il "raspberry" da microSD e connettersi ad esso tramite rete.
L'avviamento a freddo richiede circa un minuto e mezzo. Specifiche del sistema dopo l'avvio:

rpm -qa | wc -l
444
2. Costruzione di un sistema minimale
Sfortunatamente, il "distro minimo" degli sviluppatori si rivela non essere dei più leggeri in termini di consumo di risorse. È possibile rendere l'immagine di sistema ancora più piccola.
Per fare ciò, sul "raspberry" è necessario eseguire uno 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
Dopo l'esecuzione dello script, nella directory corrente verrà creato un sottodirectory ($P) con il contenuto della root della nuova edizione minimale del sistema operativo. Puoi spegnere il "raspberry" e riportare la microSD alla postazione di lavoro Linux.
3. Installazione del sistema minimale
L'installazione consiste nella copia dei file dell'immagine minimale del sistema (ottenuta nel passo precedente) sulla microSD appositamente preparata nelle directory corrispondenti.
Bastano una scheda da 2GB e due partizioni su di essa:
- /boot/efi — EFI+FAT32, di avvio, 100MB;
- / (root) — EXT4, tutto lo spazio rimanente.
Dopo aver preparato la microSD e copiato i file su di essa, è necessario:
- correggere il boot del sistema;
- attivare la rete;
- configurare l'accesso SSH.
La correzione del boot consiste nella sostituzione degli UUID delle partizioni nei file:
microSD:/boot/efi/EFI/fedora/grub.cfg
microSD:/boot/efi/EFI/fedora/grubenv
e il parametro saved_entry= nel secondo file
Nel file:
microSD:/etc/fstab
puoi trovare i valori obsoleti, mentre i valori attuali (correnti) sono nei risultati del comando:
blkid | grep mmcblk | sort
Dopo la sostituzione, è necessario anche correggere il contenuto fstab sulla microSD, affinché i punti di montaggio corrispondano ai nuovi UUID delle partizioni.
La funzionalità di rete al primo avvio del "raspberry" può essere attivata con un piccolo "escamotage" — creando un link (schematicamente):
ln -s /usr/lib/systemd/system/systemd-networkd.service
microSD:/etc/systemd/system/multi-user.target.wants
e un file:
mkdir -p microSD:/etc/systemd/network
cat > microSD:/etc/systemd/network/dhcp.network << EOF
[Match]
Name=*
[Network]
DHCP=ipv4
EOF
Dopo un avvio riuscito — sistemare l'avvio :
systemctl disable systemd-networkd
systemctl enable systemd-networkd
L'accesso superutente via ssh si configura in modo simile al punto 1.
Se fatto con cura e senza errori, è possibile spostare la microSD nel "Raspberry Pi" e iniziare a lavorare con un sistema operativo a 64 bit in versione estremamente minimale.
4. Sistema pronto
L'immagine del sistema pronto, creata secondo le istruzioni sopra riportate, può essere scaricata al seguente link:
Si tratta di un archivio contenente due file: uno script di installazione e un TGZ con i file del sistema operativo. L'archivio deve essere estratto su una workstation Linux, inserire la microSD (una scheda da 2GB è sufficiente) e avviare lo script con il parametro — il nome del dispositivo:
./install /dev/mmcblk0
Fate attenzione!
Senza alcun preavviso, il dispositivo verrà formattato e su di esso verrà installato il sistema operativo.
Dopo che lo script è stato eseguito senza errori, la scheda può essere spostata nel "Raspberry Pi" e utilizzata: ottenere tramite dhcp, la password è "1".
Il sistema è stato ripulito da tutti gli ID e le chiavi, il che rende ogni nuova installazione unica.
Ripeto, il sistema è minimale! Quindi non spaventatevi: DNF è presente, per il suo corretto funzionamento sarà necessario "creare" il giusto .
L'accensione a freddo del "Raspberry Pi" richiede circa 40 secondi. Specifiche del sistema dopo il boot:

rpm -qa | wc -l
191
5. Wi-Fi
Mi soffermerò brevemente sulle caratteristiche dell'implementazione di un punto di accesso Wi-Fi. Per dettagli specifici, puoi fare riferimento al mio precedente .
EPEL non sarà più necessario — tutti i pacchetti sono contenuti nei repository ufficiali.
Probabilmente sarebbe meglio rinunciare a , poiché in Fedora, a differenza di CentOS, c'è una versione sufficientemente recente di systemd-networkd, che ha normali server DHCP/DNS integrati. Ma il fatto che in RHEL8 gli sviluppatori , non infonde fiducia nel futuro luminoso del progetto (scellerati). In sintesi, non ho provato.
In seguito, i driver attuali dell'adattatore Wi-Fi integrato non devono essere "rubati" dalla distribuzione Raspbian, ma possono essere scaricati direttamente da .
Ecco come appaiono i file di firmware Broadcom sulla mia "Raspberry Pi" (schematicamente):
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
Senza di essi non sarà possibile utilizzare il 5GHz/AC.
Per quanto riguarda il numero e i nomi delle interfacce. Ora consiglio a tutti di non ricorrere senza necessità ai "servizi" degli switch software (), che introducono un carico significativo nello stack di rete e limitano il routing. Se non si prevede di utilizzare più adattatori wireless, è consigliabile utilizzare solo interfacce fisiche. Ne ho due Wi-Fi, quindi unisco solo queste in un ponte software (anche se si potrebbe fare a meno di questo, guardando diversamente la configurazione di hostapd).
E mi piace rinominare le interfacce.
Per fare ciò in Fedora è necessario creare un collegamento simbolico:
/etc/systemd/network/99-default.link -> /dev/null
e così sarà possibile dare nomi significativi senza dover frugare in , ma solo utilizzando gli strumenti di systemd-networkd.
Ecco come vengono chiamati, ad esempio, gli adattatori di rete nel mio router:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue stato SCONOSCIUTO gruppo default qlen 1000
2: wan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel stato UP gruppo default qlen 1000
3: lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue stato UP gruppo default qlen 1000
4: int: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lan stato UP gruppo default qlen 1000
5: ext: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master lan stato UP gruppo default qlen 1000
- -int — adattatore integrato, ext — adattatori Wi-Fi esterni (USB) raggruppati in "bridge" lan;
- wan — adattatore Ethernet a cui è collegato Internet.
Notato? — è davvero una cosa eccezionale. Insieme a un kernel Linux aggiornato crea veri miracoli nella banda wireless: un intenso download di torrent non porterà a un'improvvisa degradazione della velocità per i vicini. Anche l'IP-TV domestico che funziona "in modalità wireless" non "si scompone" e non "fa pause" affatto!
Ha subito piccole modifiche il file di servizio del demone .
Ora appare così (per l'adattatore integrato):
[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
E il "magico" hostapd-int.conf per il funzionamento a 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]
Un po' di "Photoshop", fatto con il mio "Ericsson A1018s":
(connessione a Internet — 100 Mbit/sec)
E in conclusione una breve FAQ.
6. FAQ
6.1 Perché realizzare un router Wi-Fi su Raspberry?
Potremmo semplicemente rispondere che è "interessante provare e tutto il resto".
Ma in realtà, a mio avviso, il tema è piuttosto serio. Nell'era di Internet "carnivoro", acquistare un router in negozio e rimanere prigionieri del suo produttore è una prospettiva piuttosto triste. Sedersi con CVE o un backdoor incorporato è qualcosa che molti hanno già compreso.
Naturalmente, si può migrare a firmware WRT da appassionati. La fiducia in essi è probabilmente maggiore, ma se non si vuole dipendere nemmeno da loro, l'unica soluzione è realizzare qualcosa di proprio. Idealmente - un computer completo per avere la possibilità di implementare qualsiasi cosa. In termini di routing, ovviamente.
Quindi, la scelta della "malina" è un semplice movimento economico: un vero computer e, al contempo, economico. Anche se, forse, anche essa ha le sue "ambiguità" interne.
6.2 Ma la Raspberry non è un "router economico": lenta e con una sola porta Ethernet!
Come router Wi-Fi domestico, la "malina" mi soddisfa più che sufficientemente. Ho già parlato della velocità "wireless" sopra. E una sola Ethernet, beh, in un prodotto simile di Apple è così anche!
E se ci pensiamo seriamente, ovviamente vorrei avere di più. E nonostante che tutti i miei dispositivi siano connessi senza fili, a volte è necessaria una connessione cablata. Per tali casi, ho riservato un "hub mobile":
dispositivo - tipo questo
6.3 Se questo è un router, non si parla di "tuning" TCP/IP, ed è importante!
Oltre alla configurazione dello stack di rete (tcp_fastopen, YeAH e simili), in questo e nel precedente articolo non sono stati rivelati altri dettagli, in particolare il processo di preparazione della microSD per un uso ottimale (anche se l'installatore tenta di formattare la scheda di memoria in modo ingegnoso). Il processo di miglioramento è infinito, bisogna solo fermarsi in tempo.
6.4 Perché Fedora?
Perché mi piace! Fedora è "mainstream" - un sistema per geek, per i quali, di fatto, è dedicato questo articolo. Al momento della scrittura, è probabilmente l'unico sistema operativo che per Raspberry in versione 64-bit è ufficialmente supportato da un gran numero di sviluppatori (da cui non riesco a ricevere) ).
6.5 E il Bluetooth funziona? Come va con video/suono/GPIO?
Non lo so. L'articolo riguarda l'installazione minima del sistema e il suo successivo utilizzo come router Wi-Fi.
6.6 Perché tutti gli articoli su CentOS/Fedora/RedHat iniziano con la disattivazione di SELinux?
Perché il sistema è minimo, non ha nemmeno un firewall e strumenti per configurarlo. Chi ha bisogno può installare tutto il necessario aggiuntivamente.
6.7 Non si può usare il sistema, non si può cambiare la password - non c'è passwd. Non c'è ping, non c'è niente!
Sì . O questo metodo di installazione non è per te - utilizza una distribuzione dei sviluppatori.
6.8 E dove è SWAP? Non posso vivere senza!
Davvero? Beh, ok:
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 Vorrei scaricare subito un'immagine pronta con il punto di accesso Wi-Fi già configurato!
Per preparare un'installazione "per tutti" ci vorrà un certo tempo e sforzi. Se (per caso!) a qualcuno questo sembrerà davvero interessante e necessario - scrivete, inventeremo qualcosa.
Su questo - concludo.
Auguro a tutti una navigazione sicura e il massimo controllo sull'infrastruttura!
Fonte: habr.com
