В статията Разказах за начина, по който да превърнем "малинкaта" в безжична точка за достъп с операционна система CentOS. Сглобявайки моя домашен рутер по такъв чертеж, задоволих творческото си его и получих спокойствие за критично важен елемент от моя уютен инфраструктурен компонент. Въпреки това, чувството за незавършено решение и вътрешният перфекционизъм не ми даваха покой: "несъвършеният резултат от работата няма право на съществуване". Мисълта, че "идеалът може и трябва да бъде постигнат", не ме напускаше нито за миг.
И ето, един ден на един от тематичните форуми се натъкнах на обсъждане на разрядността на съществуващите операционни системи за "малинката" (aarch64 vs armhfp): какви 64-битови ОС всъщност могат да се инсталират и работят на Raspberry версия 3++?
Моята любима CentOS за архитектура ARM от "Userland" не бързаше да премине на последната версия на ядрото и да стане 64-битова. А хранилището EPEL, свързано кой знае от къде без цифров подпис, беше кошмар в моя неспокоен сън…
Като привърженик на RPM-базирани дистрибуции, с изненада открих, че в дискусиите за ОС за "малинката" напълно е забравена Fedora! И всичко това, като се има предвид, че нейният релиз

В тази статия ще разкажа за начина на инсталиране на Fedora (aarch64) на Raspberry Pi 3 Model B+ в в екстра минимално изпълнение. Накратко ще се спра на особеностите на настройката на Wi-Fi точка за достъп, установени в резултат на опитната експлуатация на моята предишна конфигурация на .
0. Какво е необходимо
Всичко това, което е изброено в предишната статия:
- Raspberry Pi 3 Model B+;
- microSD >= 4GB (в последствие може да "пренесете" системата на 2GB носител);
- Работна станция с Linux и microSD четец;
- Проводна свързаност на "малинката" и работната станция с Linux (в този случай не се нуждаят допълнителен монитор и клавиатура за настройка), достъп до интернет от двете устройства;
- Разширени умения в Linux (знайте и не се страхувайте: , и ).
Подобно на итеративната -сборка на собствен Linux, ще бъде използван дистрибуционен образ Fedora, а след това на неговата основа — ще бъде създадена минимална система (без "компилиране от изходен код").
1. Инсталиране на оригиналната дистрибуция
Координатите на raw-образа на системата в интернет:
След записването му на microSD и преди да започнете да използвате, трябва:
- Да разширите "корена" на файловата система (трети дял, 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 - Да деактивирате SELinux
echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config - Да премахнете Мастера за начален контрол:
find /mnt/3/etc/systemd/ -iname initial-setup.service -delete - Да разрешите достъпа по 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 и да се свържете с нея по мрежата.
Студеното стартиране отнема около една и половина минути. Техническите характеристики на системата след зареждане:

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 карта и два дяла на нея:
- /boot/efi — EFI+FAT32, загрузочен, 100MB;
- / (корен) — 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
След успешното зареждане — да подредите стартирането :
systemctl disable systemd-networkd
systemctl enable systemd-networkd
Доступът до суперпотребителя по ssh се настройва по аналогия с т.1.
След като всичко е направено старателно и без грешки, можете да преместите microSD в «малинката» и да започнете работа с 64-битната ОС в екстра минимално изпълнение.
4. Готова система
«Образът» на готовата система, създаден по горепосочената инструкция, може да бъде изтеглен от връзката:
Това ще бъде архив, съдържащ два файла: инсталационен скрипт и TGZ с файловете на ОС. Архивът трябва да бъде разопакован на работната станция с Linux, да се постави microSD (достатъчно е карта от 2GB) и да се стартира скриптът с параметър — името на устройството:
.\install /dev/mmcblk0
Внимавайте!
Без никакви предупреждения устройството ще бъде форматирано и на него — инсталирана операционната система.
След безгрешното изпълнение на скрипта, картата може да се премести в «малинката» и да се използва: ловете по dhcp, паролата е — «1».
Системата е освободена от всякакви ID и ключове, поради което всяка нова инсталация е уникална.
Повтарям отново, системата — е минимална! Затова не се плашете: DNF — наличен е, за да работи, ще трябва да «сочините» правилния .
Хладният старт на «малинката» отнема около 40 секунди. Техническите характеристики на системата след зареждане:

rpm -qa | wc -l
191
5. Wi-Fi
Нека се спра малко на особеностите при реализиране на Wi-Fi точка за достъп. За конкретика можете да се обърнете към моята предишна .
EPEL вече не е необходим — всички пакети се съдържат в официалните репозитории.
Може би трябваше да се откажа от , тъй като в Fedora, за разлика от CentOS, има достатъчно нов systemd-networkd, в който има нормални вградени DHCP/DNS сървъри. Но фактът, че в RHEL8 разработчиците , не внушава доверие в светлото бъдеще на проекта (неблагодарници). Накратко, не опитвах.
След това актуалните драйвери на вградения Wi-Fi адаптер не трябва да се «крадат» от дистрибуцията Raspbian, а да се изтеглят директно от .
Така изглеждат на моята «малинка» файловете с фърмуер на 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: 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 адаптер, в който е свързан интернет.
Забелязахте ли? — наистина полезна функция. Заедно с новото ядро на Linux правят истински чудеса в безжичния диапазон: силно изтегляне не ще доведе до внезапна деградация на скоростта за съседите. Дори работещото «по въздуха» домашно IP-TV при натоварен канал не «разгражда» и не «запъва» изобщо!
Претерпя малки промени сервизният файл на демона .
Сега изглежда така (на примера на вградения адаптер):
[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Мбит/сек)
И в заключении небольшой 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-битова версия е официално поддържана от значителен екип разработчици (от които не мога да дочакам ).
6.5 А работи ли Bluetooth? Как е с видео/звук/GPIO?
Не знам. Статията е за минимална инсталация на системата и нейното последващо използване като Wi-Fi рутер.
6.6 Защо всички статии за CentOS/Fedora/RedHat започват с деактивиране на SELinux?
Защото системата е минимална, няма дори защитна стена и утилити за нейното настройване. Който иска - може да инсталира допълнително всичко, което е необходимо.
6.7 Системата е неизползваема, не може да се промени паролата — няма passwd. Няма ping, няма нищо!
Има . Или този вариант на инсталация не е за вас – използвайте дистрибута от разработчиците.
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
