Raspberry Pi + Fedora (aarch64) = Ponto de acesso Wi-Fi (ou um roteador de framboesa com um chapéu azul)

No artigo Raspberry Pi + CentOS = Ponto de acesso Wi-Fi (ou um roteador de framboesa com chapéu vermelho) , falei sobre como transformar uma framboesa em um ponto de acesso sem fio usando o sistema operacional CentOS. Depois de coletar meu roteador doméstico a partir de um desenho assim, satisfazi meu ego criativo e recebi uma carga de calma por um elemento crítico da minha aconchegante infraestrutura. No entanto, o sentimento de decisão incompleta e o perfeccionismo interno não deram descanso: "um resultado imperfeito do trabalho não tem o direito de existir". O pensamento de que "esse ideal pode e deve ser alcançado" não me deixou por um minuto.

E então, um dia, em um dos fóruns temáticos, me deparei com uma discussão sobre a profundidade de bits dos sistemas operacionais existentes para “Malinka” (aarch64 vs armhfp): quais sistemas operacionais de 64 bits podem basicamente se encaixar e ganhar dinheiro com o Raspberry versão 3 ++?

Minha arquitetura favorita do CentOS para ARM da "Userland" não tinha pressa de mudar para o kernel da versão mais recente e se transformar em 64 bits. E o repositório EPEL, conectado Deus sabe onde, sem assinatura digital, foi um pesadelo no meu sonho conturbado ...

Falando como adepto de distribuições baseadas em RPM, fiquei surpreso ao descobrir que o Fedora acabou sendo absolutamente esquecido nas discussões sobre o sistema operacional para “framboesa” ! E isso apesar do fato de seu lançamento
da 28ª versão suportar oficialmente o Raspberry Pi 3B + na versão de 64 bits!

Fedora aarch64

Neste artigo, falarei sobre como instalar o Fedora (aarch64) no Raspberry Pi 3 Modelo B + em uma versão extra mínima . Vou abordar brevemente os recursos para aumentar um ponto de acesso Wi-Fi identificado como resultado da operação de teste da minha configuração anterior no CentOS 7 .

0. O que é necessário


Tudo igual ao listado no artigo anterior:

  • Raspberry Pi 3 Modelo B +;
  • microSD> = 4 GB (mais tarde você pode "transferir" o sistema para uma unidade de 2 GB);
  • Estação de trabalho Linux com leitor de cartão microSD;
  • Conexão de rede com fio “raspberry” e a estação de trabalho com Linux (neste caso, nenhum monitor e teclado adicionais são necessários para a configuração), acesso à Internet de ambos os dispositivos;
  • Habilidade avançada em Linux (conhecer e não ter medo: parted , dd e mkfs ).

Como uma montagem LFS iterativa do seu próprio Linux, a imagem de distribuição do Fedora será usada e, em seguida, um sistema mínimo será criado com base (sem "compilação da fonte").

1. Instalando a distribuição original


As coordenadas da imagem não processada do sistema na Web:
https: //.../fedora-secondary/releases/.../Spins/aarch64/images/Fedora-Minimal-...xz

Após a gravação no microSD e antes do uso, é necessário :

  1. Estenda a “raiz” do sistema de arquivos (3ª seção, 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. Desativar SELinux

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

  3. Exclua o assistente de configuração inicial:

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

  4. Permitir acesso 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 você pode baixar o "raspberry" do microSD e conectar-se a ele através da rede.

Uma partida a frio leva cerca de um minuto e meio. Sistema TTX após a inicialização:

Fedora aarch64

rpm -qa | wc -l
444

2. Montagem mínima do sistema


Infelizmente, a "distribuição mínima" dos desenvolvedores está longe de ser a mais modesta no consumo de recursos. A imagem do sistema pode ser ainda menor.

Para fazer isso, no "raspberry" você precisa executar o 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

Após elaborar o script, um subdiretório ( $ P ) será criado no diretório atual com o conteúdo da raiz da nova edição mínima do sistema operacional. Você pode desligar o “raspberry” e retornar o microSD à estação de trabalho Linux.

3. Instalando um Sistema Mínimo


A instalação é reduzida para copiar os arquivos da "imagem" mínima do sistema operacional (obtida na etapa anterior) para um microSD especialmente preparado nos diretórios apropriados.

Um cartão de 2 GB e duas seções são suficientes:

  1. / boot / efi - EFI + FAT32, inicialização, 100 MB;
  2. / (root) - EXT4, todo o espaço restante.

Depois de preparar o microSD e copiar arquivos para ele, você precisa:

  • reparar o sistema operacional de inicialização;
  • ligue a rede;
  • configurar o acesso via ssh.

Reparar um download consiste em substituir o UUID das seções nos arquivos:

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

e saved_entry = parâmetro no último arquivo

No arquivo:

microSD:/etc/fstab

você pode encontrar valores antigos e atuais (atuais) na saída do comando:

blkid | grep mmcblk | sort

Após a substituição, você também deve ajustar o conteúdo do fstab para o microSD para que os pontos de montagem correspondam aos novos UUIDs da partição.

Na primeira vez em que você liga o "raspberry", o desempenho da rede pode ser alcançado com uma pequena "muleta" - crie um link (esquematicamente):

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

Após uma inicialização bem-sucedida, arrume o lançamento do systemd-networkd :

systemctl disable systemd-networkd
systemctl enable systemd-networkd

O acesso do superusuário via ssh é configurado de maneira semelhante ao item 1.

Depois de fazer tudo de forma organizada e sem erros, você pode reorganizar o microSD no "raspberry" e começar a trabalhar com o sistema operacional de 64 bits em um desempenho mínimo extra.

4. Sistema Pronto


A "imagem" do sistema finalizado, criada de acordo com as instruções acima, pode ser baixada no link:
Fedora-Tiny-31-5.5.7-200.aarch64

Este será um arquivo contendo dois arquivos: um script de instalação e um TGZ com arquivos do SO. O arquivo deve ser descompactado em uma estação de trabalho Linux, insira um microSD (cartão de 2 GB é suficiente) e execute o script com o parâmetro - o nome do dispositivo:

./install /dev/mmcblk0
Seja cuidadoso!

Sem nenhum aviso, o dispositivo será formatado e um sistema operacional será instalado nele.


Após um trabalho livre de erros no script, o cartão pode ser reorganizado no “raspberry” e usado: para capturar pelo dhcp, a senha é “1”.

O sistema é limpo de todos os tipos de IDs e chaves, e é por isso que cada nova instalação é única.

Repito novamente, o sistema é mínimo ! Portanto, não se assuste: o DNF está disponível, por sua funcionalidade, você terá que “compor” o /etc/resolv.conf correto .

Uma partida a frio de uma framboesa leva cerca de 40 segundos. Sistema TTX após a inicialização:

Fedora aarch64

rpm -qa | wc -l
191

5. Wi-Fi


Vou me debruçar um pouco sobre os recursos da implementação dos pontos de acesso Wi-Fi. Para detalhes, você pode consultar o meu artigo anterior .

O EPEL não é mais necessário - todos os pacotes estão contidos em repositórios oficiais.

Provavelmente, valeria a pena abandonar o dnsmasq , já que o Fedora, ao contrário do CentOS, tem um systemd-networkd bastante recente, no qual existem servidores DHCP / DNS embutidos normais. Mas o fato de que no RHEL8 os desenvolvedores se recusaram a dar suporte à pilha de rede com algo diferente de NM não inspira confiança no futuro brilhante do projeto (vilões). Em suma, eu não tentei.

Além disso, os drivers atuais do adaptador Wi-Fi embutido não podem ser "roubados" da distribuição Raspbian, mas baixados diretamente do github .

É assim que os arquivos de firmware da Broadcom se parecem no meu "raspberry" (esquematicamente):

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

Sem eles, 5GHz / AC não funcionará.

Sobre o número e nomes de interfaces. Agora, recomendo vivamente que todos os que não têm necessidade especial não recorram aos “serviços” dos switches de software ( bridge ), que adicionam uma carga significativa à pilha da rede e inibem o roteamento. Se vários adaptadores sem fio não forem planejados, somente interfaces físicas deverão ser usadas. Eu tenho dois Wi-Fi, por isso só os combino em uma ponte de software (embora você possa ficar sem ela, observando de maneira diferente a configuração do hostapd).

E eu gosto de renomear interfaces.

Para fazer isso, crie um link simbólico no Fedora:

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

e, em seguida, será possível atribuir nomes significativos sem mexer no udev , mas apenas por meio do systemd-networkd.

Aqui, por exemplo, são chamados de adaptadores de rede no meu roteador:

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 - embutido, ext - (USB) Adaptadores de Wi-Fi externos montadas na "ponte" lan ;
  • wan - adaptador Ethernet ao qual a Internet está conectada.

Você percebeu? fq_codel é realmente uma coisa boa. Juntamente com o novo kernel Linux, eles fazem maravilhas na faixa sem fio: a feroz "qualidade de torrent" não levará a uma súbita degradação da velocidade entre os vizinhos. Mesmo o trabalho de TV IP doméstica "over the air" com um canal carregado não "quebra" e nem "gagueja" com a palavra!

O arquivo de serviço do daemon hostapd sofreu pequenas alterações .

Agora parece com isso (usando o adaptador interno como exemplo):

[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ágico” hostapd-int.conf para trabalhar em 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]

Um pouco de "photoshop" feito com meus "Ericsson A1018s":

(Conexão com a Internet - 100 Mbps)
Fedora aarch64

E, em conclusão, um pequeno FAQ.

6. FAQ


6.1 Por que fazer um roteador Wi-Fi em uma framboesa?


Pode-se responder simplesmente, dizendo "é interessante tentar e tudo isso".

Mas, de fato, parece-me, o tópico é bastante sério. Na era da Internet "sangrenta", comprar um roteador em uma loja e ser refém de seu fabricante é uma perspectiva muito tediosa. Muitas pessoas já entendem que é impossível sentar com um CVE ou uma porta traseira com fio.

Obviamente, você pode migrar para o firmware WRT de entusiastas. Provavelmente há mais confiança neles, mas se você não quiser depender deles, apenas seu próprio produto. Idealmente, um computador completo para a possibilidade de implementar tudo no mundo. Em termos de roteamento, é claro.

Portanto, a escolha de “framboesas” é uma jogada puramente econômica: um computador real e ao mesmo tempo - barato. Embora também seja possível - com seu "dual" por dentro.

6.2 Mas o Raspberry é um “sub-roteador”: lento e com uma porta Ethernet!


Como um roteador Wi-Fi doméstico, "Malinka" combina comigo mais do que. Sobre a velocidade "através do ar" eu já disse acima. E apenas uma Ethernet, bem, em um produto similar da Apple aproximadamente da mesma maneira!

Mas, falando sério, é claro que gostaria de mais. E apesar do fato de que em minha casa todos os dispositivos estão conectados sem fio, às vezes ainda é necessária uma conexão de cobre. Para esses casos, tenho um "hub móvel" reservado:

dispositivo - como
Fedora aarch64

6.3 Se este é um roteador, nada é dito sobre o "ajuste" do TCP / IP, porque é importante!


Além de configurar a pilha de rede (tcp_fastopen, YeAH, etc.), este e o artigo anterior não divulgaram outras nuances, em particular o processo de preparação do microSD para o uso ideal (embora o instalador tente formatar o cartão de memória de maneira complicada). O processo de melhoria é infinito, você só precisa parar no tempo.

6.4 Por que o Fedora?


Porque eu gosto! Fedora - "mainstream" - um sistema de geeks, para o qual, de fato, este artigo é destinado. No momento da redação deste artigo, talvez o único sistema operacional para Raspberry na versão de 64 bits seja oficialmente suportado por uma equipe significativa de desenvolvedores (dos quais mal posso esperar pelo kernel 5.6 ).

6.5 O Bluetooth funciona? Como está o vídeo / som / GPIO?


Eu não sei. O artigo é sobre a instalação mínima do sistema e seu uso subsequente como um roteador Wi-Fi.

6.6 Por que todos os artigos do CentOS / Fedora / RedHat começam com a desativação do SELinux?


Como o sistema é mínimo, ele nem possui firewall e utilitários para configurá-lo. Quem precisa - eles podem instalar adicionalmente tudo o que for necessário.

6.7 O sistema não pode ser usado, a senha não pode ser alterada - sem senha. Sem ping, nada!


Existe um DNF . Ou essa opção de instalação não é para você - use o kit de distribuição dos desenvolvedores.

6.8 Onde está o SWAP? Eu não posso viver sem ele!


Verdade? Ah bem:

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 Gostaria de baixar uma imagem pronta com um ponto de acesso Wi-Fi configurado!


Preparar o instalador "para todos" exigirá uma certa quantidade de tempo e esforço. Se (de repente!) Parece realmente interessante e necessário para alguém - escreva, vamos descobrir algo.



Por isso - vou terminar.

Desejo a todos uma navegação segura e controle máximo sobre a infraestrutura!

All Articles