Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (ali malinov usmernik v modrem klobuku)

V članku Raspberry Pi + CentOS = Wi-Fi Hotspot (ali malinasti usmerjevalnik v rdeči kapici) Povedal sem o načinu, kako spremeniti "malinico" v brezžično dostopno točko s pomočjo operacijskega sistema CentOS. Tako sem izdelal svoj domači usmernik po tem načrtu in zadovoljil svoje ustvarjalno ego ter pridobil mir, saj sem zaščitil kritično pomemben element svoje prijetne infrastrukture. Vendar me je občutek nedokončanosti rešitve in notranji perfekcionizem nenehno motil: "nepopoln rezultat dela nima pravice do obstoja". Misel, da "ideal lahko in mora biti dosežen", me ni zapustila niti za trenutek.

Nekoč sem naletel na eni izmed tematskih forumov, kjer sem naletel na razpravo o bitnosti obstoječih operacijskih sistemov za "malinico" (aarch64 vs armhfp): kateri 64-bitni OS lahko sploh dela na Raspberry verziji 3++?

Moja najljubša CentOS za arhitekturo ARM od "Userland" se ni mudila, da bi prešla na jedro zadnje različice in postala 64-bitna. Repozitorij EPEL, povezan ne vem od kod brez digitalnega podpisa, je bil v mojem nemirnem spanju nočna mora...

Kot zagovornik RPM-podoben distribucij sem s presenečenjem ugotovil, da je v razpravah o OS za "malinico" popolnoma pozabljena Fedora! In to kljub temu, da njen izid
z 28. različico uradno podpira Raspberry Pi 3B+ v 64-bitni različici!

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (ali malinov usmernik v modrem klobuku)
V tem članku bom govoril o načinu namestitve Fedora (aarch64) na Raspberry Pi 3 Model B+ u ekstra minimalna različica. Kratko bom opisal posebnosti postavitve Wi-Fi dostopne točke, ki so se izkazale med izkušeno uporabo moje prejšnje konfiguracije na CentOS 7.

0. Kaj bo potrebno

Vse isto, kar je bilo navedeno v prejšnjem članku:

  • Raspberry Pi 3 Model B+;
  • microSD >= 4GB (kasneje lahko "premaknete" sistem na 2GB napravo);
  • Delovna postaja z Linuxom in bralnikom kartic microSD;
  • Žična mrežna povezanost "malinice" in delovne postaje z Linuxom (v tem primeru ne bosta potrebna dodatni monitor in tipkovnica za konfiguracijo), dostop do interneta na obeh napravah;
  • Napreden skill v Linuxu (vedeti in se ne bati: parted, dd in mkfs).

Podobno kot pri iterativni LFS-zgradnji lastnega Linuxa, se bo uporabil distribucijski medij Fedora, nato pa bo na njegovi osnovi ustvarjen minimalni sistem (brez "kompilacije iz izvornih kod").

1. Namestitev originalne distribucije

Koordinate raw-slike sistema u mreži:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Nakon što se snimi na microSD i pre nego što se počne koristiti, potrebno je:

  1. Proširiti „korenski“ sistem fajlova (3. particija, 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. Isključiti SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Ukloniti čarobnjaka za inicijalnu konfiguraciju:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Omogućiti pristup putem 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
    

Sada se može pokrenuti „malinka“ sa microSD i povezati sa njom putem mreže.

Hladno pokretanje traje oko minuta i po. Tehničke karakteristike sistema nakon pokretanja:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (ali malinov usmernik v modrem klobuku)

rpm -qa | wc -l
444

2. Izgradnja minimalnog sistema

Nažalost, „minimalna distribucija“ od strane programera ispostavlja se da nije toliko skromna po potrošnji resursa. Sistemsku sliku je moguće učiniti još manjom.

Za to je potrebno na „malinki“ pokrenuti skriptu:

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

Nakon izvršenja skripte u trenutnom direktorijumu biće kreiran poddirektorijum ($P) sa sadržajem korena nove minimalne verzije OS. Može se isključiti „malinka“ i vratiti microSD u radnu stanicu Linux.

3. Instalacija minimalnog sistema

Instalacija se svodi na kopiranje fajlova minimalnog „obraza“ OS (dobijenog na prethodnom koraku) na posebno pripremljenu microSD u odgovarajuće direktorijume.

Dovoljna je 2GB kartica i dva particiona na njoj:

  1. /boot/efi — EFI+FAT32, pokretački, 100MB;
  2. / (koren) — EXT4, sav preostali prostor.

Nakon pripreme microSD i kopiranja fajlova na nju, potrebno je:

  • popraviti pokretanje OS-a;
  • uključiti mrežu;
  • konfigurisati pristup putem ssh.

Popravka pokretanja se sastoji u zameni UUID particija u fajlovima:

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

i parametra saved_entry= u poslednjem fajlu

U fajlu:

microSD:/etc/fstab

mogu se naći stara podešavanja, a trenutni (aktuelni) — u izlazu komande:

blkid | grep mmcblk | sort

Nakon zamene, treba takođe ispraviti sadržaj fstab na microSD, kako bi se tačke montiranja slagale sa novim UUID particija.

Mrežna funkcionalnost prilikom prvog uključivanja „malinke“ može se postići malim „ličnim rešenjem“ — kreiranjem veze (šema):

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

i fajl:

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

Po uspešni namestitvi — uredite zagon systemd-networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

Dostop superuporabniku prek ssh se nastavi podobno kot v p.1.

Ko ste vse opravili natančno in brez napak, lahko premikate microSD v 'malinko' in začnete delati z 64-bitno OS v ultra minimalni izvedbi.

4. Končni sistem

»Slika« končnega sistema, ustvarjena po zgoraj navedeni navodilih, je na voljo za prenos na naslednji povezavi:
Fedora-Tiny-31-5.5.7-200.aarch64

To bo arhiv, ki vsebuje dva datoteka: namestitveni skript in TGZ z datotekami OS. Arhiv je treba razpakirati na delovni postaji Linux, vstaviti microSD (zadostuje kartica 2GB) in zagnati skript s parametrom — imenom naprave:

.\/install \/dev\/mmcblk0

Bodite previdni!

Brez kakršnih koli opozoril bo naprava formatirana in nanjo bo nameščen operacijski sistem.

Po breznapaknem delovanju skripta lahko kartico premikate v 'malinko' in jo uporabljate: dobitite po dhcp, geslo — '1'.

Sistem je očiščen vseh ID-jev in ključev, zaradi česar je vsaka nova namestitev – edinstvena.

Ponovno ponavljam, sistem — minimalen! Zato se ne prestrašite: DNF — je na voljo, za njegovo delovanje boste morali 'izumiti' pravilno /etc/resolv.conf.

Hladen zagon 'malinke' traja približno 40 sekund. Tehnični podatki sistema po zagonu:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (ali malinov usmernik v modrem klobuku)

rpm -qa | wc -l
191

5. Wi-Fi

Malce se bom ustavil pri značilnostih uresničitve Wi-Fi dostopovne točke. Po konkretnih informacijah se lahko obrnete na moje prejšnje članku.

EPEL zdaj ne bo potreben — vsi paketi so vsebovani v uradnih repozitorijih.

Morda bi bilo smiselno odstopiti od dnsmasq, saj je v Fedora, za razliko od CentOS, — dovolj svež systemd-networkd, v katerem so normalni vgrajeni DHCP/DNS strežniki. Ampak dejstvo, da so v RHEL8 razvijalci opustili podporo omrežnemu skladu za karkoli razen NM, ne vliva zaupanja v svetlo prihodnost projekta (razbojniki). Na kratko, nisem poskusil.

Nato, aktualni gonilniki vgrajenega Wi-Fi adapterja ni treba 'ukrasti' iz distribucije Raspbian, temveč se jih lahko neposredno naloži iz github.

Tako izgledajo na moji 'malinki' datoteke za prošnjo Broadcom (shema):

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

Brez njih ne bo delovalo 5GHz/AC.

Glede števila in imen vmesnikov. Sedaj že vsem odsvetujem, da brez posebne potrebe uporabljajo "storitve" programske stikala (bridge), ki občutno obremenijo omrežni sklad in upočasnijo usmerjanje. Če ni predvidenih več brezžičnih adapterjev, je treba uporabljati izključno fizične vmesnike. Imam dva Wi-Fi, zato jih le združujem v programski most (čeprav se da brez tega, če drugače pogledamo nastavitev hostapd).

Rada preimenujem vmesnike.

Za to v Fedori morate ustvariti simbolično povezavo:

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

in takrat boste lahko dali smiselna imena, ne da bi se ukvarjali z udev, ampak le z orodji systemd-networkd.

Tako se imenujejo omrežni adapterji na mojem usmerjevalniku:

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 — vgrajen, ext — zunanji (USB) Wi-Fi adapterji, združeni v "most" lan;
  • wan — Ethernet adapter, v katerega je priključen Internet.

Opazili ste? fq_codel — resnično odlična stvar. Skupaj s svežim jedrom Linux ustvarjajo prave čudeže v brezžičnem spektru: strasten "torrent-download" ne bo pripeljal do nenadne degradacije hitrosti pri sosedih. Tudi domače IP-TV, ki deluje "po zraku", pri obremenjenem kanalu ne "razpada" in se ne "zajeda" sploh!

Službeni datoteka demona hostapd.

sedaj izgleda tako (na primeru vgrajenega adapterja):

[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

In "čarobni" hostapd-int.conf za delovanje 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]

Malo «Photoshop»-a, napravljenog s mog «Ericsson A1018s»:

(povezivanje na Internet — 100Mbit/s)Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (ali malinov usmernik v modrem klobuku)
I na kraju mali FAQ.

6. FAQ

6.1 Zašto praviti Wi-Fi rutera na Raspberry?

Moglo bi se jednostavno odgovoriti da je to „zanimljivo probati i to je to“.

Ali zapravo, mislim da je tema prilično ozbiljna. U doba „krvavog“ Interneta kupovati ruter u prodavnici i ostati zarobljenik njegovog proizvođača — prilično dosadna perspektiva. Mnogi već shvataju da se ne može sedeti s CVE- ili ugrađenim bekdoorom.

Naravno, moguće je migrirati na WRT-firmware od entuzijasta. Veruje im se, verovatno, više, ali ako ne želite zavisiti ni od njih, onda preostaje samo — vlastiti uređaj. U idealnom slučaju – punopravni računar za mogućnost realizacije svega na svetu. Naravno, u pogledu rutiranja.

Zbog toga je izbor „malinke“ čist ekonomski potez: pravi računar, a pritom — jeftin. Iako, možda ima i svojih „dvojakosti“ unutra.

6.2 Ali zar Raspberry nije „nedoručnik“: spor i sa jednim Ethernet portom!

Kao kućni Wi-Fi ruter, „malinka“ me više nego zadovoljava. O brzini „na vazduhu“ već sam pričao gore. A jedan Ethernet, pa tako u sličnom proizvodu od Apple-a otprilike isto!

A ako budemo ozbiljni, naravno da bih voleo više. I pored toga što su sve moje uređaje povezane bežično, ponekad je potreban i žični spoj. Za takve slučaje imam pripremljen „mobilni hub“:

uređaj — tipa ovogaRaspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (ali malinov usmernik v modrem klobuku)

6.3 Ako je ovo ruter, onda ništa nije rečeno o „tuning-u“ TCP/IP, jer je to važno!

Poleg konfiguracije omrežnega sklada (tcp_fastopen, YeAH itd.), v tem in prejšnjem članku niso razkriti drugi vidiki, zlasti postopek priprave microSD za optimalno uporabo (res je, da poskusni inštalator poskuša formatirati kartico pomnilnika na zvit način). Postopek izboljševanja je neskončen, treba se je le pravočasno ustaviti.

6.4 Zakaj Fedora?

Ker mi je všeč! Fedora je "mainstream" – sistem geekov, za katere je ta članek pravzaprav namenjen. Ob trenutku pisanja je morda edina OS, ki se za Raspberry v 64-bitni različici uradno podpira z znatnim številom razvijalcev (od katerih jih ne morem dočakati. jedro 5.6).

6.5 Ali Bluetooth deluje? Kako je s video/zvokom/GPIO?

Ne vem. Članek govori o minimalni namestitvi sistema in njegovi poznejši uporabi kot Wi-Fi usmerjevalnika.

6.6 Zakaj vsi članki o CentOS/Fedora/RedHat začnejo z izklopom SELinuxa?

Ker je sistem minimalen, v njem ni niti požarnega zidu niti orodij za njegovo nastavitev. Kdor to potrebuje, lahko dodatno namesti vse, kar je potrebno.

6.7 Z sistemom se ne da uporabljati, ni mogoče spremeniti gesla — ni passwd. Ni pinga, ničesar!

Je DNF. Ali ta način namestitve ni zate – uporabi distribucijo razvijalcev.

6.8 Kje pa je SWAP? Brez njega ne morem živeti!

Res? No, dobro:

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 Rad bi takoj prenesel pripravljen sklop z nastavljenim dostopom do Wi-Fi!

Za pripravo inštalatorja "za vse" bo potrebnega nekaj časa in truda. Če se (morda!) zdi komurkoli to resnično zanimivo in potrebno – piši, nekaj bomo že iznašli.

Na tem – končujem.

Želim vsem varno surfanje in maksimalno kontrolo nad infrastrukturo!

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster