Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (nebo malinový router v modrém klobouku)

V článku Raspberry Pi + CentOS = Wi-Fi Hotspot (nebo maliny router v červeném klobouku) 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í
od 28. verze oficiálně podporuje Raspberry Pi 3B+ v 64-bitové verzi!

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (nebo malinový router v modrém klobouku)
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 CentOS 7.

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: parted, dd a mkfs).

Podobně jako u iterativní LFS-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:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Po jeho zapsání na microSD a před začátkem používání je třeba:

  1. 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
    

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

  3. Odstranit Průvodce první konfigurace:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. 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í:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (nebo malinový router v modrém klobouku)

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í:

  1. /boot/efi — EFI+FAT32, spouštěcí, 100MB;
  2. / (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í systemd-networkd:

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:
Fedora-Tiny-31-5.5.7-200.aarch64

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ý /etc/resolv.conf.

Studený start "malinky" trvá přibližně 40 sekund. Technické parametry systému po načtení:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (nebo malinový router v modrém klobouku)

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í článku.

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 dnsmasq, 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 se vzdali podpory síťového stacku čímkoli kromě NM, 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 github.

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ů (bridge), 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 udev, 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? fq_codel — 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 hostapd.

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)Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (nebo malinový router v modrém klobouku)
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éhoRaspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (nebo malinový router v modrém klobouku)

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). jádr 5.6).

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 DNF. 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

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster