Raspberry Pi + Fedora (aarch64) = Wi-Fi гореща точка (или малинов рутер в синя шапка)

В статията Raspberry Pi + CentOS = Wi-Fi гореща точка (или малинов рутер с червена шапка) Разказах за начина, по който да превърнем "малинкaта" в безжична точка за достъп с операционна система CentOS. Сглобявайки моя домашен рутер по такъв чертеж, задоволих творческото си его и получих спокойствие за критично важен елемент от моя уютен инфраструктурен компонент. Въпреки това, чувството за незавършено решение и вътрешният перфекционизъм не ми даваха покой: "несъвършеният резултат от работата няма право на съществуване". Мисълта, че "идеалът може и трябва да бъде постигнат", не ме напускаше нито за миг.

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

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

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

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

0. Какво е необходимо

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

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

Подобно на итеративната LFS-сборка на собствен Linux, ще бъде използван дистрибуционен образ Fedora, а след това на неговата основа — ще бъде създадена минимална система (без "компилиране от изходен код").

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

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

След записването му на microSD и преди да започнете да използвате, трябва:

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

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

Raspberry Pi + Fedora (aarch64) = Wi-Fi гореща точка (или малинов рутер в синя шапка)

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. /boot/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 гореща точка (или малинов рутер в синя шапка)

rpm -qa | wc -l
191

5. Wi-Fi

Нека се спра малко на особеностите при реализиране на 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:  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 — вграден, ext — външен (USB) Wi-Fi адаптер, събран в «бридж» lan;
  • wan — 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 гореща точка (или малинов рутер в синя шапка)
И в заключении небольшой FAQ.

6. FAQ

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

Можеше да се отговори просто с "интересно е да пробвам и толкова".

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

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

Следователно, изборът на "малинка" е чисто икономически ход: истински компютър и в същото време — евтин. Макар че, вероятно и на свой ред — със своите "двояни" вътре.

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

Като домашен Wi-Fi рутер, "малинка" ме удовлетворява повече от всичко. Скоростта "по въздуха" вече я споделих по-горе. А само един Ethernet, така в аналогичния продукт от Apple е примерно точно така!

Ако трябва да сме сериозни, разбира се, бих искал повече. И независимо от факта, че всичките ми устройства са свързани безжично, понякога все пак се изисква медно свързване. За такива случаи имам запазен "мобилен хъб":

устройство — подобно на товаRaspberry Pi + Fedora (aarch64) = Wi-Fi гореща точка (или малинов рутер в синя шапка)

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. Няма 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster