No artigo Falei sobre como transformar a 'Raspberry' em um ponto de acesso sem fio usando o sistema operacional CentOS. Montando meu roteador doméstico seguindo esse projeto, satisfiz meu ego criativo e garanti um nível de tranquilidade sobre um elemento crítico da minha infraestrutura aconchegante. No entanto, a sensação de que a solução estava incompleta e um perfeccionismo interior não me deixavam em paz: 'um resultado imperfeito não tem direito de existir'. A ideia de que 'o ideal pode e deve ser alcançado' não me abandonou nem por um minuto.
E um dia, em um dos fóruns temáticos, eu me deparei com uma discussão sobre a arquitetura dos sistemas operacionais existentes para a 'Raspberry' (aarch64 vs armhfp): quais sistemas operacionais de 64 bits podem ser implementados e funcionar na versão 3++ da Raspberry?
Minha adorada CentOS para a arquitetura ARM da 'Userland' não estava apressada em migrar para o núcleo da versão mais recente e se tornar 64 bits. E o repositório EPEL, adicionado sabe-se lá de onde sem assinatura digital, era um pesadelo nos meus sonhos inquietos...
Como defensor de distribuições baseadas em RPM, fiquei surpreso ao descobrir que nos debates sobre sistemas operacionais para a 'Raspberry', uma distribuição estava absolutamente esquecida. Fedora! E isso apesar do fato de que seu lançamento

Neste artigo, falarei sobre como instalar Fedora (aarch64) para Raspberry Pi 3 Model B+ em na sua versão extramente minimalista.. Vou abordar brevemente as características de configuração do ponto de acesso Wi-Fi, identificadas durante a experiência com minha configuração anterior em .
0. O que será necessário
Tudo igual ao que foi listado no artigo anterior:
- Raspberry Pi 3 Model B+;
- microSD >= 4GB (posteriormente, o sistema pode ser 'transferido' para um armazenamento de 2GB);
- Estação de trabalho com Linux e leitor de cartões microSD;
- Conexão de rede com fio entre a 'Raspberry' e a estação de trabalho com Linux (nesse caso, não serão necessários monitor e teclado adicionais para configuração), acesso à Internet em ambos os dispositivos;
- Habilidade avançada em Linux (saber e não ter medo de: , e ).
Semelhante à abordagem iterativa da -compilação do próprio Linux, será utilizado a imagem do distribuidor Fedora, e então com base nela será criada uma sistema mínima (sem 'compilação a partir do código-fonte').
1. Instalação do distribuidor original
As coordenadas da imagem raw do sistema na rede:
Após gravar no microSD e antes de começar a usar, é necessário:
- Expandir o "root" do sistema de arquivos (3ª partiçã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 - Desativar o SELinux
echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config - Remover o Assistente de Configuração Inicial:
find /mnt/3/etc/systemd/ -iname initial-setup.service -delete - Permitir acesso via 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 inicializar a "raspberry" com o microSD e se conectar a ela pela rede.
O arranque a frio leva cerca de um minuto e meio. Especificações do sistema após a inicialização:

rpm -qa | wc -l
444
2. Montagem do sistema mínimo
Infelizmente, o "distribuidor mínimo" dos desenvolvedores acaba não sendo o mais modesto em consumo de recursos. A imagem do sistema pode ser reduzida ainda mais.
Para isso, na "raspberry" é necessário 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 a execução do script, será criado um subdiretório ($P) com o conteúdo do root da nova edição mínima do SO. Você pode desligar a "raspberry" e retornar o microSD à estação de trabalho Linux.
3. Instalação do sistema mínimo
A instalação consiste em copiar os arquivos da "imagem" mínima do SO (obtida na etapa anterior) para o microSD preparado nas pastas correspondentes.
Um cartão de 2GB e duas partições são suficientes:
- /boot/efi — EFI+FAT32, de inicialização, 100MB;
- / (root) — EXT4, todo o espaço restante.
Após preparar o microSD e copiar os arquivos para ele, é necessário:
- consertar a inicialização do SO;
- ativar a rede;
- configurar o acesso via ssh.
Consertar a inicialização consiste em alterar os UUIDs das partições nos arquivos:
microSD:/boot/efi/EFI/fedora/grub.cfg
microSD:/boot/efi/EFI/fedora/grubenv
e o parâmetro saved_entry= no último arquivo
No arquivo:
microSD:/etc/fstab
podem ser encontrados os antigos valores, e os atuais (vigorosos) — na saída do comando:
blkid | grep mmcblk | sort
Após a substituição, você também deve corrigir o conteúdo fstab no microSD, para que os pontos de montagem correspondam aos novos UUIDs das partições.
A operacionalidade da rede ao ligar pela primeira vez a "raspberry" pode ser alcançada com um pequeno "workaround" — criar um link (esquematicamente):
ln -s /usr/lib/systemd/system/systemd-networkd.service
microSD:/etc/systemd/system/multi-user.target.wants
e o arquivo:
mkdir -p microSD:/etc/systemd/network
cat > microSD:/etc/systemd/network/dhcp.network << EOF
[Match]
Name=*
[Network]
DHCP=ipv4
EOF
Após a inicialização bem-sucedida — organizar o início :
systemctl disable systemd-networkd
systemctl enable systemd-networkd
O acesso de superusuário via ssh é configurado da mesma forma que no item 1.
Após fazer tudo com cuidado e sem erros, você pode transferir o microSD para a 'Raspberry' e começar a trabalhar com o sistema operacional de 64 bits na sua versão mais minimalista.
4. Sistema pronto
A 'imagem' do sistema pronto, criada conforme as instruções acima, pode ser baixada pelo link:
Isso será um arquivo compactado, contendo dois arquivos: um script de instalação e um TGZ com os arquivos do sistema operacional. O arquivo precisa ser descompactado em uma estação de trabalho Linux, inserir o microSD (um cartão de 2GB é suficiente) e executar o script com o parâmetro — o nome do dispositivo:
.\/install \/dev\/mmcblk0
Fique atento!
Sem qualquer aviso, o dispositivo será formatado e uma nova versão do sistema operacional será instalada nele.
Após a execução correta do script, o cartão pode ser transferido para a 'Raspberry' e usado: conectar via dhcp, a senha é '1'.
O sistema foi limpo de qualquer ID e chaves, o que torna cada nova instalação única.
Reitero mais uma vez, o sistema é mínimo! Por isso, não se assuste: o DNF está disponível, e para seu funcionamento será necessário 'criar' um correto .
A inicialização a frio da 'Raspberry' leva cerca de 40 segundos. Especificações do sistema após a carga:

rpm -qa | wc -l
191
5. Wi-Fi
Vou parar um pouco nas particularidades da implementação do ponto de acesso Wi-Fi. Para mais detalhes, você pode consultar meu anterior .
Agora o EPEL não será necessário — todos os pacotes estão contidos nos repositórios oficiais.
Provavelmente, seria melhor abrir mão de , pois no Fedora, ao contrário do CentOS, há um systemd-networkd suficientemente recente, que possui servidores DHCP/DNS embutidos normais. Mas o fato de que os desenvolvedores do RHEL8 , não inspira confiança no futuro brilhante do projeto (canalhas). Em suma, não experimentei.
Além disso, os drivers atuais do adaptador Wi-Fi embutido não precisam ser 'roubados' do Raspbian, mas podem ser baixados diretamente do .
Assim são os arquivos de firmware da Broadcom na minha '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, não será possível utilizar 5GHz/AC.
Sobre o número e os nomes das interfaces. Agora, recomendo enfaticamente a todos que não recorram aos 'serviços' de switches de software sem necessidade.), que impõem uma carga significativa na pilha de rede e prejudicam o roteamento. Se não houver planos para múltiplos adaptadores sem fio, deve-se usar exclusivamente interfaces físicas. Eu tenho dois Wi-Fi, por isso somente os uno em uma ponte virtual (embora seja possível administrar isso de outra forma, considerando a configuração do hostapd).
E eu gosto de renomear interfaces.
Para isso, no Fedora, é necessário criar um link simbólico:
/etc/systemd/network/99-default.link -> /dev/null
e então será possível dar nomes significativos sem mexer em , apenas com os recursos do systemd-networkd.
Assim, por exemplo, os adaptadores de rede no meu roteador são nomeados:
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 — embutido, ext — adaptadores Wi-Fi externos (USB), reunidos em um "bridge" lan;
- wan — adaptador Ethernet, no qual a Internet está conectada.
Notou? — realmente uma coisa incrível. Junto com o kernel Linux mais recente, faz verdadeiros milagres na faixa sem fio: um download intenso via torrent não causará uma degradação súbita na velocidade dos vizinhos. Até mesmo a IPTV doméstica "sem fio" não "quebra" nem "gagueja" de forma alguma, mesmo em um canal sobrecarregado!
O arquivo de serviço do daemon sofreu algumas alterações .
Agora ele se parece assim (com o exemplo do adaptador embutido):
[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 operação 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 meu "Ericsson A1018s":
(conexão à Internet — 100Mb/s)
E, para concluir, um pequeno FAQ.
6. FAQ
6.1 Por que fazer um roteador Wi-Fi no Raspberry?
Poderíamos responder simplesmente dizendo "é interessante tentar e só isso".
Mas, na verdade, como eu vejo, o tema é bastante sério. Na era da Internet "sangrenta", comprar um roteador na loja e permanecer refém do seu fabricante é uma perspectiva bastante sombria. Ficar com vulnerabilidades conhecidas ou um backdoor embutido já é algo com o que muitos compreendem que não se pode conviver.
Claro, é possível migrar para firmwares WRT de entusiastas. Confiança neles, talvez, seja maior, mas se você não quiser depender deles, então só resta — produzir o seu próprio. Idealmente – um computador completo para a possibilidade de realizar tudo isso. No que se refere ao roteamento, é claro.
Portanto, a escolha do "berry" é uma decisão meramente econômica: um verdadeiro computador e, ao mesmo tempo, acessível. Embora, talvez também — com suas "dobras" internas.
6.2 Mas o Raspberry é um "roteador barato": lento e com apenas uma porta Ethernet!
Como roteador Wi-Fi doméstico, o "berry" me atende mais do que bem. Já falei sobre a velocidade "sem fio" acima. E uma única Ethernet, bem, em um produto semelhante da Apple, é mais ou menos a mesma coisa!
E falando sério, é claro que eu gostaria de mais. E apesar de que em minha casa todos os dispositivos estão conectados sem fio, às vezes ainda é necessário uma conexão com fio. Para tais ocasiões, eu tenho um "hub móvel" guardado:
um dispositivo — tipo este
6.3 Se este é um roteador, então nada foi dito sobre a "tuning" TCP/IP, pois isso é importante!
Além da configuração da pilha de rede (tcp_fastopen, YeAH e afins), neste e no artigo anterior, não foram revelados outros detalhes, em particular, o processo de preparação do microSD para uso ótimo (embora o instalador tente formatar o cartão de memória de uma maneira engenhosa). O processo de aprimoramento é interminável, só é preciso parar a tempo.
6.4 Por que Fedora?
Porque eu gosto! Fedora — "mainstream" — é um sistema para geeks, para os quais, de fato, este artigo é destinado. No momento da escrita, talvez a única OS que para Raspberry em versão de 64 bits é oficialmente suportada por uma equipe significativa de desenvolvedores (dos quais não consigo receber) ).
6.5 E o Bluetooth funciona? E quanto ao vídeo/som/GPIO?
Não sei. O artigo é sobre a instalação mínima do sistema e seu uso posterior como roteador Wi-Fi.
6.6 Por que todos os artigos sobre CentOS/Fedora/RedHat começam com a desativação do SELinux?
Porque o sistema é mínimo, não tem nem mesmo um firewall e utilitários para sua configuração. Quem precisar pode instalar adicionalmente tudo o que for necessário.
6.7 Não é possível usar o sistema, não é possível alterar a senha — não há passwd. Não há ping, não há nada!
Há . Ou essa opção de instalação não é para você – use a distribuição dos desenvolvedores.
6.8 E onde está o SWAP? Não consigo viver sem ele!
É verdade? Bom, então:
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 imediatamente uma imagem pronta com um ponto de acesso Wi-Fi configurado!
Para preparar o instalador "para todos" será necessário algum tempo e esforço. Se (de repente!) isso parecer realmente interessante e necessário para alguém – escreva, vamos pensar em algo.
Com isso, vou concluir.
Desejo a todos uma navegação segura e máximo controle sobre a infraestrutura!
Fonte: habr.com
