Raspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador Raspberry con sombrero azul)

El artículo Raspberry Pi + CentOS = Punto de acceso Wi-Fi (o enrutador Raspberry con sombrero rojo) Hablé sobre una forma de convertir una Raspberry en un punto de acceso inalámbrico utilizando el sistema operativo CentOS. Al ensamblar mi enrutador doméstico según este dibujo, satisfice mi ego creativo y recibí un impulso de tranquilidad para un elemento crítico de mi acogedora infraestructura. Sin embargo, me perseguía el sentimiento de incompletitud de la solución y el perfeccionismo interno: “un resultado imperfecto del trabajo no tiene derecho a existir”. La idea de que “el ideal puede y debe lograrse” no me abandonó ni un minuto.

Y luego, un día, en uno de los foros temáticos, me encontré con una discusión sobre la profundidad de bits de los sistemas operativos existentes para Raspberry (aarch64 vs armhfp): qué sistema operativo de 64 bits puede, en principio, adaptarse y funcionar en la versión 3 de Raspberry. ++?

Mi querido CentOS para la arquitectura ARM de "Userland" no tenía prisa por cambiar a la última versión del kernel y pasar a 64 bits. Y el repositorio EPEL, conectado desde Dios sabe dónde sin firma digital, fue una pesadilla en mi sueño inquieto...

Hablando como partidario de las distribuciones basadas en RPM, me sorprendió descubrir que el sistema operativo para Raspberry quedó completamente olvidado en las discusiones. Fedora! Y esto a pesar de que su lanzamiento
¡A partir de la versión 28 es oficialmente compatible con Raspberry Pi 3B+ en versión de 64 bits!

Raspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador Raspberry con sombrero azul)
En este artículo hablaré sobre el método de instalación. Fedora (aarch64) en Frambuesa Pi Modelo B + 3 в rendimiento extra mínimo. Me detendré brevemente en las características de aumentar un punto de acceso Wi-Fi, identificadas como resultado de la operación de prueba de mi configuración anterior en 7 CentOS.

0. Qué necesitarás

Todo es igual que lo enumerado en el artículo anterior:

  • Frambuesa Pi 3 Modelo B+;
  • microSD >= 4GB (luego podrá “transferir” el sistema a una unidad de 2GB);
  • Estación de trabajo con Linux y lector de tarjetas microSD;
  • Conectividad de red por cable entre Raspberry y una estación de trabajo Linux (en este caso, no se necesitarán monitor ni teclado adicionales para la configuración), acceso a Internet desde ambos dispositivos;
  • Habilidad avanzada en Linux (para saber y no tener miedo: separado, dd и mkfs).

Similar a iterativo LFS-construyendo su propio Linux, se utilizará la imagen de distribución de Fedora, y luego en base a ella se creará un sistema mínimo (sin “compilar desde el código fuente”).

1. Instalación de la distribución original

Coordenadas de la imagen en bruto del sistema en Internet:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

Después de grabarlo en microSD y antes de usarlo, es necesario:

  1. Expanda la "raíz" del sistema de archivos (tercera partición, 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. Deshabilitar SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

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

  4. Permitir acceso vía 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
    

Ahora puedes descargar "frambuesa" desde microSD y conectarte a través de la red.

Un arranque en frío dura aproximadamente un minuto y medio. TTX del sistema después de la carga:

Raspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador Raspberry con sombrero azul)

rpm -qa | wc -l
444

2. Montaje de un sistema mínimo

Desafortunadamente, la "distribución mínima" de los desarrolladores está lejos de ser la más modesta en términos de consumo de recursos. La imagen del sistema se puede hacer aún más pequeña.

Para hacer esto, necesitas ejecutar el 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

Después de ejecutar el script, se creará un subdirectorio en el directorio actual ($P) con el contenido de la raíz de la nueva edición mínima del sistema operativo. Puede apagar la Raspberry y devolver la microSD a la estación de trabajo Linux.

3. Instalación de un sistema mínimo.

La instalación se reduce a copiar los archivos mínimos de “imagen” del sistema operativo (obtenidos en el paso anterior) en una microSD especialmente preparada en los directorios apropiados.

Una tarjeta de 2 GB y dos particiones son suficientes:

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

Después de preparar la microSD y copiar archivos en ella, debe:

  • arreglar el arranque del sistema operativo;
  • enciende la red;
  • configurar el acceso vía ssh.

La solución de arranque consiste en reemplazar el UUID de las secciones de los archivos:

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

y parámetro entrada_guardada= en el último archivo

En archivo:

microSD:/etc/fstab

Puede encontrar los valores antiguos y los valores actuales (actualizados) en la salida del comando:

blkid | grep mmcblk | sort

Después del reemplazo, también debe corregir el contenido. fstab en microSD para que los puntos de montaje correspondan a los UUID de la nueva partición.

La funcionalidad de red cuando enciende la Raspberry por primera vez se puede lograr con una pequeña "muleta": cree un enlace (esquemáticamente):

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

y archivo:

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

Después de una descarga exitosa, ordene el inicio systemd-red:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

El acceso de superusuario a través de ssh se configura de manera similar al paso 1.

Habiendo hecho todo con cuidado y sin errores, puede mover la microSD a la "frambuesa" y comenzar a trabajar con un sistema operativo de 64 bits en una versión extra mínima.

4. Sistema listo

La "imagen" del sistema terminado, creada según las instrucciones anteriores, se puede descargar desde el enlace:
Fedora-Tiny-31-5.5.7-200.aarch64

Este será un archivo que contiene dos archivos: el script de instalación y TGZ con los archivos del sistema operativo. Es necesario descomprimir el archivo en una estación de trabajo Linux, insertar una microSD (una tarjeta de 2 GB es suficiente) y ejecutar el script con un parámetro: el nombre del dispositivo:

./install /dev/mmcblk0

¡Ten cuidado!

Sin previo aviso, el dispositivo se formateará y se instalará el sistema operativo.

Después de ejecutar el script sin errores, la tarjeta se puede reorganizar en "frambuesa" y usar: captura a través de dhcp, contraseña - "1".

El sistema se limpia de todas las identificaciones y claves, por lo que cada nueva instalación es única.

Repito una vez más, el sistema - mínimo! Por tanto, no te alarmes: DNF está disponible, para que funcione tendrás que “inventar” el correcto / Etc / resolv.conf.

El arranque en frío de la Raspberry tarda unos 40 segundos. TTX del sistema después de la carga:

Raspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador Raspberry con sombrero azul)

rpm -qa | wc -l
191

5. Wifi

Me detendré un poco en las características de implementar un punto de acceso Wi-Fi. Para obtener más detalles, puede consultar mi anterior. статье.

EPEL ya no es necesario: todos los paquetes están contenidos en los repositorios oficiales.

Probablemente valdría la pena renunciar dnsmasq, ya que Fedora, a diferencia de CentOS, tiene un systemd-networkd bastante reciente, que tiene servidores DHCP/DNS integrados normales. Pero el caso es que en RHEL8 los desarrolladores se negó a soportar la pila de red con algo que no sea NM, no inspira confianza en el brillante futuro del proyecto (sinvergüenzas). En resumen, no lo he probado.

Además, los controladores actuales para el adaptador Wi-Fi integrado no se pueden "robar" de la distribución de Raspbian, sino que se pueden descargar directamente desde gitHub.

Así es como se ven los archivos de firmware de Broadcom en mi 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

Sin ellos no obtendrás 5GHz/AC.

Respecto al número y nombres de interfaces. Ahora recomiendo encarecidamente a todos que no recurran a los "servicios" de conmutadores de software a menos que sea absolutamente necesario (puente), que introducen una carga significativa en la pila de la red y deprimen el enrutamiento. Si no planea tener varios adaptadores inalámbricos, entonces debe usar solo interfaces físicas. Tengo dos Wi-Fi, así que solo los combino en un puente de software (aunque puedes prescindir de esto mirando la configuración de hostapd de manera diferente).

Y me encanta cambiar el nombre de las interfaces.

Para hacer esto en Fedora necesitas crear un enlace simbólico:

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

y entonces será posible dar nombres significativos sin hurgar udev, pero sólo usando systemd-networkd.

Por ejemplo, así se llaman los adaptadores de red de mi 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 en un "puente" lan;
  • pálido — Adaptador Ethernet al que se conecta Internet.

¿Te diste cuenta? fq_codel - algo realmente genial. Junto con un nuevo kernel de Linux, hacen verdaderos milagros en el alcance inalámbrico: una intensa "descarga de torrent" no provocará una degradación repentina de la velocidad entre los vecinos. ¡Incluso un IP-TV doméstico que funciona "por aire" con un canal cargado no se "rompe" ni "tartamudea" en absoluto!

El archivo del servicio del demonio ha sufrido cambios menores. hostapd.

Ahora se ve así (usando el ejemplo de un adaptador integrado):

[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

Y el hostapd-int.conf “mágico” para trabajar 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 pequeño photoshop hecho con mi Ericsson A1018s:

(Conexión a Internet - 100 Mbit/seg)Raspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador Raspberry con sombrero azul)
Y por último, unas pequeñas preguntas frecuentes.

6. Preguntas más frecuentes

6.1 ¿Por qué crear un enrutador Wi-Fi en Raspberry?

Se podría responder simplemente, como "es interesante intentarlo y todo eso".

Pero, de hecho, me parece que el tema es bastante serio. En la era de la "maldita" Internet, comprar un enrutador en una tienda y permanecer como rehén de su fabricante es una perspectiva muy sombría. Mucha gente ya comprende que no es posible sentarse con un CVE o una puerta trasera incorporada.

Por supuesto, los entusiastas pueden migrar al firmware WRT. Probablemente haya más confianza en ellos, pero si no quiere depender de ellos, utilice su propio producto. Idealmente, una computadora completa para que se pueda implementar todo en el mundo. En términos de enrutamiento, por supuesto.

Por tanto, elegir una “frambuesa” es una decisión puramente económica: un ordenador real y al mismo tiempo económico. Aunque, quizás también, con sus “dobles” en el interior.

6.2 Pero Raspberry es un “enrutador bajo”: ¡lento y con un puerto Ethernet!

Como enrutador Wi-Fi doméstico, la Raspberry me resulta más que satisfactoria. Ya he hablado arriba de la velocidad del aire. Y solo hay una Ethernet, bueno, ¡en un producto similar de Apple es más o menos lo mismo!

Pero en serio, claro que me gustaría más. Y a pesar de que en mi casa todos los dispositivos están conectados de forma inalámbrica, a veces sigue siendo necesaria una conexión de cobre. Para tales casos, tengo en stock un "hub móvil":

dispositivo - algo como estoRaspberry Pi + Fedora (aarch64) = Punto de acceso Wi-Fi (o enrutador Raspberry con sombrero azul)

6.3 Si se trata de un enrutador, entonces no se dice nada sobre "ajustar" TCP/IP, ¡porque esto es importante!

Además de configurar la pila de red (tcp_fastopen, YeAH, etc.), este y el artículo anterior no cubren otros matices, en particular, el proceso de preparación de microSD para un uso óptimo (aunque el instalador intenta formatear la tarjeta de memoria en una manera complicada). El proceso de mejora es interminable, sólo hay que detenerse en el tiempo.

6.4 ¿Por qué Fedora?

¡Porque me gusta! Fedora es un sistema "convencional" para geeks, a quienes en realidad está destinado este artículo. En el momento de escribir este artículo, quizás el único sistema operativo para Raspberry en versión de 64 bits sea oficialmente compatible con un importante equipo de desarrolladores (de quienes no puedo esperar). núcleo 5.6).

6.5 ¿Funciona Bluetooth? ¿Cómo está el vídeo/sonido/GPIO?

No lo sé. El artículo trata sobre la instalación mínima del sistema y su posterior uso como enrutador Wi-Fi.

6.6 ¿Por qué todos los artículos sobre CentOS/Fedora/RedHat comienzan con la desactivación de SELinux?

Debido a que el sistema es mínimo, ni siquiera tiene firewall ni utilidades para configurarlo. Cualquiera que lo necesite puede instalar adicionalmente todo lo que necesite.

6.7 El sistema no se puede utilizar, la contraseña no se puede cambiar, no hay contraseña. ¡Sin ping, sin nada!

Hay DNF. O esta opción de instalación no es para usted: utilice la distribución de los desarrolladores.

6.8 ¿Dónde está SWAP? ¡No puedo vivir sin él!

¿Es verdad? OK entonces:

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 ¡Me gustaría descargar inmediatamente una imagen lista para usar con un punto de acceso Wi-Fi configurado!

Preparar un instalador “para todos” requerirá algo de tiempo y esfuerzo. Si (¡de repente!) alguien realmente encuentra esto interesante y necesario, escríbanos y se nos ocurrirá algo.

Terminaré con esto.

¡Les deseo a todos una navegación segura y el máximo control sobre la infraestructura!

Fuente: habr.com

Añadir un comentario