Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (или Raspberry Blue Hat Router)

Статията Raspberry Pi + CentOS = Wi-Fi Hotspot (или Raspberry Red Hat Router) Говорих за това как да превърна малина в безжична точка за достъп с помощта на операционната система CentOS. Сглобявайки домашния си рутер според този чертеж, задоволявах творческото си его и получих заряд на спокойствие за критичен елемент от моята уютна инфраструктура. Усещането за непълнота на решението и вътрешният перфекционизъм обаче не дадоха почивка: „несъвършеният резултат от работата няма право на съществуване“. Мисълта, че „идеалът може и трябва да бъде постигнат“ не ме напускаше нито за минута.

И тогава един ден в един от тематичните форуми попаднах на дискусия за битовата дълбочина на съществуващите операционни системи за "малина" (aarch64 срещу armhfp): каква 64-битова ОС по принцип може да се побере и да печели пари на Raspberry версия 3++?

Любимата ми CentOS за ARM архитектура от "Userland" не бързаше да премине към най-новото ядро ​​и да се превърне в 64-битова. И хранилището на EPEL, свързано от Бог знае къде без цифров подпис, беше кошмар в моя неспокоен сън ...

Говорейки като адепт на дистрибуции, базирани на RPM, бях изненадан да открия, че в дискусиите на операционната система за "малина" се оказа напълно забравена Fedora! И това въпреки факта, че нейното освобождаване
тъй като версия 28 официално поддържа Raspberry Pi 3B+ в 64-битова версия!

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (или Raspberry Blue Hat Router)
В тази статия ще ви покажа как да инсталирате Fedora (aarch64) на Малина Pi 3 Модел B + в допълнителна минимална производителност. Накратко ще се спра на характеристиките на повишаване на Wi-Fi точка за достъп, идентифицирани в резултат на пробната експлоатация на предишната ми конфигурация на CentOS 7.

0. Какво ви трябва

Всичко е същото, както е изброено в предишната статия:

  • Raspberry Pi 3 Модел B+;
  • microSD >= 4GB (по-късно можете да "прехвърлите" системата на 2GB устройство);
  • Работна станция с Linux и четец на microSD карти;
  • Кабелна мрежова свързаност на "малина" и работна станция с Linux (в този случай няма да имате нужда от допълнителен монитор и клавиатура за конфигуриране), достъп до интернет от двете устройства;
  • Разширени умения в Linux (да знаете и да не се страхувате: разединен, dd и mkfs).

Като итерация Наблюдението на работната сила-изграждане на ваш собствен Linux, ще се използва дистрибуторският образ на Fedora и след това на негова основа ще бъде създадена минимална система (без „компилиране от източник“).

1. Инсталиране на оригиналната дистрибуция

Координати на необработеното изображение на системата в мрежата:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

След като го запишете на microSD и преди да го използвате, трябва да:

  1. Разширете "корена" на файловата система (3-ти дял, 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. Деактивирайте 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 и да се свържете с нея по мрежата.

Студеният старт отнема около минута и половина. TTX на системата след зареждане:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (или Raspberry Blue Hat Router)

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 с OS файлове. Архивът трябва да бъде разопакован на работна станция на Linux, поставете microSD карта (2GB карти са достатъчни) и стартирайте скрипта с параметъра име на устройството:

./install /dev/mmcblk0

Бъдете внимателни!

Без никакво предупреждение устройството ще бъде форматирано и операционната система ще бъде инсталирана на него.

След като скриптът е обработен без грешки, картата може да бъде пренаредена в "малина" и използвана: улавяне чрез dhcp, парола - "1".

Системата е изчистена от всякакви идентификатори и ключове, поради което всяка нова инсталация е уникална.

Отново системата минимален! Затова не се тревожете: DNF е наличен, за неговото изпълнение ще трябва да „композирате“ правилния / И т.н. / resolv.conf.

Студеният старт на "малина" отнема около 40 секунди. TTX на системата след зареждане:

Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (или Raspberry Blue Hat Router)

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

и тогава ще бъде възможно да се дават смислени имена, без да се рови udev, но само чрез 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 адаптери, събрани в "мост" LAN;
  • изнурен - Ethernet адаптер, към който е свързан интернет.

Забелязано? fq_codel - наистина страхотно нещо. Заедно с ново ядро ​​на Linux те правят истински чудеса в безжичния обхват: яростното "торент изтегляне" няма да доведе до внезапно влошаване на скоростта на съседите. Дори домашна IP-телевизия, работеща „по въздуха“ с зареден канал, не се „разпада“ и изобщо не „заеква“ от думата!

Сервизният файл на демон е претърпял малки промени 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":

(Интернет връзка - 100Mbps)Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (или Raspberry Blue Hat Router)
И накрая, малък ЧЗВ.

6. ЧЗВ

6.1 Защо да правите Wi-Fi рутер на Raspberry?

Човек може да отговори просто, казват те, „интересно е да опитам и всичко това“.

Но всъщност темата ми се струва доста сериозна. В ерата на „кървавия“ интернет, закупуването на рутер в магазин и оставането на заложник на неговия производител е много скучна перспектива. Много хора вече разбират, че е невъзможно да седнете с CVE или пришита задна врата.

Разбира се, можете да мигрирате към WRT-фърмуер от ентусиасти. Вероятно има повече доверие в тях, но ако не искате да зависи от тях, тогава само вашия собствен продукт. В идеалния случай, пълноправен компютър за възможността да се внедри всичко на него в света. По отношение на маршрутизирането, разбира се.

Следователно изборът на "малина" е чисто икономически ход: истински компютър и в същото време - евтин. Въпреки че, може би, също - с техните "двойници" вътре.

6.2 Но Raspberry е „подрутер“: бавен и с един Ethernet порт!

Като домашен Wi-Fi рутер "малина" ми подхожда повече от. За скоростта "по въздуха" вече казах по-горе. И само един Ethernet, добре, в подобен продукт от Apple, приблизително същото!

Но сериозно, разбира се, бих искал повече. И въпреки факта, че в моето домакинство всички устройства са свързани без проводници, понякога все още се изисква медна връзка. За такива случаи имам в магазина „мобилен хъб“:

устройство като товаRaspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (или Raspberry Blue Hat Router)

6.3 Ако това е рутер, тогава нищо не се казва за "настройка" на TCP / IP, защото това е важно!

В допълнение към настройката на мрежовия стек (tcp_fastopen, YeAH и т.н.), тази и предишната статия не обхващат други нюанси, по-специално процеса на подготовка на microSD за оптимална употреба (въпреки че инсталаторът се опитва да форматира картата с памет по хитър начин). Процесът на усъвършенстване е безкраен, просто трябва да спрете навреме.

6.4 Защо Fedora?

Защото ми харесва! Fedora - "мейнстрийм" - система от маниаци, за които всъщност е предназначена тази статия. Към момента на писане може би единствената операционна система за Raspberry в 64-битова версия се поддържа официално от значителен персонал от разработчици (от които нямам търпение ядрото 5.6).

6.5 Работи ли Bluetooth? Как е видео/звук/GPIO?

не знам Статията е за минималната инсталация на системата и последващото й използване като Wi-Fi рутер.

6.6 Защо всички статии за CentOS/Fedora/RedHat започват с деактивиране на SELinux?

Тъй като системата е минимална, тя дори няма защитна стена и помощни програми за настройката. Който има нужда - може да инсталира допълнително всичко необходимо.

6.7 Системата не може да се използва, паролата не може да се промени - няма passwd. Няма пинг, няма нищо!

Има 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 точка за достъп!

Подготовката на инсталатор "за всеки" ще отнеме известно време и усилия. Ако (внезапно!) На някого наистина изглежда интересно и необходимо - пишете, ще измислим нещо.

На това ще завърша.

Пожелавам на всички безопасно сърфиране и максимален контрол върху инфраструктурата!

Източник: www.habr.com

Добавяне на нов коментар