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

En el artículo Raspberry Pi + CentOS = Punto de acceso Wi-Fi (o un enrutador de frambuesa en un sombrero rojo) hablé sobre cómo convertir una frambuesa en un punto de acceso inalámbrico utilizando el sistema operativo CentOS. Después de haber recogido el enrutador de mi casa de un dibujo así, satisficí mi ego creativo y recibí un cargo de calma por un elemento crítico de mi acogedora infraestructura. Sin embargo, el sentimiento de decisión incompleta y perfeccionismo interno no dio descanso: "un resultado imperfecto del trabajo no tiene derecho a existir". La idea de que "ese ideal puede y debe lograrse" no me dejó 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 "Malinka" (aarch64 vs armhfp): ¿qué sistemas operativos de 64 bits pueden encajar y ganar dinero con Raspberry versión 3 ++?

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

Hablando como adherente de las distribuciones basadas en RPM, me sorprendió descubrir que Fedora resultó estar absolutamente olvidada en las discusiones sobre el sistema operativo para "frambuesa" . ¡Y esto a pesar del hecho de que su lanzamiento
de la versión 28 oficialmente es compatible con Raspberry Pi 3B + en la versión de 64 bits!

Fedora aarch64

En este artículo, hablaré sobre cómo instalar Fedora (aarch64) en el Raspberry Pi 3 Model B + en una versión mínima adicional . Me detendré brevemente en las características de elevar un punto de acceso Wi-Fi identificado como resultado de la operación de prueba de mi configuración anterior en CentOS 7 .

0. Lo que se necesita


Todo lo mismo que figura en el artículo anterior:

  • Raspberry Pi 3 Modelo B +;
  • microSD> = 4GB (más tarde puede "transferir" el sistema a una unidad de 2GB);
  • Estación de trabajo Linux con lector de tarjetas microSD;
  • Conexión de red cableada de "frambuesa" y la estación de trabajo con Linux (en este caso, no se requiere monitor ni teclado adicionales para la configuración), acceso a Internet desde ambos dispositivos;
  • Habilidad avanzada en Linux (para saber y no tener miedo: parted , dd y mkfs ).

Al igual que un ensamblaje iterativo de LFS de su propio Linux, se utilizará la imagen de distribución de Fedora, y luego se creará un sistema mínimo sobre la base (sin "compilación de la fuente").

1. Instalar la distribución original


Las coordenadas de la imagen en bruto del sistema en la Web:
https: //.../fedora-secondary/releases/.../Spins/aarch64/images/Fedora-Minimal-...xz

Después de que se escribe en la microSD y antes de usarlo, es necesario :

  1. Extienda la "raíz" del sistema de archivos (tercera secció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. Deshabilitar SELinux

    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. Eliminar el asistente de configuración inicial:

    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. Permitir acceso 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 puede descargar la "frambuesa" de microSD y conectarse a ella a través de la red.

Un arranque en frío dura aproximadamente un minuto y medio. Sistema TTX después del arranque:

Fedora aarch64

rpm -qa | wc -l
444

2. Montaje mínimo del sistema


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

Para hacer esto, en la "frambuesa" necesitas ejecutar el script:

#!/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 resolver el script, se creará un subdirectorio ( $ P ) en el directorio actual con el contenido de la raíz de la nueva edición mínima del sistema operativo. Puede apagar la "frambuesa" y devolver la microSD a la estación de trabajo Linux.

3. Instalar un sistema mínimo


La instalación se reduce a copiar los archivos de la "imagen" mínima del sistema operativo (obtenida en el paso anterior) a una microSD especialmente preparada en los directorios apropiados.

Una tarjeta de 2GB y dos secciones son suficientes:

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

Después de preparar la microSD y copiar los archivos, necesita:

  • reparar el sistema operativo de arranque;
  • encienda la red;
  • configurar el acceso a través de ssh.

La reparación de una descarga consiste en reemplazar el UUID de las secciones en los archivos:

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

y saved_entry = parámetro en el último archivo

En el archivo:

microSD:/etc/fstab

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

blkid | grep mmcblk | sort

Después de reemplazar, también debe ajustar el contenido de fstab a microSD para que los puntos de montaje correspondan a los nuevos UUID de partición.

La primera vez que enciende la "frambuesa", el rendimiento de la red 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 un arranque exitoso, ordena el lanzamiento de systemd-networkd :

systemctl disable systemd-networkd
systemctl enable systemd-networkd

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

Después de haber hecho todo de manera ordenada y sin errores, puede reorganizar la microSD en la "frambuesa" y comenzar a trabajar con un sistema operativo de 64 bits con un rendimiento mínimo adicional.

4. Sistema listo


La "imagen" del sistema terminado, creada de acuerdo con 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: un script de instalación y TGZ con archivos del sistema operativo. El archivo debe descomprimirse en una estación de trabajo Linux, insertar una microSD (una tarjeta de 2GB es suficiente) y ejecutar el script con el parámetro: el nombre del dispositivo:

./install /dev/mmcblk0
¡Ten cuidado!

Sin ninguna advertencia, el dispositivo se formateará y se instalará un sistema operativo en él.


Después de un trabajo sin errores de la secuencia de comandos, la tarjeta se puede reorganizar en la "frambuesa" y utilizar: para atrapar por dhcp, la contraseña es "1".

El sistema está libre de todo tipo de ID y claves, por lo que cada nueva instalación es única.

Repito nuevamente, ¡el sistema es mínimo ! Por lo tanto, no se alarme: DNF está disponible, por su funcionalidad tendrá que "componer" el /etc/resolv.conf correcto .

Un arranque en frío de una frambuesa tarda unos 40 segundos. Sistema TTX después del arranque:

Fedora aarch64

rpm -qa | wc -l
191

5. Wi-Fi


Me detendré un poco en las características de la implementación de los puntos de acceso Wi-Fi. Para detalles, puede consultar mi artículo anterior .

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

Probablemente, valdría la pena abandonar dnsmasq , ya que Fedora, a diferencia de CentOS, tiene un systemd-networkd bastante reciente, en el que hay servidores DHCP / DNS incorporados normales. Pero el hecho de que en RHEL8 los desarrolladores se hayan negado a admitir la pila de red con otra cosa que no sea ​​NM no inspira confianza en el brillante futuro del proyecto (villanos). En resumen, no lo he probado.

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

Así es como se ven los archivos de firmware de Broadcom en mi "frambuesa" (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, 5GHz / AC no funcionará.

Sobre el número y los nombres de las interfaces. Ahora recomiendo encarecidamente que todas las personas sin necesidad especial no recurran a los "servicios" de conmutadores de software ( puente ), que agregan una carga significativa a la pila de red e inhiben el enrutamiento. Si no se planean varios adaptadores inalámbricos, solo se deben usar interfaces físicas. Tengo dos Wi-Fi, por lo que solo los combino en un puente de software (aunque puedes prescindir de él si le das un vistazo diferente a la configuración de hostapd).

Y me gusta cambiar el nombre de las interfaces.

Para hacer esto, cree un enlace simbólico en Fedora:

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

y luego será posible dar nombres significativos sin jugar con udev , pero solo por medio de systemd-networkd.

Aquí, por ejemplo, se llaman adaptadores de red en 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 de Wi-Fi externos (USB) ensamblados en el "bridge" lan ;
  • wan : adaptador Ethernet al que está conectada Internet.

¿Has notado? fq_codel es realmente algo bueno. Junto con el nuevo kernel de Linux, hacen milagros reales en el alcance inalámbrico: la feroz "calidad de torrent" no conducirá a una degradación repentina de la velocidad entre los vecinos. ¡Incluso trabajar "por aire" en el hogar de TV IP con un canal cargado no se "rompe" y no "tartamudea" de la palabra en absoluto!

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

Ahora se ve así (usando el adaptador incorporado como ejemplo):

[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 "magic" hostapd-int.conf 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 poco de "photoshop" hecho de mi "Ericsson A1018s":

(Conexión a internet - 100Mbps)
Fedora aarch64

Y en conclusión, una pequeña pregunta frecuente.

6. Preguntas frecuentes


6.1 ¿Por qué hacer un enrutador Wi-Fi en una frambuesa?


Uno podría responder simplemente, diciendo "es interesante probar y todo eso".

Pero, de hecho, me parece que el tema es bastante serio. En la era de la Internet "sangrienta", comprar un enrutador en una tienda y ser retenido como rehén por su fabricante es una perspectiva muy aburrida. Muchas personas ya entienden que es imposible sentarse con un CVE o una puerta trasera con cable.

Por supuesto, puede migrar al firmware WRT de los entusiastas. Probablemente hay más confianza en ellos, pero si no desea depender de ellos, solo su propio producto. Idealmente, una computadora completa para la posibilidad de implementar todo en el mundo en ella. En términos de enrutamiento, por supuesto.

Por lo tanto, la elección de "frambuesas" es un movimiento puramente económico: una computadora real y, al mismo tiempo, económica. Aunque, también es posible, con su "dual" en el interior.

6.2 Pero Raspberry es un "subenrutador": lento y con un puerto Ethernet.


Como enrutador Wi-Fi doméstico, "Malinka" me queda más que bien. Sobre la velocidad "a través del aire" ya he dicho anteriormente. ¡Y solo una Ethernet, bueno, en un producto similar de Apple aproximadamente de la misma manera!

Pero en serio, por supuesto que me gustaría más. Y a pesar de que en mi hogar todos los dispositivos están conectados de forma inalámbrica, a veces todavía se requiere una conexión de cobre. Para tales casos, tengo un "centro móvil" en la tienda:

dispositivo, como
Fedora aarch64

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


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

6.4 ¿Por qué Fedora?


Porque me gusta! Fedora - "mainstream" - un sistema de geeks, para el cual, de hecho, este artículo está destinado. Al momento de escribir este artículo, quizás el único sistema operativo que para Raspberry en la versión de 64 bits cuenta con el respaldo oficial de un importante equipo de desarrolladores (de los cuales no puedo esperar al kernel 5.6 ).

6.5 ¿Funciona Bluetooth? ¿Cómo es el video / sonido / GPIO?


Yo no 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 CentOS / Fedora / RedHat comienzan con la desactivación de SELinux?


Debido a que el sistema es mínimo, ni siquiera tiene un firewall y utilidades para configurarlo. Quién lo necesita: pueden instalar adicionalmente todo lo que sea necesario.

6.7 El sistema no se puede usar, la contraseña no se puede cambiar, no passwd. ¡Sin ping, nada!


Hay un DNF . O esta opción de instalación no es para usted: use el kit de distribución de los desarrolladores.

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


¿Verdad? Oh bien:

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 una imagen preparada con un punto de acceso Wi-Fi configurado!


Preparar el instalador "para todos" requerirá una cierta cantidad de tiempo y esfuerzo. Si (¡de repente!) Realmente parece interesante y necesario para alguien, escriba, se nos ocurrirá algo.



En eso, terminaré.

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

All Articles