In dit artikel Ik heb een manier beschreven om de "framboos" om te toveren tot een draadloos toegangspunt met behulp van het besturingssysteem CentOS. Door mijn thuisrouter volgens dit ontwerp te bouwen, heb ik mijn creatieve ego bevredigd en kreeg ik een geruststellend gevoel over een cruciaal element van mijn comfortabele infrastructuur. Echter, het gevoel van onafgebrokenheid van de oplossing en mijn interne perfectionisme lieten me niet met rust: “een imperfect resultaat heeft geen recht van bestaan.” De gedachte dat “het ideaal bereikt kan en moet worden” liet me geen moment los.
En op een dag stuitte ik op een van de thematische forums op een discussie over de architecturen van bestaande besturingssystemen voor de "framboos" (aarch64 versus armhfp): welke 64-bit besturingssystemen kunnen in principe draaien op de Raspberry Pi versie 3++?
Mijn favoriete CentOS voor de ARM-architectuur van "Userland" was niet haastig om over te stappen op de laatste versie van de kernel en 64-bit te worden. En de EPEL-repository, die op de een of andere manier zonder digitale handtekening was aangesloten, was een nachtmerrie in mijn onrustige dromen...
Als voorstander van RPM-gebaseerde distributies ontdekte ik tot mijn verbazing dat in de discussies over besturingssystemen voor de "framboos" volledig was vergeten Fedora! En dat terwijl de release

In dit artikel zal ik uitleggen hoe je Fedora (aarch64) en een werkende opdracht krijgen. Raspberry Pi 3 Model B+ in in een ultra minimale uitvoering. Ik zal kort ingaan op de kenmerken van het opzetten van een Wi-Fi toegangspunt, die zijn ontdekt tijdens de praktische ervaring met mijn eerdere configuratie op .
0. Wat je nodig hebt
Alles wat eerder in het vorige artikel is opgesomd:
- Raspberry Pi 3 Model B+;
- microSD >= 4GB (later kan het systeem worden "overgebracht" naar een 2GB-opslag);
- Een werkstation met Linux en een microSD-kaartlezer;
- Kabelverbinding van de "framboos" naar het werkstation met Linux (in dit geval zijn er geen extra monitor en toetsenbord nodig voor de configuratie), internettoegang voor beide apparaten;
- Gevorderde vaardigheden in Linux (weten en niet bang zijn voor: , en ).
Net als bij een iteratieve -bouw van je eigen Linux, zal een distributie-beeld van Fedora worden gebruikt, en daarop gebaseerd zal een minimale systeem worden gecreëerd (zonder "compilatie vanuit de bron").
1. Installatie van de originele distributie
Coördinaten van het raw-systeemimage op het netwerk:
Na het schrijven naar de microSD en voordat je het kunt gebruiken, moet je:
- De 'root' bestandssysteem uitbreiden (3e partitie, 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 - Schakel SELinux uit
echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config - Verwijder de Initial Setup Wizard:
find /mnt/3/etc/systemd/ -iname initial-setup.service -delete - Sta toegang via ssh toe:
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 kun je de 'Raspberry Pi' opstarten vanaf de microSD en ermee verbinding maken via het netwerk.
De koude start duurt ongeveer anderhalve minuut. Specificaties van het systeem na opstarten:

rpm -qa | wc -l
444
2. Opbouw van het minimale systeem
Helaas blijkt de 'minimale distributie' van de ontwikkelaars verre van de meest bescheiden in hulpbronnenverbruik. Het systeemimage kan nog kleiner gemaakt worden.
Hiervoor moet je het volgende script op de 'Raspberry Pi' uitvoeren:
#!/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
Na het uitvoeren van het script wordt er een submap aangemaakt in de huidige directory ($P) met de inhoud van de root van de nieuwe minimale editie van het OS. Je kunt de 'Raspberry Pi' uitschakelen en de microSD terugplaatsen in de Linux-werkstation.
3. Installatie van het minimale systeem
De installatie bestaat uit het kopiëren van de bestanden van het minimale 'image' van het OS (verkregen in de vorige stap) naar een speciaal voorbereide microSD in de juiste mappen.
Een kaartje van 2GB en twee partities zijn voldoende:
- /boot/efi — EFI+FAT32, opstart, 100MB;
- / (root) — EXT4, de resterende ruimte.
Na het voorbereiden van de microSD en het kopiëren van de bestanden daarop, moet je:
- de opstart van het OS herstellen;
- het netwerk inschakelen;
- toegang via ssh configureren.
Het herstellen van de opstart houdt in dat je de UUID van de partities in de bestanden vervangt:
microSD:/boot/efi/EFI/fedora/grub.cfg
microSD:/boot/efi/EFI/fedora/grubenv
en de parameter saved_entry= in het laatste bestand
In het bestand:
microSD:/etc/fstab
kun je de oude waarden vinden, en de huidige (actuele) — in de uitvoer van de opdracht:
blkid | grep mmcblk | sort
Na het vervangen moet je ook de inhoud van fstab op de microSD corrigeren, zodat de mountpunten overeenkomen met de nieuwe UUID van de partities.
Netwerkfunctionaliteit bij de eerste aanzet van de 'Raspberry Pi' kan worden bereikt met een kleine 'hack' — maak een link (schematisch):
ln -s /usr/lib/systemd/system/systemd-networkd.service
microSD:/etc/systemd/system/multi-user.target.wants
en het bestand:
mkdir -p microSD:/etc/systemd/network
cat > microSD:/etc/systemd/network/dhcp.network << EOF
[Match]
Name=*
[Network]
DHCP=ipv4
EOF
Na succesvolle upload, breng de opstart in orde :
systemctl disable systemd-networkd
systemctl enable systemd-networkd
De toegang als supergebruiker via ssh wordt op dezelfde manier ingesteld als punt 1.
Wanneer alles nauwkeurig en zonder fouten is gedaan, kan de microSD worden overgezet naar de 'malinka' en kan er begonnen worden met de 64-bits OS in een uiterst minimalistische uitvoering.
4. Het voltooide systeem
Het 'beeld' van het voltooide systeem, gemaakt volgens bovenstaande instructies, kan worden gedownload via de link:
Dit zal een archief zijn, dat twee bestanden bevat: een installatiescript en een TGZ met de besturingssysteem bestanden. Het archief moet worden uitgepakt op de werkstation met Linux, de microSD (minimaal 2GB kaart) moet worden geplaatst en het script moet worden gestart met de parameter - de naam van het apparaat:
./install /dev/mmcblk0
Wees voorzichtig!
Zonder enige waarschuwing zal het apparaat worden geformatteerd en zal het besturingssysteem worden geïnstalleerd.
Na een foutloze uitvoering van het script kan de kaart worden overgezet naar de 'malinka' en kan deze worden gebruikt: DHCP ontvangen, wachtwoord is '1'.
Het systeem is ontdaan van alle ID's en sleutels, waardoor elke nieuwe installatie uniek is.
Ik herhaal nogmaals, het systeem is minimaal! Dus wees niet bang: DNF is aanwezig, voor de werking ervan moet je een juiste verzinnen .
De koude start van de 'malinka' duurt ongeveer 40 seconden. Specificaties van het systeem na opstarten:

rpm -qa | wc -l
191
5. Wi-Fi
Ik zal even stilstaan bij de bijzonderheden van de Wi-Fi toegangspunt implementatie. Voor details kun je mijn vorige .
EPEL is nu niet meer nodig - alle pakketten bevinden zich in de officiële repositories.
Waarschijnlijk zou het beter zijn om af te zien van , aangezien in Fedora, in tegenstelling tot CentOS, de systemd-networkd vrij recent is, met normale ingebouwde DHCP/DNS servers. Maar het feit dat ontwikkelaars in RHEL8 , geeft geen vertrouwen in de toekomst van het project (schurken). Kortom, ik heb het niet geprobeerd.
Verder kunnen actuele stuurprogramma's voor de ingebouwde Wi-Fi adapter niet worden 'gestolen' uit de Raspbian distributie, maar rechtstreeks van worden gedownload .
Zo zien de firmware bestanden van Broadcom eruit op mijn 'malinka' (schematisch):
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
Zonder hen is 5GHz/AC niet mogelijk.
Over het aantal en de namen van interfaces. Ik raad nu iedereen ten zeerste aan om, zonder dringende noodzaak, geen gebruik te maken van de 'diensten' van software-switches (), die aanzienlijke belasting in de netwerkstack introduceren en de routering onderdrukken. Als er geen meerdere draadloze adapters worden gepland, moeten uitsluitend fysieke interfaces worden gebruikt. Ik heb twee Wi-Fi's, daarom combineer ik alleen deze in een softwarebrug (hoewel dit ook zonder kan, door anders naar de configuratie van hostapd te kijken).
En ik hou ervan om interfaces te hernoemen.
Hiervoor moet je in Fedora een symbolische link aanmaken:
/etc/systemd/network/99-default.link -> /dev/null
en dan kun je zinvolle namen geven zonder te rommelen in , maar alleen met behulp van systemd-networkd.
Zo worden de netwerkadapters in mijn router genoemd:
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 — ingebouwd, ext — externe (USB) Wi-Fi adapters, samengevoegd in een 'bridge' lan;
- wan — Ethernet adapter waar de internetverbinding op is aangesloten.
Opgemerkt? — is echt een geweldige functie. Samen met de nieuwste Linux-kernel verricht het echte wonderen in het draadloze spectrum: een heftige 'torrent-download' leidt niet tot plotselinge snelheiddegradatie bij buren. Zelfs de 'draadloze' thuis-IP-TV houdt het vol, zelfs bij een drukke verbinding, zonder te 'versplinteren' of te 'stotteren'!
Het servicemodel van de daemon .
heeft een kleine wijziging ondergaan. Het ziet er nu zo uit (aan de hand van de ingebouwde adapter):
[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
En de 'magische' hostapd-int.conf voor gebruik in 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]
Een beetje "photoshop" dat ik met mijn "Ericsson A1018s" heb gemaakt:
(verbinding met het internet — 100 Mbit/s)
En tot slot een kleine FAQ.
6. FAQ
6.1 Waarom een Wi-Fi router op Raspberry maken?
Je zou simpelweg kunnen antwoorden dat het interessant is om het te proberen en dat is het.
Maar in feite, zoals ik denk, is het onderwerp behoorlijk serieus. In het tijdperk van het "bloedige" internet is het kopen van een router in de winkel en het blijven hangen aan de fabrikant ervan een behoorlijk sombere vooruitzicht. Veel mensen begrijpen nu dat het niet goed is om te zitten met een CVE of een ingebouwde backdoor.
Natuurlijk kun je migreren naar WRT-firmware van enthousiastelingen. De vertrouwensband met hen is waarschijnlijk groter, maar als je niet afhankelijk wilt zijn van hen, dan blijft er maar één optie over — je eigen product. Idealiter een volwaardige computer voor de mogelijkheid om alles op uit te voeren. Wat routering betreft, uiteraard.
Daarom is de keuze voor de "framboos" puur een economische keuze: een echte computer en tegelijkertijd goedkoop. Hoewel, misschien ook — met zijn eigen "dubbelzinnigheden" van binnen.
6.2 Maar de Raspberry is een "geen-router": traag en met slechts één Ethernetpoort!
Als thuis Wi-Fi router voldoet de "framboos" mij meer dan voldoende. Over de snelheid "in de lucht" heb ik hierboven al vertelt. En met slechts één Ethernet, nouja, in een vergelijkbaar product van Apple is het precies hetzelfde!
En als we serieus zijn, dan zou ik natuurlijk meer willen. En ondanks dat in mijn huishouden alle apparaten draadloos zijn aangesloten, is er soms toch een bekabelde verbinding nodig. Voor zulke gevallen heb ik een "mobiele hub" in petto:
een apparaat — zoals dit
6.3 Maar als dit een router is, waarom is er dan niets gezegd over het "tunen" van TCP/IP, want dat is belangrijk!
Naast de configuratie van de netstack (tcp_fastopen, YeAH, enz.), zijn in dit en het vorige artikel andere nuances niet onthuld, met name het proces van het voorbereiden van microSD voor optimaal gebruik (de installatietool probeert de geheugenkaart op een slimme manier te formatteren). Het proces van verfijnen is eindeloos, je moet alleen op tijd stoppen.
6.4 Waarom Fedora?
Omdat ik het leuk vind! Fedora is de 'mainstream' - een systeem voor geeks, waarvoor dit artikel eigenlijk bedoeld is. Op het moment van schrijven is het misschien de enige OS die op de Raspberry officieel wordt ondersteund in 64-bit uitvoering door een aanzienlijk team van ontwikkelaars (van wie ik nog steeds niets heb gehoord). ).
6.5 Werkt Bluetooth? Hoe zit het met video/audio/GPIO?
Ik weet het niet. Het artikel gaat over de minimale installatie van het systeem en het verdere gebruik als Wi-Fi-router.
6.6 Waarom beginnen alle artikelen over CentOS/Fedora/RedHat met het uitschakelen van SELinux?
Omdat het systeem minimaal is, er is zelfs geen firewall en geen tools om deze in te stellen. Wie het nodig heeft, kan alles wat nodig is extra installeren.
6.7 Het systeem is niet te gebruiken, het is niet mogelijk om het wachtwoord te veranderen - er is geen passwd. Geen ping, niets!
Er is . Of deze installatieoptie is niet voor jou - gebruik de distributie van de ontwikkelaars.
6.8 En waar is SWAP? Ik kan niet zonder!
Echt? Nou, goed:
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 Ik zou graag meteen een kant-en-klaar beeld willen downloaden met een geconfigureerd Wi-Fi-toegangspunt!
Voor de voorbereiding van de installer 'voor iedereen' zal enige tijd en moeite nodig zijn. Als het (plotseling) iemand echt interessant en noodzakelijk lijkt - laat het me weten, we verzinnen wel iets.
Hiermee sluit ik af.
Ik wens iedereen veilig surfen en maximale controle over de infrastructuur!
Bron: habr.com
