给树莓派安装 Arch Linux ARM

chaneyzorn

一时兴起入手了一个树莓派,购买的套餐中附带的 SD 卡里已经安装了 Raspberry Pi OS with desktop,但是玩了一小会儿后,觉得树莓派配不上身价比它更高的键盘和显示器(误),所以还是决定改成不带桌面的系统。

Nice ArchLinux

浏览了 awesome-raspberry-pi 之后看到有 Arch Linux ARM 果断就上车了,archlinux 是一个让人安心的系统 :)。

Arch Linux ARM 树莓派页面上有一个贴心的提示:树莓派使用的 USB Type-C 不符合规范

Note: The Raspberry Pi 4's USB Type-C power port is not compliant with the USB Type-C specification, and it will not be able to be powered by supplies that are compliant.

因为树莓派默认没有硬盘外设,所以安装系统的方式和 x86 不太一样,没有使用启动盘引导安装的方式。官方页面上的介绍和安装说明非常详细,整个过程比安装 ArchLinux x86 要简单很多,不赘述。

配置 wifi 连接

这一块不太熟悉,花费的时间比较多,所以记录一下。

Arch Linux ARM 并没有使用 NetworkManager 来管理网络。(但是它提供了 netctl)

配置 wifi 鉴权

首先进入 archlinux wiki 输入关键词 wifi,看到 iw 和 iwconfig 后,一顿操作猛如虎,结果怎么都不知道如何输入wifi密码。翻了好多页面之后,终于还是在 wiki 中找到了说明WPA2 认证需要使用 wpa_supplicant 或者 iwd,ArchLinuxARM 中没有预装 iwd,那就只能 wpa_supplicant 走起了。(看 wiki 不仔细 ×1)

按照 archlinux wiki 中 wpa_supplicant 的说明,如果已经知道 wifi 接入点的 SSID 和密码,那么就可以直接使用如下命令生成配置:

wpa_passphrase MYSSID passphrase > /etc/wpa_supplicant/example.conf

配置启动时自动连接 wifi

按照此处的说明),只需要启用 wpa_supplicant 提供的 systemd service 文件即可,针对 wlan0:

systemctl enable --now wpa_supplicant@wlan0.service

咦,怎么没有起作用?

使用 systemctl status 查看 wpa_supplicant@wlan0.service,发现存在报错,无法找到 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf,原来 wpa_supplicant 的配置文件的名字也有约定。(看 wiki 不仔细 ×2)

重命名正确的配置文件名字后,服务正常启动,成功连接 wifi。

systemd-networkd 与 DHCP

对着这里照抄一份配置,/etc/systemd/network/wlan0.network:

[Match]
Name=wlan0

[Network]
DHCP=yes

然后重启 systemd-networkd.service。

如果同时启动 systemd-networkd 和 dhcpcd 服务,wlan0 上将会被分配两个 IP 地址,禁用其中一个 DHCP 配置就好。

wifi 配置总结

iw 系列命令用于无线适配器的硬件配置,包括网卡模式切换,发起附近热点扫描等。

wpa_supplicant 用于 WPA2/3 鉴权,当然它也提供发起附近热点扫描的命令。另外它也提供 systemd service 文件可以针对指定 interface 在启动时自动连接 wifi。wpa_supplicant 只负责鉴权,获取 IP 地址还是得靠 DHCP。

systemd-networkd 在启动时自动 up interface,但是鉴权还是得靠 wpa_supplicant。它提供 DHCP 配置项,并且与 dhcpcd 服务独立, 两个服务一起可能造成分配多个 IP。

systemd 全家桶

linux 网络配置套路太多,其实在写这篇文章的时候,才发现 Arch Linux ARM 有预装 netctl,也就是说可以使用 wifi-menu

累了,不如欣赏一下 systemd 全家桶的便利。

设定时区

timedatectl status
timedatectl list-timezones
timedatectl set-timezone Asia/Shanghai

设定 hostname

hostnamectl set-hostname <hostname> --transient --static --pretty

其他组件

systemd 全家桶成员:

  • systemd-udevd
  • systemd-journald
  • systemd-resolved
  • systemd-timesyncd
  • systemd-homed
  • systemd-userdbd
  • systemd-oomd

祝 systemd 早日一统江湖。:evil

阅读 2.1k
588 声望
6 粉丝
0 条评论
588 声望
6 粉丝
宣传栏