V článku jsem popsal způsob, jak proměnit "malinku" v bezdrátový přístupový bod pomocí operačního systému CentOS. Sestavením domácího routeru podle tohoto nákresu jsem uspokojil své kreativní ego a získal klid, že mám pod kontrolou kriticky důležitou součást mé útulné infrastruktury. Avšak pocit nedokončenosti a vnitřní perfekcionismus mi nedávaly klid: "nedokonalý výsledek práce nemá právo na existenci". Myšlenka, že "ideál může a měl by být dosažen", mě neopouštěla ani na minutu.
A tak jsem jednoho dne na jednom z tematických fór narazil na diskusi o architekturách operačních systémů pro "malinku" (aarch64 vs armhfp): jaké 64-bitové OS vůbec mohou běžet na Raspberry verzi 3++?
Má oblíbená CentOS pro architekturu ARM od "Userlandu" nespěchala s přechodem na poslední verzi jádra a nechtěla se stát 64-bitovou. A repository EPEL, které bylo připojeno Bohu ví odkud bez digitálního podpisu, bylo noční můrou v mém neklidném snu...
Jako příznivec RPM-based distribucí jsem s úžasem zjistil, že v diskuzích o OS pro "malinku" byla naprosto zapomenutá Fedora! A to přitom její vydání

V tomto článku se podělím o způsob instalace Fedora (aarch64) na Raspberry Pi 3 Model B+ v v extrémně minimálním provedení. Krátce se zmíním o zvláštnostech nastavení Wi-Fi přístupového bodu, které se projevily během experimentálního používání mé předchozí konfigurace na .
0. Co budete potřebovat
Vše stejné, co bylo uvedeno v předchozím článku:
- Raspberry Pi 3 Model B+;
- microSD >= 4GB (následně je možné "přesunout" systém na 2GB úložiště);
- Pracovní stanice s Linuxem a čtečkou microSD;
- Drátové síťové propojení "malinky" a pracovní stanice s Linuxem (v tomto případě nebudete potřebovat další monitor a klávesnici pro nastavení), přístup na Internet z obou zařízení;
- Pokročilé dovednosti v Linuxu (znát a nebát se: , a ).
Podobně jako u iterativní -sestavení vlastního Linuxu, bude použit distribučný obraz Fedora, a poté na jeho základě - vytvořena minimální systém (bez "kompilace z zdrojů").
1. Instalace originální distribuce
Souřadnice raw obrazu systému na síti:
Po jeho zapsání na microSD a před začátkem používání je třeba:
- Rozšířit „kořen“ souborového systému (3. oddíl, 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 - Deaktivovat SELinux
echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config - Odstranit Průvodce první konfigurace:
find /mnt/3/etc/systemd/ -iname initial-setup.service -delete - Povolit přístup přes 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
Teď už můžete spustit „malinku“ z microSD a připojit se k ní přes síť.
Studený start trvá zhruba jednu a půl minuty. Technické údaje systému po spuštění:

rpm -qa | wc -l
444
2. Sestavení minimálního systému
Bohužel, „minimální distribuce“ od vývojářů se ukazuje jako daleko nejnáročnější na zdroje. Obraz systému lze ještě zmenšit.
K tomu je třeba na „malince“ spustit skript:
#!/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
Po dokončení skriptu bude v aktuálním adresáři vytvořen podadresář ($P) se soubory kořene nové minimální edice OS. Můžete vypnout „malinku“ a vrátit microSD do pracovní stanice Linux.
3. Instalace minimálního systému
Instalace spočívá v zkopírování souborů minimálního „obrazu“ OS (získaného v předchozím kroku) na speciálně připravenou microSD do odpovídajících adresářů.
Stačí 2GB karta a dva oddíly na ní:
- /boot/efi — EFI+FAT32, spouštěcí, 100MB;
- / (kořen) — EXT4, veškeré zbývající místo.
Po přípravě microSD a zkopírování na ni souborů je třeba:
- opravit zavádění OS;
- zapnout síť;
- nastavit přístup přes ssh.
Oprava zavádění spočívá ve výměně UUID oddílů v souborech:
microSD:/boot/efi/EFI/fedora/grub.cfg
microSD:/boot/efi/EFI/fedora/grubenv
a parametru saved_entry= v posledním souboru
V souboru:
microSD:/etc/fstab
najdete staré hodnoty, zatímco aktuální (platné) — v výstupu příkazu:
blkid | grep mmcblk | sort
Po výměně je také třeba upravit obsah fstab na microSD, aby odpovídaly nové UUID oddílů.
Síťové funkčnosti při prvním zapnutí „malinky“ lze dosáhnout malým „kostrčem“ — vytvořit odkaz (schématicky):
ln -s /usr/lib/systemd/system/systemd-networkd.service
microSD:/etc/systemd/system/multi-user.target.wants
a soubor:
mkdir -p microSD:/etc/systemd/network
cat > microSD:/etc/systemd/network/dhcp.network << EOF
[Match]
Name=*
[Network]
DHCP=ipv4
EOF
Po úspěšném načtení — upravte spuštění :
systemctl disable systemd-networkd
systemctl enable systemd-networkd
Přístup superuživatele přes ssh se nastavuje podobně jako bod 1.
Pokud vše provedete pečlivě a bez chyb, můžete přeinstalovat microSD do "malinky" a začít pracovat se 64bitovým OS v extrémně minimalistické verzi.
4. Hotový systém
"Obraz" hotového systému, vytvořený podle výše uvedeného návodu, si můžete stáhnout na odkazu:
Bude to archiv, který obsahuje dva soubory: instalační skript a TGZ se soubory OS. Archiv je třeba rozbalit na pracovní stanici Linux, vložit microSD (stačí karta o velikosti 2 GB) a spustit skript s parametrem — názvem zařízení:
.\/install \/dev\/mmcblk0
Buďte opatrní!
Bez jakýchkoli varování bude zařízení naformátováno a na něj - instalován operační systém.
Po úspěšném provedení skriptu můžete kartu přenést do "malinky" a používat: chytat přes dhcp, heslo — "1".
Systém byl očištěn od všech ID a klíčů, což činí každou novou instalaci unikátní.
Znovu opakuji, systém — minimální! Nebojte se: DNF je k dispozici, pro jeho funkčnost budete muset "vymyslet" správný .
Studený start "malinky" trvá přibližně 40 sekund. Technické parametry systému po načtení:

rpm -qa | wc -l
191
5. Wi-Fi
Na chvíli se zastavím nad vlastnostmi implementace Wi-Fi přístupového bodu. Pro podrobnosti se můžete obrátit na moji předchozí .
EPEL nyní nebude třeba — všechny balíčky jsou obsaženy v oficiálních repozitářích.
Možná by stálo za to se vzdát , protože ve Fedoře, na rozdíl od CentOS, — je dostatečně nový systemd-networkd, ve kterém — jsou normální vestavěné DHCP\/DNS servery. Ale skutečnost, že v RHEL8 vývojáři , nevzbuzuje důvěru ve světlou budoucnost projektu (negrádi). Jinak řečeno, nezkoušel jsem.
Dále aktuální ovladače vestavěného Wi-Fi adaptéru nemusíte "krást" z distribuce Raspbian, ale stahovat přímo z .
Takto vypadají na mé "malince" soubory firmwaru Broadcom (schématicky):
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
Bez nich nebude fungovat 5GHz\/AC.
Ohledně počtu a názvů rozhraní. Nyní všem důrazně doporučuji, aby se bez vážné potřeby vyhýbali „službám“ softwarových switchů (), které značně zatěžují síťový stack a potlačují routování. Pokud není plánováno více bezdrátových adaptérů, je třeba používat výhradně fyzická rozhraní. Mám dva Wi-Fi, proto je pouze kombinuji do softwarového mostu (i když se lze obejít i bez toho, pokud se na nastavení hostapd podíváme z jiného úhlu).
A přejmenovávat rozhraní mám rád.
K tomu je potřeba ve Fedoře vytvořit symbolický odkaz:
/etc/systemd/network/99-default.link -> /dev/null
a pak bude možné dávat smysluplné názvy, aniž bychom museli hrabat v , pouze pomocí systemd-networkd.
Takto například jsou pojmenovány síťové adaptéry v mém routeru:
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 — integrovaný, ext — externí (USB) Wi-Fi adaptéry, které jsou spojeny v „most“ lan;
- wan — Ethernet adaptér, do kterého je připojeno Internet.
Všimli jste si? — to je opravdu skvělá věc. Spolu s novým jádrem Linux dělá skutečné zázraky v bezdrátovém pásmu: intenzivní „torrentování“ nevede k neočekávané degradaci rychlosti u sousedů. Dokonce i domácí IP-TV, které funguje „vzduchem“, se při zatíženém kanálu vůbec „nerozpadá“ a „neháček“!
Služební soubor démona prodělal malé změny .
Nyní vypadá takto (na příkladu integrovaného adaptéru):
[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
A „kouzelný“ hostapd-int.conf pro provoz v 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]
Trochu "Photoshop" provedený na mém "Ericsson A1018s":
(připojení k internetu – 100 Mbit/s)
A na závěr malý FAQ.
6. FAQ
6.1 Proč si udělat Wi-Fi router na Raspberry?
Jednoduše bych mohl odpovědět, že „je to zajímavé vyzkoušet a to je všechno“.
Ale ve skutečnosti si myslím, že téma je dost vážné. V éře „brutálního“ internetu kupovat router v obchodě a zůstat rukojmím výrobce – to je dost deprimující vyhlídka. Mnozí už chápou, že sedět s CVE nebo v zabudovaném backdooru není dobré.
Samozřejmě, můžete přejít na WRT firmware od nadšenců. Důvěra v ně je pravděpodobně větší, ale pokud se nechcete spoléhat ani na ně, pak jedině – vlastní výrobek. Ideálně – plnohodnotný počítač pro realizaci všech možných projektů. Z pohledu routingu, samozřejmě.
Proto je volba „malinky“ čistě ekonomickým krokem: skutečný počítač a navíc – levný. Ačkoliv, možná také – se svými „vnitřními rozporuplnostmi“.
6.2 Ale Raspberry je přece „neddrouter“: pomalý a s jedním Ethernet portem!
Jako domácí Wi-Fi router mě „malinka“ uspokojuje více než dost. O rychlosti „na vzduchu“ jsem už psal výše. A jen jeden Ethernet, tak to v podobném produktu od Apple vypadá úplně stejně!
A pokud mluvím vážně, tak samozřejmě bych chtěl víc. A i když mám všechna zařízení připojena bezdrátově, občas je potřeba i měděné spojení. Pro takové případy mám připravený „mobilní hub“:
zařízení – něco takového
6.3 Pokud je to router, nic se neřeklo o „tuningování“ TCP/IP, protože to je důležité!
Kromě nastavení síťového zásobníku (tcp_fastopen, YeAH atd.) v tomto a předchozím článku nebyly uvedeny další nuance, konkrétně proces přípravy microSD pro optimální využití (pokud jde o instalátor, pokouší se formátovat paměťovou kartu chytrým způsobem). Proces zdokonalování je nekonečný, stačí se včas zastavit.
6.4 Proč Fedora?
Protože se mi to líbí! Fedora je "mainstream" — systém pro geeky, pro které je tento článek vlastně určen. V době psaní byla snad jediným oficiálně podporovaným operačním systémem pro Raspberry v 64-bitovém provedení s významným týmem vývojářů (od kterých se nikam nedočkám). ).
6.5 Funguje Bluetooth? Jak to je s videem/zvukem/GPIO?
Nevím. Článek je o minimální instalaci systému a jeho následném použití jako Wi-Fi routeru.
6.6 Proč všechny články o CentOS/Fedora/RedHat začínají zakázáním SELinuxu?
Protože systém je minimální, není v něm ani firewall a utilit pro jeho nastavení. Kdo to potřebuje, může si nainstalovat vše potřebné navíc.
6.7 Systém nelze používat, nelze změnit heslo — není passwd. Není ping, není nic!
Existuje . Nebo tento způsob instalace není pro vás – využijte distribuci od vývojářů.
6.8 Kde je SWAP? Nemohu bez něj žít!
Opravu? No, dobře:
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 Rád bych si stáhl ihned hotový obraz s nastaveným Wi-Fi hotspotem!
Pro přípravu instalátoru "pro všechny" bude potřeba nějaký čas a úsilí. Pokud (náhodou!) se to někomu opravdu bude zdát zajímavé a nezbytné – pište, něco vymyslíme.
Na tomto konci končím.
Přeji všem bezpečné surfování a maximální kontrolu nad infrastrukturou!
Zdroj: habr.com
