ProHoster > Блог > адміністрування > Raspberry Pi + Fedora (aarch64) = Wi-Fi Hotspot (або малиновий роутер у синій капелюсі)
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, підключений Бог звістку звідки без цифрового підпису, був кошмаром у мій неспокійний сон.
У цій статті я розповім про спосіб встановлення 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, а потім на його основі - створена мінімальна система (без «компіляції з вихідників»).
Ось тепер можна завантажити "малинку" з microSD та підключитися до неї по мережі.
Холодний старт займає близько півтори хвилини. ТТХ системи після завантаження:
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 у відповідні каталоги.
Доступ суперкористувача по 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 секунд. ТТХ системи після завантаження:
rpm -qa | wc -l
191
5. WiFi
Небагато зупинюся на особливостях реалізації Wi-Fi точки доступу. За конкретикою можна звернутися до моєї попередньої статті.
EPEL тепер не знадобиться – всі пакети містяться в офіційних репозиторіях.
Напевно, варто було б відмовитися від dnsmasq, оскільки Fedora, на відміну CentOS, — досить свіжий systemd-networkd, у якому — нормальні вбудовані DHCP/DNS сервери. Але факт того, що в RHEL8 розробники відмовилися від підтримки мережевого стека чимось крім NM, не вселяє впевненості у світлому майбутньому проекту (негідники). Коротше, не куштував.
Далі, актуальні драйвери вбудованого Wi-Fi адаптера можна не «крати» з дистрибутива Raspbian, а качати безпосередньо з GitHub.
Ось так виглядають на моїй "малинці" файли прошивки Broadcom (схематично):
Щодо кількості та назв інтерфейсів. Тепер я вже всім наполегливо рекомендую без особливої потреби не вдаватися до «послуг» програмних свічок (міст), які привносять значне навантаження в мережевий стек та пригнічують маршрутизацію. Якщо не планується кілька бездротових адаптерів, то слід використовувати виключно фізичні інтерфейси. У мене - два 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:
Трохи "фотошопу", зробленого з мого "Ericsson A1018s":
(підключення до Інтернету - 100Мбіт/сек)
І на завершення невеликий FAQ.
6 FAQ
6.1 Навіщо робити Wi-Fi роутер на Raspberry?
Можна було б відповісти просто, мовляв «цікаво спробувати і таке інше».
Але насправді, як на мене, тема досить серйозна. В епоху «кровопролитного» Інтернету купувати роутер у магазині та залишатися заручником його виробника — дуже похмура перспектива. Сидіти з CVE або вшитим бекдором вже багато хто розуміє, що не можна.
Зрозуміло, можна мігрувати на WRT-прошивки від ентузіастів. Довіри до них, напевно, більше, але якщо не хочеться залежати і від них, то тільки власний виріб. В ідеалі - повноцінний комп'ютер для можливості реалізації на ньому всього світу. Щодо роутингу, зрозуміло.
Тому вибір «малинки» — суто економічний хід: справжній комп'ютер і при цьому недорогий. Хоча, можливо, теж — зі своїми «двоянами» всередині.
6.2 Але ж Raspberry - "недороутер": повільний і з одним Ethernet портом!
Як домашній Wi-Fi роутер, "малинка" мене влаштовує більш ніж. Про швидкість «по повітрю» я вже розповів вище. А всього один Ethernet, ну так в аналогічному продукті від Apple приблизно так само!
А якщо серйозно, то звичайно хотілося б більше. І незважаючи на те, що в моєму господарстві всі пристрої підключені без дротів, іноді потрібне мідне з'єднання. Для таких випадків у мене припасений «мобільний хаб»:
девайс - типу такого
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.9 Хотілося б завантажити одразу готовий образ з настроєною точкою доступу Wi-Fi!
Для підготовки інсталятора «для всіх» знадобиться деяка кількість часу та зусиль. Якщо (раптом!) комусь це справді здасться цікавим та необхідним – пишіть, що-небудь придумаємо.
На цьому закінчу.
Бажаю всім безпечного серфінгу та максимального контролю над інфраструктурою!