Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (o router lampone con cappello blu)

l'articolo Raspberry Pi + CentOS = Hotspot Wi-Fi (o router lampone con cappello rosso) Ho parlato di un modo per trasformare un Raspberry in un punto di accesso wireless utilizzando il sistema operativo CentOS. Assemblando il mio router domestico secondo questo disegno, ho soddisfatto il mio ego creativo e ho ricevuto una spinta di tranquillità per un elemento critico della mia accogliente infrastruttura. Tuttavia, ero perseguitato dalla sensazione di incompletezza della soluzione e dal perfezionismo interno: "un risultato imperfetto del lavoro non ha il diritto di esistere". Il pensiero che “l'ideale può e deve essere raggiunto” non mi ha lasciato per un minuto.

E poi un giorno, su uno dei forum tematici, mi sono imbattuto in una discussione sulla profondità di bit dei sistemi operativi esistenti per Raspberry (aarch64 vs armhfp): quale sistema operativo a 64 bit può, in linea di principio, adattarsi e funzionare su Raspberry versione 3 ++?

Il mio amato CentOS per l'architettura ARM di "Userland" non ha avuto fretta di passare all'ultima versione del kernel e di passare a 64 bit. E l'archivio EPEL, collegato da Dio sa dove senza firma digitale, è stato un incubo nel mio sonno agitato...

Parlando da sostenitore delle distribuzioni basate su RPM, sono rimasto sorpreso nello scoprire che il sistema operativo per Raspberry è stato completamente dimenticato nelle discussioni Fedora! E questo nonostante la sua uscita
dalla versione 28 supporta ufficialmente Raspberry Pi 3B+ in versione 64 bit!

Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (o router lampone con cappello blu)
In questo articolo parlerò del metodo di installazione Fedora (aarch64) su Raspberry Pi 3 Modello B + в prestazioni extra-minime. Mi soffermerò brevemente sulle funzionalità di creazione di un punto di accesso Wi-Fi, identificato a seguito del funzionamento di prova della mia precedente configurazione su 7 CentOS.

0. Di cosa avrai bisogno

Tutto è uguale a quanto elencato nell'articolo precedente:

  • Raspberry Pi 3 Modello B+;
  • microSD >= 4GB (successivamente sarà possibile “trasferire” il sistema su un drive da 2GB);
  • Workstation con Linux e lettore di schede microSD;
  • Connettività di rete cablata tra il Raspberry e una workstation 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 (per conoscere e non avere paura: parted, dd и mkfs).

Simile a iterativo LFS-costruendo il proprio Linux, verrà utilizzata l'immagine della distribuzione Fedora e poi, sulla base di essa, verrà creato un sistema minimo (senza “compilare dai sorgenti”).

1. Installazione della distribuzione originale

Coordinate dell'immagine grezza del sistema su Internet:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Dopo averlo registrato su microSD e prima di utilizzarlo è necessario:

  1. Espandi la "root" del file system (3a 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
    

  2. Disabilita SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Rimuovere la procedura guidata di installazione iniziale:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Consenti l'accesso tramite 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 puoi scaricare il "lampone" dalla microSD e connetterti ad esso tramite la rete.

L'avvio a freddo dura circa un minuto e mezzo. TTX del sistema dopo il caricamento:

Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (o router lampone con cappello blu)

rpm -qa | wc -l
444

2. Assemblare un sistema minimo

Sfortunatamente, la "distribuzione minima" da parte degli sviluppatori risulta essere tutt'altro che modesta nel consumo di risorse. L'immagine del sistema può essere resa ancora più piccola.

Per fare ciò è necessario eseguire lo script su Malinka:

#!/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 aver eseguito lo script, verrà creata una sottodirectory nella directory corrente ($P) con il contenuto della root della nuova edizione minima del sistema operativo. Puoi spegnere il Raspberry e restituire la microSD alla workstation Linux.

3. Installazione di un sistema minimo

L'installazione si riduce alla copia dei file minimi di “immagine” del sistema operativo (ottenuti nel passaggio precedente) su una microSD appositamente preparata nelle directory appropriate.

Sono sufficienti una scheda da 2 GB e due partizioni:

  1. / boot / efi - EFI+FAT32, avvio, 100 MB;
  2. / (root) - EXT4, tutto lo spazio rimanente.

Dopo aver preparato la microSD e aver copiato i file su di essa, è necessario:

  • correggere l'avvio del sistema operativo;
  • accendere la rete;
  • configurare l'accesso tramite ssh.

La correzione di avvio consiste nel sostituire l'UUID delle sezioni nei file:

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

e parametro voce_salvata= nell'ultimo file

Nel fascicolo:

microSD:/etc/fstab

puoi trovare i vecchi valori e i valori attuali (aggiornati) nell'output del comando:

blkid | grep mmcblk | sort

Dopo la sostituzione è necessario correggere anche il contenuto fstab sulla microSD in modo che i punti di montaggio corrispondano ai nuovi UUID della partizione.

La funzionalità di rete alla prima accensione del Raspberry può essere ottenuta con una piccola "stampella": crea un collegamento (schematico):

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

e archiviare:

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

Dopo un download riuscito, riordina il lancio systemd-networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

L'accesso come superutente tramite ssh è configurato in modo simile al passaggio 1.

Dopo aver fatto tutto con attenzione e senza errori, puoi spostare la microSD nel "lampone" e iniziare a lavorare con un sistema operativo a 64 bit in una versione extra minimale.

4. Sistema pronto

L’“immagine” del sistema finito, realizzata secondo le istruzioni sopra riportate, può essere scaricata dal link:
Fedora-Tiny-31-5.5.7-200.aarch64

Questo sarà un archivio contenente due file: lo script di installazione e TGZ con i file del sistema operativo. L'archivio deve essere decompresso su una workstation Linux, inserire una microSD (è sufficiente una scheda da 2 GB) ed eseguire lo script con un parametro: il nome del dispositivo:

./install /dev/mmcblk0

Stai attento!

Senza alcun avviso, il dispositivo verrà formattato e su di esso verrà installato il sistema operativo.

Dopo l'esecuzione senza errori dello script, la carta può essere riorganizzata in "lampone" e utilizzata: cattura tramite DHCP, password - "1".

Il sistema viene cancellato da tutti gli ID e le chiavi, motivo per cui ogni nuova installazione è unica.

Ripeto ancora una volta, il sistema... minimo! Quindi non allarmatevi: il DNF è disponibile, perché funzioni bisognerà “inventare” quello corretto /etc/resolv.conf.

L'avvio a freddo del Raspberry dura circa 40 secondi. TTX del sistema dopo il caricamento:

Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (o router lampone con cappello blu)

rpm -qa | wc -l
191

5. Wi-Fi

Mi soffermerò un po 'sulle funzionalità dell'implementazione di un punto di accesso Wi-Fi. Per le specifiche potete fare riferimento al mio precedente Articolo.

EPEL non è più necessario: tutti i pacchetti sono contenuti nei repository ufficiali.

Probabilmente varrebbe la pena arrendersi dnsmasq, poiché Fedora, a differenza di CentOS, ha un systemd-networkd abbastanza recente, che ha normali server DHCP/DNS integrati. Ma il fatto è che negli sviluppatori RHEL8 ha rifiutato di supportare lo stack di rete con qualcosa di diverso da NM, non ispira fiducia nel luminoso futuro del progetto (mascalzoni). In breve, non l'ho provato.

Inoltre gli attuali driver per l'adattatore Wi-Fi integrato non possono essere “rubati” dalla distribuzione Raspbian, ma scaricati direttamente da github.

Ecco come appaiono i file del firmware Broadcom sul mio Raspberry (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 otterrai 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 se non assolutamente necessario (Ponte dei lucchetti ), che introducono un carico significativo nello stack di rete e deprimono il routing. Se non prevedi di avere più adattatori wireless, dovresti utilizzare solo interfacce fisiche. Ho due Wi-Fi, quindi li combino solo in un bridge software (anche se puoi farne a meno guardando la configurazione di hostapd in modo diverso).

E adoro 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 curiosare udev, ma solo utilizzando systemd-networkd.

Ad esempio, questo è il nome degli adattatori di rete del mio router:

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 - integrato, ext — adattatori Wi-Fi esterni (USB) assemblati in un "ponte" lan;
  • pallido — Adattatore Ethernet a cui è connesso Internet.

L'hai notato? fq_codice - una cosa davvero interessante. Insieme ad un nuovo kernel Linux, fanno veri miracoli nella portata wireless: un feroce "download torrent" non porterà ad un improvviso degrado della velocità tra i vicini. Anche una IP-TV domestica che funziona "via etere" con un canale caricato non "si rompe" e non "balbetta" affatto!

Il file di servizio del demone ha subito modifiche minori hostapd.

Ora appare così (usando l'esempio di un 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 lavorare 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 piccolo Photoshop realizzato con il mio Ericsson A1018:

(Connessione Internet - 100Mbit/sec)Raspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (o router lampone con cappello blu)
E infine, una piccola FAQ.

6. FAQ

6.1 Perché realizzare un router Wi-Fi su Raspberry?

Si potrebbe rispondere semplicemente: “è interessante provarci e tutto il resto”.

Ma in effetti, mi sembra che l'argomento sia piuttosto serio. Nell'era della "sanguinosa" Internet, acquistare un router in un negozio e rimanere ostaggio del suo produttore è una prospettiva molto triste. Molte persone capiscono già che sedersi con un CVE o una backdoor integrata non è possibile.

Naturalmente, puoi migrare al firmware WRT dagli appassionati. Probabilmente c’è più fiducia in loro, ma se non vuoi dipendere da loro, usa semplicemente il tuo prodotto. Idealmente, un computer a tutti gli effetti in modo che tutto nel mondo possa essere implementato su di esso. In termini di routing, ovviamente.

Scegliere quindi un “lampone” è una mossa puramente economica: un vero computer e allo stesso tempo poco costoso. Anche se, forse, anche con i loro “doppi” dentro.

6.2 Ma Raspberry è un “router basso”: lento e con una porta Ethernet!

Come router Wi-Fi domestico, il Raspberry per me è più che soddisfacente. Ho già parlato della velocità dell'aria sopra. E c'è solo una Ethernet, beh, in un prodotto simile di Apple è più o meno la stessa cosa!

Ma sul serio, ovviamente vorrei di più. E nonostante nella mia casa tutti i dispositivi siano collegati in modalità wireless, a volte è ancora necessaria una connessione in rame. Per questi casi ho in stock un “hub mobile”:

dispositivo - qualcosa del genereRaspberry Pi + Fedora (aarch64) = Hotspot Wi-Fi (o router lampone con cappello blu)

6.3 Se si tratta di un router, non viene detto nulla sulla "sintonizzazione" del TCP/IP, perché questo è importante!

Oltre alla configurazione dello stack di rete (tcp_fastopen, YeAH, ecc.), questo e l'articolo precedente non coprono altre sfumature, in particolare il processo di preparazione della microSD per un utilizzo ottimale (anche se il programma di installazione tenta di formattare la scheda di memoria in un modo complicato). Il processo di miglioramento è infinito, devi solo fermarti in tempo.

6.4 Perché Fedora?

Perché mi piace! Fedora è un sistema “mainstream” per geek, ai quali questo articolo è in realtà destinato. Al momento in cui scriviamo, forse l’unico sistema operativo che per Raspberry in versione 64 bit è ufficialmente supportato da un significativo staff di sviluppatori (dai quali non vedo l’ora nocciolo 5.6).

6.5 Il Bluetooth funziona? Come va il video/audio/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 disabilitazione di SELinux?

Poiché il sistema è minimo, non dispone nemmeno di un firewall o di utilità per configurarlo. Chiunque ne abbia bisogno può installare in aggiunta tutto ciò di cui ha bisogno.

6.7 Il sistema non può essere utilizzato, la password non può essere modificata - nessuna passwd. Nessun ping, niente di niente!

C'è DNF. Oppure questa opzione di installazione non fa per te: utilizza il kit di distribuzione degli sviluppatori.

6.8 Dov'è SWAP? Non posso vivere senza di lui!

È vero? Va bene allora:

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 già pronta con un punto di accesso Wi-Fi configurato!

Preparare un programma di installazione “per tutti” richiederà tempo e impegno. Se (all’improvviso!) qualcuno lo trova davvero interessante e necessario, scrivici e troveremo qualcosa.

Concludo con questo.

Auguro a tutti una navigazione sicura e il massimo controllo sull'infrastruttura!

Fonte: habr.com

Aggiungi un commento