Raspberry Pi + Fedora (aarch64) = Wi-Fi 热点(或带蓝帽子的树莓路由器)

文章 Raspberry Pi + CentOS = Wi-Fi 热点(或带红帽的树莓路由器) 我谈到了一种使用 CentOS 操作系统将 Raspberry 变成无线接入点的方法。 通过根据这张图组装我的家庭路由器,我满足了我的创造性自我,并为我舒适的基础设施的关键元素获得了内心的平静。 然而,解决方案的不完整感和内心的完美主义困扰着我:“不完美的工作结果没有权利存在。” “理想能够而且应该实现”的想法一刻也没有离开过我。

然后有一天,在一个主题论坛上,我遇到了关于 Raspberry 现有操作系统的位深度的讨论(aarch64 与 armhfp):原则上哪种 64 位操作系统可以适合并在 Raspberry 版本 3 上运行++?

我心爱的来自“Userland”的 ARM 架构的 CentOS 并不急于切换到最新版本的内核并变成 64 位。 而 EPEL 存储库,从天知道在哪里连接,没有数字签名,在我不安的睡眠中是一场噩梦......

作为基于 RPM 的发行版的拥护者,我惊讶地发现 Raspberry 的操作系统在讨论中完全被遗忘了 Fedora! 尽管事实上它的发布
从版本28开始,它正式支持3位版本的Raspberry Pi 64B+!

Raspberry Pi + Fedora (aarch64) = Wi-Fi 热点(或带蓝帽子的树莓路由器)
这篇文章我会讲一下安装方法 软呢帽 (aarch64)树莓派3模型B + в 额外的最低性能。 我将简要介绍一下建立 Wi-Fi 接入点的功能,这些功能是我之前的配置在 CentOS 7的.

0. 你需要什么

一切都与上一篇文章中列出的相同:

  • 树莓派 3 型号 B+;
  • microSD >= 4GB(稍后您可以将系统“转移”到2GB驱动器);
  • 配备 Linux 和 microSD 读卡器的工作站;
  • Raspberry 和 Linux 工作站之间的有线网络连接(在这种情况下,设置不需要额外的显示器和键盘),两个设备都可以访问互联网;
  • Linux 高级技能(了解而不害怕: 分手, dd и 的mkfs).

类似于迭代 LFS-构建您自己的Linux,将使用Fedora发行版映像,然后基于它创建一个最小的系统(无需“从源代码编译”)。

1.安装原始发行版

系统原始图像在网上的坐标:
https://…/fedora-secondary/releases/…/Spins/aarch64/images/Fedora-Minimal-…xz

将其录制到 microSD 后并在使用之前,您需要:

  1. 展开文件系统的“根”(第三个分区,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. 禁用 SELinux
    echo 'SELINUX=disabled' > /mnt/3/etc/selinux/config
    

  3. 删除初始设置向导:
    find /mnt/3/etc/systemd/ -iname initial-setup.service -delete
    

  4. 允许通过 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
    

现在您可以从 microSD 下载“raspberry”并通过网络连接到它。

冷启动大约需要一分半钟。 加载后系统的TTX:

Raspberry Pi + Fedora (aarch64) = Wi-Fi 热点(或带蓝帽子的树莓路由器)

rpm -qa | wc -l
444

2. 组装最小系统

不幸的是,事实证明,开发人员的“最小分配”远非资源消耗最适度的。 系统映像可以做得更小。

为此,您需要在 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

运行脚本后,将在当前目录中创建一个子目录($P)以及新的最小操作系统版本的根目录的内容。 您可以关闭 Raspberry 并将 microSD 返回到 Linux 工作站。

3.最小系统的安装

安装归结为将最小的操作系统“映像”文件(在上一步中获得)复制到专门准备的 microSD 上的适当目录中。

一张 2GB 卡和上面的两个分区就足够了:

  1. /启动/ efi - EFI+FAT32,启动,100MB;
  2. / (root) - EXT4,所有剩余空间。

准备好 microSD 并将文件复制到其中后,您需要:

  • 修复操作系统启动;
  • 打开网络;
  • 通过 ssh 配置访问。

启动修复是替换文件中各部分的UUID:

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

和参数 已保存条目= 在最后一个文件中

在文件中:

microSD:/etc/fstab

您可以在命令输出中找到旧值和当前(最新)值:

blkid | grep mmcblk | sort

更换后,还应更正内容 fstab文件 在 microSD 上,以便挂载点对应于新的分区 UUID。

当您第一次打开 Raspberry 时,网络功能可以通过一个小“拐杖”来实现 - 创建一个链接(示意性地):

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

和文件:

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

下载成功后,整理启动 系统网络:

systemctl disable systemd-networkd
systemctl enable systemd-networkd

通过 ssh 的超级用户访问的配置与步骤 1 类似。

仔细完成所有操作且没有错误后,您可以将 microSD 移动到“树莓派”中,并开始在额外的最小版本中使用 64 位操作系统。

4. 准备系统

根据上述说明创建的成品系统的“映像”可以从以下链接下载:
Fedora-Tiny-31-5.5.7-200.aarch64

这将是一个包含两个文件的存档:安装脚本和带有操作系统文件的 TGZ。 存档需要在 Linux 工作站上解压,插入 microSD(2GB 卡就足够了)并使用参数运行脚本 - 设备名称:

./install /dev/mmcblk0

要小心!

在没有任何警告的情况下,设备将被格式化并安装操作系统。

脚本无错误执行后,卡可以重新排列成“raspberry”并使用:catch via dhcp,密码 - “1”。

系统中的所有 ID 和密钥均被清除,这就是每个新安装都是唯一的原因。

我再说一遍,系统—— 最小的! 因此,不要惊慌:DNF 是可用的,要使其发挥作用,您必须“发明”正确的一个 / etc / resolv.conf中.

树莓派冷启动大约需要40秒。 加载后系统的TTX:

Raspberry Pi + Fedora (aarch64) = Wi-Fi 热点(或带蓝帽子的树莓路由器)

rpm -qa | wc -l
191

5。 无线上网

我将详细介绍实现 Wi-Fi 接入点的功能。 具体可以参考我之前的 文章.

不再需要 EPEL - 所有软件包都包含在官方存储库中。

也许值得放弃 域名,因为 Fedora 与 CentOS 不同,有一个相当新的 systemd-networkd,它有正常的内置 DHCP/DNS 服务器。 但事实是,在 RHEL8 开发人员中 拒绝使用 NM 以外的任何内容支持网络堆栈,并不能激发人们对项目光明未来的信心(恶棍)。 简而言之,我没有尝试过。

此外,当前内置 Wi-Fi 适配器的驱动程序无法从 Raspbian 发行版中“窃取”,而是直接从 github上.

这是 Broadcom 固件文件在我的 Raspberry 上的样子(示意图):

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

没有它们,您将无法获得 5GHz/AC。

关于接口的数量和名称。 现在我强烈建议大家,除非绝对必要,否则不要诉诸软件交换机的“服务”(),这会给网络堆栈带来大量负载并抑制路由。 如果您不打算拥有多个无线适配器,那么您应该仅使用物理接口。 我有两个 Wi-Fi,所以我只将它们组合成一个软件桥(尽管您可以通过以不同方式查看 hostapd 设置来不使用它)。

我喜欢重命名界面。

要在 Fedora 中执行此操作,您需要创建一个符号链接:

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

然后就可以给出有意义的名字而无需四处寻找 乌德夫,但仅使用 systemd-networkd。

例如,我的路由器中的网络适配器的名称如下:

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 - 内置, 分机 — 外部 (USB) Wi-Fi 适配器组装成“桥” 局域网;
  • 苍白 — 连接互联网的以太网适配器。

你注意到了吗? fq_codel - 一件非常酷的事情。 与新的 Linux 内核一起,它们在无线范围内创造了真正的奇迹:激烈的“torrent 下载”不会导致邻居之间的速度突然下降。 即使是带有加载频道的“无线”操作的家庭 IP-TV 也不会“中断”,也不会“卡顿”!

守护进程服务文件发生了微小的变化 hostapd.

现在看起来像这样(使用内置适配器的示例):

[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

以及在 5GHz/AC 下工作的“神奇”hostapd-int.conf:

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]

用我的爱立信 A1018 制作的一个小 Photoshop:

(互联网连接 - 100Mbit/秒)Raspberry Pi + Fedora (aarch64) = Wi-Fi 热点(或带蓝帽子的树莓路由器)
最后是一个小常见问题解答。

6。 常问问题

6.1 为什么要在Raspberry上制作Wi-Fi路由器?

人们可以简单地回答,比如“尝试一下很有趣”。

但事实上,在我看来,这个话题是相当严肃的。 在“血腥”互联网时代,在商店购买路由器并受制于其制造商是一个非常惨淡的前景。 许多人已经明白,使用 CVE 或内置后门是不可能的。

当然,你可以从爱好者那里迁移到WRT固件。 可能对他们有更多的信任,但如果你不想依赖他们,那就使用你自己的产品。 理想情况下,是一台功能齐全的计算机,以便世界上的一切都可以在其上实现。 当然,就路由而言。

因此,选择“树莓派”纯粹是经济之举:一台真正的计算机,同时又是一台便宜的计算机。 虽然,也许还有-里面有他们的“替身”。

6.2 但 Raspberry 是一款“低级路由器”:速度慢且只有一个以太网端口!

作为一款家用 Wi-Fi 路由器,Raspberry 已经非常令我满意。 上面我已经讲过空气速度了。 而且只有一个以太网,嗯,在苹果的一款类似产品中,它几乎是一样的!

但说真的,我当然想要更多。 尽管我家里的所有设备都是无线连接的,但有时仍然需要铜线连接。 对于这种情况,我库存了一个“移动集线器”:

设备 - 像这样的东西Raspberry Pi + Fedora (aarch64) = Wi-Fi 热点(或带蓝帽子的树莓路由器)

6.3 如果这是一个路由器,那么就无需提及“调整”TCP/IP,因为这很重要!

除了设置网络堆栈(tcp_fastopen、YeAH 等)之外,这篇文章和上一篇文章没有涵盖其他细微差别,特别是准备 microSD 以实现最佳使用的过程(尽管安装程序尝试在一个棘手的方法)。 进步的过程是无止境的,你只需要及时停止即可。

6.4 为什么选择 Fedora?

因为我喜欢! Fedora 是面向极客的“主流”系统,本文实际上是针对极客的。 在撰写本文时,也许 64 位版本的 Raspberry 唯一操作系统得到了重要开发人员的正式支持(我迫不及待地从他们那里得到支持) 内核5.6).

6.5 蓝牙是否有效? 视频/声音/GPIO 怎么样?

不知道。 本文介绍的是系统的最小安装及其随后作为 Wi-Fi 路由器的使用。

6.6 为什么所有有关 CentOS/Fedora/RedHat 的文章都以禁用 SELinux 开头?

由于系统很小,它甚至没有防火墙或用于设置它的实用程序。 任何需要它的人都可以额外安装他们需要的一切。

6.7 系统无法使用,密码无法更改——无passwd。 没有 ping,什么也没有!

地下城与勇士。 或者此安装选项不适合您 - 使用开发人员提供的分发工具包。

6.8 隔夜利息在哪里? 没有他我就活不下去!

这是真的吗? 好吧:

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 我想立即下载带有已配置 Wi-Fi 接入点的现成映像!

为“所有人”准备安装程序需要一些时间和精力。 如果(突然!)有人真的觉得这很有趣并且有必要,请写信给我们,我们会想出一些办法。

我就讲完这个。

祝大家都能安全冲浪并最大限度地控制基础设施!

来源: habr.com

添加评论