Raspberry Pi + Fedora (aarch64) = punto de acceso Wi-Fi (ou enrutador de framboesa cun sombreiro azul)

O artigo Raspberry Pi + CentOS = Wi-Fi Hotspot (ou enrutador de framboesa cun sombreiro vermello) Falei sobre unha forma de converter unha Raspberry nun punto de acceso sen fíos usando o sistema operativo CentOS. Ao montar o meu enrutador doméstico segundo este debuxo, satisfei o meu ego creativo e recibín un impulso de tranquilidade para un elemento crítico da miña acolledora infraestrutura. Porén, a sensación de incompletitude da solución e o perfeccionismo interno perseguíame: "un resultado imperfecto do traballo non ten dereito a existir". O pensamento de que “o ideal pódese e debe acadar” non me deixou nin un minuto.

E entón un día, nun dos foros temáticos, atopeime cunha discusión sobre a profundidade de bits dos sistemas operativos existentes para Raspberry (aarch64 vs armhfp): que SO de 64 bits pode, en principio, encaixar e funcionar na versión 3 de Raspberry. ++?

O meu querido CentOS para a arquitectura ARM de "Userland" non tiña présa por cambiar á última versión do núcleo e converterse en 64 bits. E o repositorio EPEL, conectado dende Deus sabe onde sen sinatura dixital, foi un pesadelo no meu sono inquieto...

Falando como adepto das distribucións baseadas en RPM, sorprendeume descubrir que o SO para Raspberry estaba completamente esquecido nas discusións. Fedora! E iso a pesar de que o seu lanzamento
a partir da versión 28, admite oficialmente Raspberry Pi 3B+ na versión de 64 bits.

Raspberry Pi + Fedora (aarch64) = punto de acceso Wi-Fi (ou enrutador de framboesa cun sombreiro azul)
Neste artigo falarei sobre o método de instalación Fedora (aarch64) en Raspberry Pi 3 Modelo B + в rendemento mínimo extra. Deterareime brevemente nas funcións de aumentar un punto de acceso Wi-Fi, identificadas como resultado da operación de proba da miña configuración anterior en CentOS 7.

0. O que necesitarás

Todo é o mesmo que o enumerado no artigo anterior:

  • Raspberry Pi 3 Modelo B+;
  • microSD >= 4 GB (máis tarde podes "transferir" o sistema a unha unidade de 2 GB);
  • Estación de traballo con Linux e lector de tarxetas microSD;
  • Conectividade de rede por cable entre a Raspberry e unha estación de traballo Linux (neste caso, non será necesario ningún monitor e teclado adicional para a configuración), acceso a Internet desde ambos os dispositivos;
  • Habilidade avanzada en Linux (para saber e non ter medo: separouse, dd и mkfs).

Similar ao iterativo LFS-construíndo o teu propio Linux, empregarase a imaxe de distribución de Fedora e, en base a ela, crearase un sistema mínimo (sen "compilar desde a fonte").

1. Instalación da distribución orixinal

Coordenadas da imaxe bruta do sistema en Internet:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Despois de gravalo en microSD e antes de usalo, cómpre:

  1. Expande a "raíz" do sistema de ficheiros (3ª partición, 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. Desactivar SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Elimina o asistente de configuración inicial:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Permitir o acceso a través de 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
    

Agora podes descargar a "framboesa" da microSD e conectarte a ela a través da rede.

Un arranque en frío leva aproximadamente un minuto e medio. TTX do sistema despois da carga:

Raspberry Pi + Fedora (aarch64) = punto de acceso Wi-Fi (ou enrutador de framboesa cun sombreiro azul)

rpm -qa | wc -l
444

2. Montaxe dun sistema mínimo

Desafortunadamente, a "distribución mínima" dos desenvolvedores resulta estar lonxe de ser a máis modesta no consumo de recursos. A imaxe do sistema pódese facer aínda máis pequena.

Para iso, cómpre executar o script en Malinka:

#!/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

Despois de executar o script, crearase un subdirectorio no directorio actual ($P) co contido da raíz da nova edición mínima do SO. Podes apagar o Raspberry e devolver a microSD á estación de traballo Linux.

3. Instalación dun sistema mínimo

A instalación redúcese a copiar os ficheiros mínimos de "imaxe" do SO (obtidos no paso anterior) nunha microSD especialmente preparada nos directorios axeitados.

Unha tarxeta de 2 GB e dúas particións nel son suficientes:

  1. / boot / efi - EFI+FAT32, arranque, 100 MB;
  2. / (raíz) - EXT4, todo o espazo restante.

Despois de preparar a microSD e copiar ficheiros nela, cómpre:

  • corrixir o arranque do sistema operativo;
  • conectar a rede;
  • configurar o acceso a través de ssh.

A corrección de arranque consiste en substituír o UUID das seccións dos ficheiros:

microSD:/boot/efi/EFI/fedora/grub.cfg
microSD:/boot/efi/EFI/fedora/grubenv

e parámetro entrada_gardada= no último ficheiro

No arquivo:

microSD:/etc/fstab

podes atopar os valores antigos e os valores actuais (actualizados) na saída do comando:

blkid | grep mmcblk | sort

Despois da substitución, tamén debes corrixir o contido fstab en microSD para que os puntos de montaxe correspondan aos novos UUID de partición.

A funcionalidade de rede cando acende o Raspberry por primeira vez pódese conseguir cunha pequena "muleta": cree unha ligazón (esquemáticamente):

ln -s /usr/lib/systemd/system/systemd-networkd.service 
  microSD:/etc/systemd/system/multi-user.target.wants

e arquivo:

mkdir -p microSD:/etc/systemd/network
cat > microSD:/etc/systemd/network/dhcp.network << EOF
[Match]
Name=*
[Network]
DHCP=ipv4
EOF

Despois dunha descarga exitosa, ordena o lanzamento systemd-networkd:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

O acceso de superusuario a través de ssh está configurado de forma similar ao paso 1.

Despois de facer todo con coidado e sen erros, pode mover a microSD á "framboesa" e comezar a traballar cun sistema operativo de 64 bits nunha versión mínima adicional.

4. Sistema listo

A "imaxe" do sistema acabado, creada segundo as instrucións anteriores, pódese descargar na ligazón:
Fedora-Tiny-31-5.5.7-200.aarch64

Este será un arquivo que contén dous ficheiros: o script de instalación e TGZ con ficheiros do sistema operativo. O arquivo debe ser desempaquetado nunha estación de traballo Linux, inserir unha microSD (unha tarxeta de 2 GB é suficiente) e executar o script cun parámetro: o nome do dispositivo:

./install /dev/mmcblk0

Teña coidado!

Sen ningún aviso, o dispositivo formatearase e instalarase o sistema operativo nel.

Despois da execución sen erros do script, a tarxeta pódese reorganizar na "framboesa" e usala: catch via dhcp, contrasinal - "1".

O sistema está borrado de todos os ID e claves, polo que cada nova instalación é única.

Repito unha vez máis, o sistema - mínimo! Polo tanto, non te alarmes: DNF está dispoñible, para que funcione terás que "inventar" o correcto /etc/resolv.conf.

O arranque en frío da Raspberry leva uns 40 segundos. TTX do sistema despois da carga:

Raspberry Pi + Fedora (aarch64) = punto de acceso Wi-Fi (ou enrutador de framboesa cun sombreiro azul)

rpm -qa | wc -l
191

5. Wifi

Deterareime un pouco nas funcións de implementación dun punto de acceso Wi-Fi. Para máis detalles, podes consultar o meu anterior Artigo.

EPEL xa non é necesario: todos os paquetes están contidos nos repositorios oficiais.

Probablemente pagaría a pena renunciar dnsmasq, xa que Fedora, a diferenza de CentOS, ten un systemd-networkd bastante recente, que ten servidores DHCP/DNS normais incorporados. Pero o feito é que nos desenvolvedores RHEL8 negouse a admitir a pila de rede con outra cousa que non sexa NM, non inspira confianza no brillante futuro do proxecto (canallóns). En resumo, non o probei.

Ademais, os controladores actuais para o adaptador Wi-Fi integrado non se poden "roubar" da distribución Raspbian, senón que se poden descargar directamente desde GitHub.

Este é o aspecto dos ficheiros de firmware de Broadcom no meu Raspberry (esquemáticamente):

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

Sen eles non obterás 5 GHz/AC.

En canto ao número e nomes das interfaces. Agora recoméndolles encarecidamente a todos que non recorran aos "servizos" dos interruptores de software a menos que sexa absolutamente necesario (ponte), que introducen cargas significativas na pila de rede e reducen o enrutamento. Se non pensas ter varios adaptadores sen fíos, deberías usar só interfaces físicas. Teño dúas wifi, polo que só as combino nunha ponte de software (aínda que podes prescindir diso mirando a configuración de hostapd de forma diferente).

E encántame cambiar o nome das interfaces.

Para facelo en Fedora cómpre crear unha ligazón simbólica:

/etc/systemd/network/99-default.link -> /dev/null

e entón será posible dar nomes significativos sen andar udev, pero só usando systemd-networkd.

Por exemplo, así se chaman os adaptadores de rede do meu enrutador:

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 - incorporado, ext - adaptadores Wi-Fi externos (USB) ensamblados nunha "ponte" lan;
  • wan — Adaptador Ethernet ao que está conectada a Internet.

Notaches? código_fq - unha cousa moi chula. Xunto cun novo núcleo de Linux, fan verdadeiros milagres na gama sen fíos: unha "descarga de torrentes" feroz non levará a unha súbita degradación da velocidade entre os veciños. Mesmo un IP-TV doméstico que funciona "por aire" cunha canle cargada non "se rompe" e non "tartamudea" en absoluto.

O ficheiro de servizo daemon sufriu pequenos cambios hostapd.

Agora ten o seguinte aspecto (usando o exemplo dun adaptador incorporado):

[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

E o "máxico" hostapd-int.conf para traballar en 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]

Un pequeno photoshop feito co meu Ericsson A1018s:

(Conexión a Internet - 100 Mbit/s)Raspberry Pi + Fedora (aarch64) = punto de acceso Wi-Fi (ou enrutador de framboesa cun sombreiro azul)
E por último, unha pequena preguntas frecuentes.

6. FAQ

6.1 Por que facer un enrutador Wi-Fi en Raspberry?

Poderíase responder simplemente, como "é interesante probar e todo iso".

Pero, de feito, paréceme que o tema é bastante serio. Na era da Internet "sanguenta", mercar un enrutador nunha tenda e permanecer como refén do seu fabricante é unha perspectiva moi triste. Moitas persoas xa entenden que non é posible sentarse cun CVE ou unha porta traseira integrada.

Por suposto, podes migrar ao firmware WRT dos entusiastas. Probablemente haxa máis confianza neles, pero se non queres depender deles, usa o teu propio produto. O ideal é un ordenador completo para que todo o mundo se poida implementar nel. En canto ao enrutamento, claro.

Polo tanto, escoller unha "framboesa" é un movemento puramente económico: un ordenador real e, ao mesmo tempo, barato. Aínda que, quizais tamén - cos seus "dobres" dentro.

6.2 Pero Raspberry é un "router baixo": lento e cun porto Ethernet!

Como enrutador wifi doméstico, o Raspberry é máis que satisfactorio para min. Xa falei da velocidade do aire arriba. E só hai unha Ethernet, ben, nun produto similar de Apple é case o mesmo!

Pero en serio, claro que me gustaría máis. E a pesar de que na miña casa todos os dispositivos están conectados sen fíos, ás veces aínda se require unha conexión de cobre. Para tales casos, teño un "concentrador móbil" en stock:

dispositivo - algo asíRaspberry Pi + Fedora (aarch64) = punto de acceso Wi-Fi (ou enrutador de framboesa cun sombreiro azul)

6.3 Se este é un enrutador, non se di nada sobre "axustar" TCP/IP, porque isto é importante.

Ademais de configurar a pila de rede (tcp_fastopen, YeAH, etc.), este e o artigo anterior non abarcan outros matices, en particular, o proceso de preparación da microSD para un uso óptimo (aínda que o instalador tenta formatear a tarxeta de memoria en un xeito complicado). O proceso de mellora é infinito, só tes que parar a tempo.

6.4 Por que Fedora?

Porque me gusta! Fedora é un sistema "mainstream" para frikis, para os que este artigo está realmente destinado. No momento de escribir este artigo, quizais o único sistema operativo que para Raspberry en versión de 64 bits estea admitido oficialmente por un importante equipo de desenvolvedores (dos que non podo esperar núcleo 5.6).

6.5 Funciona o Bluetooth? Como está o vídeo/son/GPIO?

Non sei. O artigo trata sobre a instalación mínima do sistema e o seu posterior uso como enrutador Wi-Fi.

6.6 Por que todos os artigos sobre CentOS/Fedora/RedHat comezan coa desactivación de SELinux?

Debido a que o sistema é mínimo, nin sequera ten un firewall ou utilidades para configuralo. Calquera persoa que o necesite pode instalar adicionalmente todo o que necesite.

6.7 Non se pode usar o sistema, non se pode cambiar o contrasinal, sen contrasinal. Sen ping, sen nada!

Ten DNF. Ou esta opción de instalación non é para ti: usa o kit de distribución dos desenvolvedores.

6.8 Onde está SWAP? Non podo vivir sen el!

É verdade? Vale entón:

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 Gustaríame descargar inmediatamente unha imaxe preparada cun punto de acceso Wi-Fi configurado.

Preparar un instalador "para todos" requirirá tempo e esforzo. Se (de súpeto!) alguén lle parece interesante e necesario isto, escríbenos e sairemos algo.

Rematarei con isto.

Desexo a todos navegando seguro e o máximo control sobre a infraestrutura!

Fonte: www.habr.com

Engadir un comentario