Nell'articolo Ho parlato di come trasformare il "Raspberry Pi" in un punto di accesso wireless utilizzando il sistema operativo CentOS. Costruendo il mio router domestico secondo questo schema, ho soddisfatto il mio ego creativo e ho ottenuto una sensazione di tranquillità per un elemento critico della mia infrastruttura confortevole. Tuttavia, la sensazione di incompletezza della soluzione e il mio perfezionismo interiore non mi hanno dato pace: "un risultato imperfetto non ha diritto di esistere". Il pensiero che "l'ideale possa e debba essere raggiunto" non mi ha abbandonato nemmeno per un minuto.
E così un giorno, in uno dei forum a tema, mi sono imbatutto in una discussione sulla compatibilità delle attuali distribuzioni del sistema operativo per il "Raspberry Pi" (aarch64 vs armhfp): quali sistemi operativi a 64 bit possono in teoria funzionare sulla versione 3++ del Raspberry?
Il mio amato CentOS per architettura ARM di "Userland" non si affrettava a passare all'ultimo kernel e a diventare a 64 bit. E il repository EPEL, collegato chissà da dove senza firma digitale, era un incubo nel mio sonno agitato…
Essendo un sostenitore delle distribuzioni basate su RPM, ho scoperto con sorpresa che nei dibattiti sui sistemi operativi per il "Raspberry Pi" era completamente dimenticata Fedora! E ciò nonostante la sua versione

In questo articolo parlerò di come installare Fedora (aarch64) in Raspberry Pi 3 Model B+ in in un'esecuzione extra minimale. Farò una breve panoramica delle caratteristiche per l'attivazione del punto di accesso Wi-Fi, emerse durante il collaudo della mia precedente configurazione su .
0. Cosa serve
Tutto ciò che ho elencato nel precedente articolo:
- Raspberry Pi 3 Model B+;
- microSD >= 4GB (in seguito è possibile "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 Pi" e la postazione di lavoro con Linux (in questo caso non saranno necessari monitor e tastiera aggiuntivi per la configurazione), accesso a Internet da entrambi i dispositivi;
- Competenze avanzate in Linux (sapere e non avere paura: , e ).
Simile a una costruzione iterativa -l'installazione del proprio Linux, sarà utilizzata l'immagine della distribuzione di Fedora, e poi su quella base sarà creata una minima installazione (senza "compilazione dai sorgenti").
1. Installazione della distribuzione originale
Le coordinate dell'immagine raw del sistema in rete:
Dopo la sua registrazione su microSD e prima dell'inizio dell'uso è necessario:
- Espandere la "radice" del file system (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 - Disattivare SELinux
echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config - Rimuovere il Master di configurazione iniziale:
find /mnt/3/etc/systemd/ -iname initial-setup.service -delete - Consentire 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
Ora si può avviare il "Raspberry" con microSD e connettersi ad esso attraverso la rete.
L'avvio a freddo richiede circa un minuto e mezzo. Le caratteristiche del sistema dopo l'avvio:

rpm -qa | wc -l
444
2. Costruzione di un sistema minimale
Sfortunatamente, il "distribuzione minima" degli sviluppatori si dimostra tutt'altro che modesta nel consumo di risorse. Si può rendere l'immagine del sistema ancora più piccola.
Per fare ciò, sul "Raspberry" è necessario eseguire lo 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 sarà creato un sottocartella ($P) contenente la radice della nuova edizione minima del sistema operativo. Si può spegnere il "Raspberry" e restituire la microSD alla workstation Linux.
3. Installazione del sistema minimale
L'installazione consiste nel copiare i file dell'immagine minima del sistema operativo (ottenuta al passo precedente) sulla microSD appositamente preparata nelle rispettive directory.
Basta una scheda da 2GB con due partizioni:
- /boot/efi — EFI+FAT32, di avvio, 100MB;
- / (radice) — EXT4, tutto il resto dello spazio.
Dopo la preparazione della microSD e la copia dei file su di essa, è necessario:
- riparare l'avvio del sistema;
- attivare la rete;
- configurare l'accesso SSH.
La riparazione dell'avvio consiste nel sostituire gli UUID delle partizioni nei file:
microSD:/boot/efi/EFI/fedora/grub.cfg
microSD:/boot/efi/EFI/fedora/grubenv
e il parametro saved_entry= nell'ultimo file.
Nel file:
microSD:/etc/fstab
si possono trovare i valori precedenti, mentre i valori attuali sono nell'output 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à della rete al primo avvio del "Raspberry" può essere ottenuta con un piccolo "escamotage": creare un link (schematicamente):
ln -s /usr/lib/systemd/system/systemd-networkd.service
microSD:/etc/systemd/system/multi-user.target.wants
e il 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 disabilita systemd-networkd
systemctl abilita systemd-networkd
L'accesso superutente via ssh si configura in modo analogo al punto 1.
Una volta fatto tutto con attenzione e senza errori, puoi spostare la microSD nella "malinka" e iniziare a lavorare con il sistema operativo a 64 bit in una versione estremamente minimale.
4. Sistema pronto
L'immagine del sistema pronto, creata secondo le istruzioni sopra, può essere scaricata al seguente link:
Si tratta di un archivio che contiene due file: uno script di installazione e un TGZ con i file del sistema operativo. L'archivio deve essere estratto sulla workstation Linux, inserire la microSD (basta una scheda da 2GB) e avviare lo script con il parametro — il nome del dispositivo:
.\/install \/dev\/mmcblk0
Fai attenzione!
Senza alcun avviso, il dispositivo verrà formattato e vi sarà installato il sistema operativo.
Dopo che lo script ha funzionato senza errori, puoi spostare la scheda nella "malinka" e usarla: collegati via dhcp, password — "1".
Il sistema è stato pulito da tutti gli ID e le chiavi, motivo per cui ogni nuova installazione è unica.
Ripeto ancora una volta, il sistema è minimale! Quindi non ti spaventare: DNF è presente, per farlo funzionare dovrai "elaborare" il corretto .
L'avvio a freddo della "malinka" richiede circa 40 secondi. Le specifiche del sistema dopo il caricamento:

rpm -qa | wc -l
191
5. Wi-Fi
Fermiamoci un attimo sulle peculiarità dell'implementazione del punto di accesso Wi-Fi. Per dettagli puoi fare riferimento al mio precedente .
EPEL ora non sarà necessario: tutti i pacchetti si trovano nei repository ufficiali.
Probabilmente sarebbe stato opportuno rinunciare a , poiché in Fedora, a differenza di CentOS, — c'è un systemd-networkd abbastanza aggiornato, che include normali server DHCP/DNS integrati. Ma il fatto che in RHEL8 gli sviluppatori , non ispira fiducia nel futuro luminoso del progetto (scellerati). Insomma, non l'ho provato.
Inoltre, i driver attuali dell'adattatore Wi-Fi integrato non devono essere "rubati" dal sistema operativo Raspbian, ma possono essere scaricati direttamente da .
Ecco come appaiono nella mia "malinka" i file di firmware Broadcom (in modo schematico):
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 vivamente a tutti di non ricorrere ai "servizi" degli switch software (), che introducono un carico significativo nello stack di rete e soffocano il routing. Se non si prevede di utilizzare più adattatori wireless, si dovrebbero usare esclusivamente interfacce fisiche. Io ho due Wi-Fi, quindi unisco solo questi in un ponte software (anche se si potrebbe fare a meno di questo, guardando diversamente alla 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 allora sarà possibile dare nomi significativi senza frugare in , ma solo con gli strumenti di systemd-networkd.
Ecco come vengono chiamati, ad esempio, gli adattatori di rete nel mio router:
1: lo: mtu 65536 qdisc noqueue stato UNKNOWN gruppo default qlen 1000
2: wan: mtu 1500 qdisc fq_codel stato UP gruppo default qlen 1000
3: lan: mtu 1500 qdisc noqueue stato UP gruppo default qlen 1000
4: int: mtu 1500 qdisc fq_codel master lan stato UP gruppo default qlen 1000
5: ext: mtu 1500 qdisc mq master lan stato UP gruppo default qlen 1000
- int — integrato, ext — adattatori Wi-Fi esterni (USB), riuniti in un «ponte» lan;
- wan — adattatore Ethernet, a cui è connesso Internet.
Notato? — è veramente un'ottima cosa. Insieme al kernel Linux aggiornato, compiono veri miracoli nella gamma wireless: un intenso «scaricamento torrent» non porterà a una deteriorazione improvvisa della velocità per i vicini. Anche la TV IP domestica «in radio» non «si distrae» e non «barcolla» affatto, anche in presenza di un canale congestionato!
Il file di servizio del demone ha subito alcune piccole modifiche .
Ora appare così (nell'esempio dell'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 funzionare 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 dal mio «Ericsson A1018s»:
(connessione a Internet — 100Mbit/sec)
E in conclusione, una piccola FAQ.
6. FAQ
6.1 Perché costruire un router Wi-Fi su Raspberry?
Si potrebbe rispondere semplicemente dicendo «è interessante provare e tutto il resto».
Ma in realtà, a mio avviso, l'argomento è piuttosto serio. Nell'era di Internet «sanguinoso» comprare un router in negozio e rimanere prigionieri del suo produttore è una prospettiva piuttosto noiosa. Ormai molti capiscono che non si può rimanere con CVE o con una backdoor incorporata.
Naturalmente, è possibile migrare su firmware WRT di appassionati. Probabilmente c'è più fiducia in loro, ma se non si vuole dipendere nemmeno da loro, l'unico modo è avere un prodotto proprio. Idealmente, un computer completo per realizzare tutto ciò che si desidera. In termini di routing, naturalmente.
Pertanto, la scelta del «raspberry» è puramente una mossa economica: un vero computer e a un prezzo accessibile. Anche se, forse, ha anche i suoi «dubitativi» interni.
6.2 Ma il Raspberry è un «non-router»: lento e con una sola porta Ethernet!
Come router Wi-Fi domestico, il «raspberry» mi soddisfa più che bene. Ho già parlato della velocità «wireless» sopra. E solo una porta Ethernet? Bene, in un prodotto simile di Apple è più o meno la stessa cosa!
Ma parlando seriamente, certo che mi piacerebbe di più. E nonostante nel mio ambiente tutti i dispositivi siano collegati senza fili, a volte è comunque necessaria una connessione cablata. Per tali casi ho un «hub mobile»:
un dispositivo — tipo così
6.3 Se questo è un router, non è stato detto nulla sul «tuning» di 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 utilizzo ottimale (anche se l'installatore cerca di formattare la scheda di memoria in modo ingegnoso). Il processo di perfezionamento è infinito, bisogna solo fermarsi in tempo.
6.4 Perché Fedora?
Perché mi piace! Fedora è «mainstream» — un sistema per geek, per i quali è destinato questo articolo. Al momento della scrittura, probabilmente l'unico sistema operativo per Raspberry che è ufficialmente supportato in 64 bit da un notevole team di sviluppatori (da cui non riesco a ricevere) ).
6.5 E il Bluetooth funziona? Come sono video/audio/GPIO?
Non lo so. L'articolo parla di un'installazione minima del sistema e del suo utilizzo successivo come router Wi-Fi.
6.6 Perché tutti gli articoli su CentOS/Fedora/RedHat iniziano con la disattivazione di SELinux?
Perché il sistema è minimale, non ha nemmeno un firewall né le utility per la sua configurazione. Chi ne ha bisogno può installare tutto il necessario separatamente.
6.7 Non è possibile utilizzare il sistema, non è possibile cambiare la password — non c'è passwd. Non c'è ping, non c'è niente!
C'è . Oppure, se questa modalità d'installazione non fa per voi, utilizzate una distribuzione fornita dagli sviluppatori.
6.8 E dove è SWAP? Non posso vivere senza!
Davvero? Bene:
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 immediatamente un'immagine pronta con il punto d'accesso Wi-Fi configurato!
Per preparare l'installer "per tutti" sarà necessario un certo tempo e impegno. Se (improvvisamente!) a qualcuno sembra davvero interessante e necessario - scrivete, troveremo un modo.
Con questo, concludo.
Auguro a tutti una navigazione sicura e un controllo massimo sull'infrastruttura!
Fonte: habr.com
