Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (або малінавы роўтэр у сінім капелюшы)

У артыкуле Raspberry Pi + CentOS = Wi-Fi Hotspot (або малінавы роўтэр у чырвоным капелюшы) я распавёў аб спосабе ператварэння "малінкі" у бесправадную кропку доступу пры дапамозе аперацыйнай сістэмы CentOS. Сабраўшы па такім чарцяжы мой хатні роўтэр, я задаволіў сваё творчае эга і атрымаў зарад спакою за крытычна важны элемент маёй утульнай інфраструктуры. Аднак адчуванне няскончанасці рашэння і ўнутраны перфекцыянізм не давалі спакою: "недасканалы вынік працы не мае права на існаванне". Думка аб тым, "што ідэал можа і павінен быць дасягнуты" не пакідала мяне ні на хвіліну.

І вось аднойчы на ​​адным з тэматычных форумаў я натыкнуўся на абмеркаванне разраднасці існых аперацыйных сістэм для "малінкі" (aarch64 vs armhfp): якія 64-бітныя АС у прынцыпе могуць улезці і зарабіць на Raspberry версіі 3++?

Мая каханая CentOS для архітэктуры ARM ад "Userland" не спяшалася пераходзіць на ядро ​​апошняй версіі і ператварацца ў 64-бітную. А рэпазітар EPEL, падключаны Бог вестку адкуль без лічбавага подпісу, з'яўляўся кашмарам у мой неспакойны сон…

Выступаючы адэптам RPM-based дыстрыбутываў, я са здзіўленнем выявіў, што ў абмеркаваннях АС для «малінкі» абсалютна забытай апынулася Мяккая фетравы капялюш! І гэта пры тым, што яе рэліз
з 28-ай версіі афіцыйна падтрымлівае Raspberry Pi 3B+ у 64-бітным выкананні!

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (або малінавы роўтэр у сінім капелюшы)
У гэтым артыкуле я раскажу пра спосаб усталёўкі Fedora (aarch64) на Маліна Pi 3 Мадэль B + в экстра мінімальным выкананні. Коратка спынюся на асаблівасцях узняцця Wi-Fi кропкі доступу, выяўленых у выніку доследнай эксплуатацыі маёй папярэдняй канфігурацыі на CentOS 7.

0. Што спатрэбіцца

Усё тое самае, што пералічана ў папярэднім артыкуле:

  • Raspberry Pi 3 Model B +;
  • microSD> = 4GB (у наступстве можна «перанесці» сістэму на 2GB назапашвальнік);
  • Рабочая станцыя з Linux і картрыдарам microSD;
  • Правадная сеткавая звязанасць "малінкі" і працоўнай станцыі з Linux (у гэтым выпадку не спатрэбяцца дадатковыя манітор і клавіятура для налады), доступ у Інтэрнэт з абодвух прылад;
  • Прасунуты скіл у Linux (ведаць і не баяцца: рассталіся, dd и mkfs).

Падобна ітэратыўнай LFS-зборцы ўласнага Linux, будзе выкарыстаны дыстрыбутыўны вобраз Fedora, а потым на яго аснове - створана мінімальная сістэма (без "кампіляцыі з зыходнікаў").

1. Устаноўка арыгінальнага дыстрыбутыва

Каардынаты raw-выявы сістэмы ў Сеткі:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Пасля яго запісу на microSD і перад пачаткам выкарыстання трэба:

  1. Пашырыць «корань» файлавай сістэмы (трэці раздзел, ext3)
    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. Адключыць SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Выдаліць Майстры першапачатковай налады:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Дазволіць доступ па 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
    

Вось зараз можна загрузіць «малінку» з microSD і падлучыцца да яе па сетцы.

Халодны старт займае каля паўтары хвіліны. ТТХ сістэмы пасля загрузкі:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (або малінавы роўтэр у сінім капелюшы)

rpm -qa | wc -l
444

2. Зборка мінімальнай сістэмы

Нажаль, мінімальны дыстрыбутыў ад распрацоўнікаў апыняецца далёка не самым сціплым у спажыванні рэсурсаў. Выява сістэмы можна зрабіць яшчэ менш.

Для гэтага на "малінцы" трэба выканаць скрыпт:

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

Пасля адпрацоўкі скрыпту ў бягучым каталогу будзе створаны падкаталог ($P) са змесцівам кораня новай мінімальнай рэдакцыі АС. Можна выключыць "малінку" і вярнуць microSD у працоўную станцыю Linux.

3. Устаноўка мінімальнай сістэмы

Усталёўка зводзіцца да капіявання файлаў мінімальнай "выявы" АС (атрыманага на папярэднім кроку) на адмыслова падрыхтаваную microSD у адпаведныя каталогі.

Дастаткова 2GB карткі і двух раздзелаў на ёй:

  1. / Спампаваць / EFI - EFI + FAT32, загрузны, 100MB;
  2. / (корань) - EXT4, усё пакінутае месца.

Пасля падрыхтоўкі microSD і капіяванні на яе файлаў, трэба:

  • паправіць загрузку АС;
  • уключыць сетку;
  • наладзіць доступ па ssh.

Папраўка загрузкі заключаецца ў замене UUID раздзелаў у файлах:

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

і параметра saved_entry= у апошнім файле

У файле:

microSD:/etc/fstab

можна знайсці старыя значэнні, а бягучыя (актуальныя) - у выснове каманды:

blkid | grep mmcblk | sort

Пасля замены варта таксама паправіць змесціва Fstab на microSD, каб кропкі мантавання адпавядалі новым UUID раздзелаў.

Сеткавай працаздольнасці пры першым уключэнні «малінкі» можна дамагчыся невялікім «мыліцам» - стварыць спасылку (схематычна):

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

і файл:

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

Пасля паспяховай загрузкі - давесці ў парадак запуск systemd-networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

Доступ суперкарыстачу па ssh наладжваецца аналагічна п.1.

Зрабіўшы ўсё акуратна і без памылак, можна перастаўляць microSD у "малінку" і пачынаць працаваць з 64-бітнай АС у экстра мінімальным выкананні.

4. Гатовая сістэма

"Вобраз" гатовай сістэмы, створаны па прыведзенай вышэй інструкцыі, можна спампаваць па спасылцы:
Fedora-Tiny-31-5.5.7-200.aarch64

Гэта будзе архіў, які змяшчае ў сабе два файла: скрыпт усталёўкі і TGZ з файламі АС. Архіў трэба распакаваць на працоўнай станцыі Linux, уставіць microSD (дастаткова 2GB карты) і запусціць скрыпт з параметрам - імем прылады:

./install /dev/mmcblk0

Будзьце ўважлівыя!

Без якіх-небудзь папярэджанняў прылада будзе адфарматаваная і на яе - усталявана аперацыйная сістэма.

Пасля беспамылковай адпрацоўкі скрыпту картку можна перастаўляць у "малінку" і карыстацца: лавіць па dhcp, пароль - "1".

Сістэма ачышчана ад усякіх ID і ключоў, з-за чаго кожная новая ўстаноўка - унікальная.

Паўтаруся яшчэ раз, сістэма мінімальная! Таму не палохайцеся: DNF – у наяўнасці, для яго працаздольнасці прыйдзецца «скласці» правільны /etc/resolv.conf.

Халодны старт "малінкі" займае каля 40 секунд. ТТХ сістэмы пасля загрузкі:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (або малінавы роўтэр у сінім капелюшы)

rpm -qa | wc -l
191

5. WiFi

Трохі спынюся на асаблівасцях рэалізацыі Wi-Fi кропкі доступу. Па канкрэтыку можна звярнуцца да маёй папярэдняй артыкуле.

EPEL цяпер не спатрэбіцца – усе пакеты ўтрымліваюцца ў афіцыйных рэпазітарах.

Напэўна, варта было б адмовіцца ад dnsmasq, так як у Fedora, у адрозненні ад CentOS, – досыць свежы systemd-networkd, у якім – нармальныя ўбудаваныя DHCP/DNS серверы. Але факт таго, што ў RHEL8 распрацоўшчыкі адмовіліся ад падтрымкі сеткавага стэка чым-небудзь акрамя NM, не ўсяляе ўпэўненасці ў светлай будучыні праекта (нягоднікі). Карацей, не спрабаваў.

Далей, актуальныя драйверы ўбудаванага Wi-Fi адаптара можна не "красці" з дыстрыбутыва Raspbian, а пампаваць напроста з GitHub.

Вось так выглядаюць на маёй "малінцы" файлы прашыўкі Broadcom (схематычна):

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

Без іх не атрымаецца 5GHz/AC.

Наконт колькасці і назваў інтэрфейсаў. Цяпер я ўжо ўсім настойліва рэкамендую без асаблівай патрэбы не звяртацца да «паслуг» праграмных свічак.мост), якія прыўносяць значную нагрузку ў сеткавы стэк і прыгнятаюць маршрутызацыю. Калі не плануецца некалькі бесправадных адаптараў, то выкарыстоўваць варта выключна фізічныя інтэрфейсы. У мяне – два Wi-Fi, таму толькі іх я аб'ядноўваю ў праграмны мост (хоць можна абыйсціся і без гэтага, інакш зірнуўшы на наладу hostapd).

А пераназываць інтэрфейсы я кахаю.

Для гэтага ў Fedora трэба стварыць сімвалічную спасылку:

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

і тады даваць асэнсаваныя назвы можна будзе, не калупаючыся ў удзеў, а толькі сродкамі systemd-networkd.

Вось так, напрыклад, завуцца сеткавыя адаптары ў маім роўтары:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

2: wan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000

3: lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000

4: int: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master lan state UP group default qlen 1000

5: ext: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master lan state UP group default qlen 1000

  • INT - убудаваны, доб - вонкавы (USB) Wi-Fi адаптары, сабраныя ў «брыдж» ЛВС;
  • Ван - Ethernet адаптар, у які падлучаны Інтэрнэт.

Заўважылі? fq_codel - сапраўды заліковая штука. Разам са свежым ядром Linux робяць сапраўдныя цуды ў бесправадным дыяпазоне: люты «торэнт-качак» не прывядзе да раптоўнай дэградацыі хуткасці ў суседзяў. Нават працавальнае "па паветры" хатняе IP-TV пры нагружаным канале не "распадаецца" і не "заікаецца" ад слова наогул!

Зведаў невялікія змены сэрвісны файл дэмана hostapd.

Выглядае зараз ён так (на прыкладзе ўбудаванага адаптара):

[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

І "чарадзейны" hostapd-int.conf для працы ў 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]

Трохі «фаташопа», зробленага з майго «Ericsson A1018s»:

(падлучэнне да Інтэрнэт - 100Мбіт/сек)Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (або малінавы роўтэр у сінім капелюшы)
І ў зняволенні невялікі FAQ.

6. FAQ

6.1/XNUMX Навошта рабіць Wi-Fi роўтэр на Raspberry?

Можна было б адказаць проста, маўляў "цікава паспрабаваць і ўсё такое".

Але насамрэч, як мне падаецца, тэма дастаткова сур'ёзная. У эпоху «кровапралітнага» Інтэрнэту купляць роўтэр у краме і заставацца закладнікам яго вытворцы - вельмі маркотны далягляд. Сядзець з CVE-або ўшытым бэкдорам ужо многія разумеюць, што нельга.

Зразумела, можна міграваць на WRT-прашыўкі ад энтузіястаў. Даверу да іх, мусіць, больш, але калі не жадаецца залежаць і ад іх, то толькі — уласны выраб. У ідэале - паўнавартасны кампутар для магчымасці рэалізацыі на ім усяго на свеце. У плане роўтынгу, зразумела.

Таму, выбар «малінкі» – чыста эканамічны ход: сапраўдны кампутар і пры гэтым – недарагі. Хоць, магчыма таксама – са сваімі «дваянамі» усярэдзіне.

6.2 Але ж Raspberry – «недараўтэр»: павольны і з адным Ethernet портам!

Як хатні Wi-Fi роўтар, "малінка" мяне задавальняе больш чым. Пра хуткасць "па паветры" я ўжо расказаў вышэй. А ўсяго адзін Ethernet, ну дык у аналагічным прадукце ад Apple прыкладна сапраўды таксама!

А калі сур'ёзна, то вядома хацелася б больш. І нягледзячы на ​​тое, што ў маёй гаспадарцы ўсе прылады падлучаныя без правадоў, часам усёткі патрабуецца меднае злучэнне. Для такіх выпадкаў у мяне прызапашаны «мабільны хаб»:

дэвайс - тыпу такогаRaspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (або малінавы роўтэр у сінім капелюшы)

6.3 Калі гэта роўтар, то нічога не сказанае аб "цюнінгу" TCP/IP, бо гэта важна!

Апроч налады сеткавага стэка (tcp_fastopen, YeAH і да т.п.), у гэтым і папярэднім артыкуле не раскрыты іншыя нюансы, у прыватнасці, працэс падрыхтоўкі microSD для аптымальнага выкарыстання (праўда ўсталёўнік спрабуе адфарматаваць карту памяці хітрым спосабам). Працэс удасканалення - бясконцы, трэба толькі своечасова спыніцца.

6.4 Чаму Fedora?

Бо мне падабаецца! Fedora – «мэйнстрым» – сістэма гікаў, для якіх, уласна, і прызначаны гэты артыкул. На момант напісання, мабыць, адзіная АС, якая для Raspberry у 64-бітным выкананні афіцыйна падтрымліваецца важкім штатам распрацоўнікаў (ад якіх ніяк не дачакаюся ядры 5.6).

6.5/XNUMX А Bluetooth працуе? Як там відэа/гук/GPIO?

Не ведаю. Артыкул – пра мінімальную ўстаноўку сістэмы і яе наступнае выкарыстанне ў якасці Wi-Fi роўтара.

6.6 Чаму ўсе артыкулы пра CentOS/Fedora/RedHat пачынаюцца з адключэння SELinux?

Таму што сістэма мінімальная, у ёй няма нават файрвола і ўтыліт па яго наладзе. Каму спатрэбіцца - могуць усталяваць дадаткова ўсё што неабходна.

6.7 Сістэмай немагчыма карыстацца, нельга змяніць пароль - не passwd. Няма ping-а, няма нічога!

Ёсць DNF. Ці гэты варыянт усталёўкі не для вас – скарыстайцеся дыстрыбутывам ад распрацоўнікаў.

6.8 А дзе ж SWAP? Жыць без яго не магу!

Праўда? Ну добра:

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 Хацелася б спампаваць адразу гатовы вобраз з настроенай кропкай доступу Wi-Fi!

Для падрыхтоўкі ўсталёўніка «для ўсіх» запатрабуецца некаторая колькасць часу і намаганняў. Калі (раптам!) камусьці гэта сапраўды здасца цікавым і неабходным - пішыце, што-небудзь прыдумаем.

На гэтым - скончу.

Жадаю ўсім бяспечнага серфінгу і максімальнага кантролю над інфраструктурай!

Крыніца: habr.com

Дадаць каментар