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 дистрибутивів, я з подивом виявив, що в обговореннях ОС для «малинки» абсолютно забутою виявилася Fedora! І це при тому, що її реліз
з 28-ої версії офіційно підтримує Raspberry Pi 3B+ у 64-бітному виконанні!

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

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. / 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 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 - Вбудований, ext - Зовнішній (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 Навіщо робити 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 А 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

Додати коментар або відгук