Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (eller hindbærrouter i blå hat)

I artiklen Raspberry Pi + CentOS = Wi-Fi Hotspot (eller hindbær-router i rød hat) Jeg har fortalt om, hvordan man kan omdanne en "Raspberry Pi" til et trådløst adgangspunkt ved hjælp af operativsystemet CentOS. Ved at samle min hjemme-router efter sådan et diagram, tilfredsstillede jeg mit kreative ego og fik en følelse af ro over det kritisk vigtige element i min hyggelige infrastruktur. Men følelsen af ufuldstændighed i løsningen og min indre perfektionisme lod mig ikke i fred: "et ufuldkomment resultat har ikke ret til at eksistere." Tankerne om, at "idealet kan og skal opnås," forlod mig ikke et øjeblik.

En dag stødte jeg på et tema på et forum, hvor der blev diskuteret bitdybden af de nuværende operativsystemer til "Raspberry Pi" (aarch64 vs armhfp): hvilke 64-bit OS'er kan overhovedet passe ind og fungere på Raspberry version 3++?

Min yndlings CentOS til ARM-arkitektur fra "Userland" var ikke hurtig til at opgradere til den nyeste kernel og blive 64-bit. Og EPEL-repositoriet, tilknyttet Gud ved hvor uden digital signatur, var et mareridt i min urolige søvn...

Som tilhænger af RPM-baserede distributioner blev jeg overrasket over at opdage, at en helt glemt FedoraOS ikke blev nævnt i diskussionerne! Og det er på trods af at dens udgivelse
fra version 28 officielt understøtter Raspberry Pi 3B+ i 64-bit udførelse!

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (eller hindbærrouter i blå hat)
I denne artikel vil jeg fortælle om, hvordan man installerer Fedora (aarch64) og få en fungerende kommando. Raspberry Pi 3 Model B+ i i en ekstra minimal udførelse. Jeg vil kort gennemgå de særlige egenskaber ved oprettelsen af et Wi-Fi-adgangspunkt, som blev opdaget som følge af praktisk erfaring med min tidligere konfiguration på CentOS 7.

0. Hvad du har brug for

Det samme som nævnt i den forrige artikel:

  • Raspberry Pi 3 Model B+;
  • microSD >= 4GB (senere kan systemet "overføres" til et 2GB drev);
  • En arbejdsstation med Linux og en microSD-kortlæser;
  • Kablet netværk mellem "Raspberry Pi" og arbejdsstationen med Linux (i dette tilfælde er der ikke brug for ekstra monitor og tastatur til opsætning), internetadgang fra begge enheder;
  • Avanceret færdighed i Linux (at vide og ikke være bange for: parted, dd og mkfs).

Som i en iterativ LFS-samling af eget Linux, vil distributionsbilledet Fedora blive brugt, og dernæst vil der blive oprettet et minimalt system (uden "kompilering fra kildekode").

1. Installation af den originale distribution

Koordinaterne til systemets rå billede på nettet:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Efter at have skrevet den til microSD og før brug skal der gøres følgende:

  1. Udvide «roden» af filsystemet (3. partition, 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. Deaktivere SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Fjerne Master for første opsætning:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Tillade adgang via 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
    

Nu kan du starte «malinen» fra microSD og oprette forbindelse til den over netværket.

Kold opstart tager omkring halvanden minut. Systemets ydeevne efter opstart:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (eller hindbærrouter i blå hat)

rpm -qa | wc -l
444

2. Bygning af et minimalt system

Desværre er «minimal distribution» fra udviklerne ikke den mest sparsomme i ressourceforbrug. Systembilledet kan laves endnu mindre.

For at gøre dette skal der køres et script på «malinen»:

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

Efter scriptet er kørt, vil der blive oprettet en undermappe i den aktuelle katalog ($P) med indholdet af roden til den nye minimale udgave af OS. Du kan slukke «malinen» og sætte microSD tilbage i din Linux arbejdsstation.

3. Installation af det minimale system

Installationen består i at kopiere filerne fra det minimale «billede» af OS (fået fra det foregående trin) til en specielt forberedt microSD i de relevante kataloger.

Et 2GB kort med to partitioner er tilstrækkeligt:

  1. /boot/efi — EFI+FAT32, bootbar, 100MB;
  2. / (rod) — EXT4, alt det resterende plads.

Efter forberedelse af microSD og kopiering af filer til den, skal der gøres følgende:

  • fikse OS-opstart;
  • aktivere netværket;
  • konfigurere ssh-adgang.

Reparation af opstarten involverer at ændre UUID'erne for partitionerne i filerne:

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

og parameteren saved_entry= i den sidste fil

I filen:

microSD:/etc/fstab

kan de gamle værdier findes, mens de aktuelle (gældende) er i outputtet fra kommandoen:

blkid | grep mmcblk | sort

Efter ændringen skal indholdet af fstab på microSD også rettes, så monteringspunkterne svarer til de nye UUID'er for partitionerne.

Netværksarbejdsevne ved første opstart af «malinen» kan opnås ved en lille «hurtigløsning» — oprette et link (skematisk):

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

og filen:

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

Efter en vellykket opstart — bringe opstarten i orden systemd-networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

Superbrugeradgang via ssh konfigureres på samme måde som punkt 1.

Når alt er gjort omhyggeligt og uden fejl, kan du tage microSD-kortet ud af 'malinchen' og begynde at arbejde med det 64-bit OS i ultra-minimalistisk form.

4. Det færdige system

‘Billedet’ af det færdige system, oprettet efter ovenstående instruktion, kan downloades via linket:
Fedora-Tiny-31-5.5.7-200.aarch64

Dette vil være et arkiv, der indeholder to filer: installationsscript og TGZ med OS-filerne. Arkivet skal udpakkes på arbejdsstationen Linux, indsætte microSD (et 2GB kort er tilstrækkeligt) og køre scriptet med parameteren — enhedsnavnet:

.\/install \/dev\/mmcblk0

Vær opmærksom!

Uden nogen advarsler vil enheden blive formateret, og operativsystemet bliver installeret på den.

Efter at scriptet har kørt uden fejl, kan kortet tages ud og sættes i 'malinchen', så kan du bruge det: modtage via dhcp, adgangskode — ‘1’.

Systemet er renset for alle ID'er og nøgler, hvilket gør hver ny installation unik.

Jeg gentager igen, systemet — minimalistisk! Så vær ikke bange: DNF er til stede, og for dets funktionalitet skal der ‘komponeres’ det rigtige /etc/resolv.conf.

Kold opstart af 'malinchen' tager cirka 40 sekunder. Systemets tekniske specifikationer efter opstart:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (eller hindbærrouter i blå hat)

rpm -qa | wc -l
191

5. Wi-Fi

Lad mig kort berøre detaljerne ved implementeringen af Wi-Fi-adgangspunktet. Du kan henvise til min tidligere artikel.

EPEL er ikke længere nødvendig — alle pakker findes i de officielle repositories.

Det ville nok have været bedre at undgå dnsmasq, da Fedora, i modsætning til CentOS, har en tilstrækkelig ny systemd-networkd, hvor der er normale indbyggede DHCP/DNS-servere. Men det faktum, at udviklerne i RHEL8 har opgivet at støtte netværksstakken med andet end NM, giver ikke meget tillid til projektets lysere fremtid (narhvaler). Kort sagt, jeg har ikke prøvet det.

Desuden kan du hente de relevante drivere til det indbyggede Wi-Fi-adapter direkte fra github.

Sådan ser Broadcom-firmwarefilerne ud på min 'malinchen' (skematisk):

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

Uden dem vil 5GHz/AC ikke fungere.

Angående antallet og navnene på interface. Nu anbefaler jeg stærkt alle at undgå‘ tjenester’ fra software-switches uden særlige behov.bro), som påfører netværksstakken en betydelig belastning og undertrykker routing. Hvis der ikke planlægges flere trådløse adaptere, skal der udelukkende benyttes fysiske grænseflader. Jeg har to Wi-Fi, så jeg kombinerer kun dem i en softwarebro (selvom det også kan klares uden dette ved at se anderledes på konfigurationen af hostapd).

Og jeg kan godt lide at omdøbe grænseflader.

For at gøre dette i Fedora skal du oprette et symbolsk link:

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

og så kan du give betydningsfulde navne uden at rode rundt i udev, men kun ved hjælp af systemd-networkd.

Sådan hedder netværksadapterne i min router:

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 — indbygget, ext — eksterne (USB) Wi-Fi-adaptere, samlet i en "bro" lan;
  • wan — Ethernet-adapter, som er tilsluttet internettet.

Læg mærke til det? fq_codel — er virkelig en fantastisk ting. Sammen med det nyeste Linux-kerne gør det ægte mirakler i det trådløse bånd: en intens "torrent-download" vil ikke pludselig medføre en hastighedsnedgang for naboerne. Selv det hjemlige IP-TV, der "fungerer over luften", går ikke "i stykker" eller "hakker" overhovedet, selv ved en belastet kanal!

Servicefilen for dæmonen har fået små ændringer hostapd.

Det ser nu sådan ud (med indbygget adapter som eksempel):

[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

Og den "magiske" hostapd-int.conf til at arbejde i 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]

Lidt "photoshopping" lavet med min "Ericsson A1018s":

(forbindelse til internettet - 100 Mbit/s)Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (eller hindbærrouter i blå hat)
Og til sidst en lille FAQ.

6. FAQ

6.1 Hvorfor lave en Wi-Fi-router på Raspberry?

Man kunne blot svare, at «det er spændende at prøve og sådan noget».

Men faktisk virker emnet ret seriøst for mig. I en tid med «blodige» internettet er det en temmelig trist perspektiv at købe en router i butikken og blive en fange af producenten. Mange forstår allerede, at man ikke kan sidde med en CVE- eller indbygget bagdør.

Selvfølgelig kan man migrere til WRT-firmware fra entusiaster. Tilliden til dem er nok større, men hvis man ikke ønsker at være afhængig af dem, så kun – sit eget produkt. Ideelt set – en fuld computer for muligheden for at realisere alt muligt. Hvad angår routing, selvfølgelig.

Derfor er valget af «malinen» ren økonomisk fornuft: en ægte computer og samtidig – overkommelig. Selvom, muligvis også – med sine egne «tvivlsomme» aspekter.

6.2 Men Raspberry er en «billig router»: langsom og med én Ethernet-port!

Som hjemme-Wi-Fi-router tilfredsstiller «malinen» mig mere end nok. Om hastigheden «i luften» har jeg allerede fortalt ovenfor. Og med kun én Ethernet-port, nå men i et lignende produkt fra Apple er det omtrent det samme!

Og hvis vi skal være seriøse, så ville man selvfølgelig gerne have mere. Og på trods af at alle mine enheder er forbundet trådløst, er det nogle gange nødvendigt med en kablet forbindelse. Til sådanne tilfælde har jeg en «mobil hub»:

device – sådan nogetRaspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (eller hindbærrouter i blå hat)

6.3 Hvis det er en router, så er der ikke sagt noget om «tuning» af TCP/IP, for det er vigtigt!

Udover konfigurationen af netværksstakken (tcp_fastopen, YeAH osv.), er der ikke blevet afdækket andre nuancer i denne og den tidligere artikel, især processen med at forberede microSD til optimal brug (selv om installationsprogrammet forsøger at formatere hukommelseskortet på en smart måde). Forbedringsprocessen er uendelig, man skal bare stoppe i tide.

6.4 Hvorfor Fedora?

Fordi jeg kan lide det! Fedora er «mainstream» - et system for nørder, som denne artikel er tiltænkt. På tidspunktet for skrivelsen, er det muligvis den eneste OS, der officielt understøttes af et stort team af udviklere i 64-bit version for Raspberry (som jeg på ingen måde har set) kerne 5.6).

6.5 Fungerer Bluetooth? Hvordan med video/lyd/GPIO?

Jeg ved det ikke. Artiklen handler om den minimale installation af systemet og dets efterfølgende brug som Wi-Fi-router.

6.6 Hvorfor starter alle artikler om CentOS/Fedora/RedHat med at deaktivere SELinux?

Fordi systemet er minimalt, der er ikke engang en firewall eller værktøjer til at konfigurere det. De, der har brug for det, kan installere alt nødvendigt separat.

6.7 Det er umuligt at bruge systemet, man kan ikke ændre password - der er ingen passwd. Der er ingen ping, der er intet!

Der er DNF. Eller hvis denne installationsmetode ikke er for dig - brug distributionsversionen fra udviklerne.

6.8 Jamen, hvor er SWAP? Jeg kan ikke leve uden det!

Virkelig? Nå, godt:

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 Jeg ville gerne downloade et færdigt billede med den konfigurerede Wi-Fi-adgangspunkt!

For at forberede en installer 'til alle' kræves der en vis mængde tid og indsats. Hvis (pludselig!) nogen finder det virkelig interessant og nødvendigt - skriv, så finder vi på noget.

Hermed vil jeg afslutte.

Jeg ønsker alle sikker surfing og maksimal kontrol over infrastrukturen!

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster