Raspberry Pi
本页介绍如何在 Raspberry Pi 上安装和使用 Alpine Linux。
对于设置后预计磁盘不会发生重大更改的场景(例如运行静态 HTTP 服务器),无盘模式是首选,因为从内存运行整个系统将提高性能(通过避免速度慢的 SD 卡)并延长 SD 卡寿命(通过减少对卡的写入,因为所有日志记录都将在 RAM 中进行)。使用 Alpine 本地备份 (lbu) 实用程序来安装软件包、保存本地文件和调整系统。
sys 模式安装更适用于以下用例
- 初始设置后磁盘将不断发生更改(例如,如果您希望人们登录并将文件保存到其主目录)
- 日志应在重启后保留
- 计划安装消耗空间超过 RAM 加载能力的软件包
- 计划安装内核模块(例如 ZFS)
兼容性列表
从 下载页面为您的设备选择镜像/文件时,请参考下表中的 Raspberry Pi 型号信息。在继续操作之前,验证下载的镜像。
Alpine Linux 硬件支持矩阵 | |||
架构 | 端口 | 描述 | 始于 |
---|---|---|---|
x86 | x86 | 32 位 i686 兼容(或更高版本)的 CPU,至少具有 CMOV 和 SSE2 | 全部 |
x86_64 | AMD64 兼容的 64 位 x86 指令集 | 全部 | |
ARM | armhf | 32 位 ARM,带硬浮点 ABI - 适用于 ARMv6 设备 - Raspberry Pi 1、Zero、ZeroW、cm1 (defconfig bcmrpi) | v3.0 |
armv7 | 32 位 ARM - 适用于 ARMv7 设备 - Raspberry Pi 2、3、3+、Zero2W、cm3、cm3+ (defconfig bcm2709) | v3.9 | |
aarch64 | 64 位 ARM - 适用于 ARMv8+ 设备 - Raspberry Pi 3、3+、4、400、Zero2W、cm3、cm3+、cm4、5 (defconfig bcm2711) | v3.5 | |
PowerPC | ppc64le | 64 位 PowerPC(小端序),主要用于 POWER8 和 POWER9 | v3.6 |
IBM System Z | s390x | IBM Z 大型机,特别是 IBM Z 和 IBM LinuxONE(z196 最低) | v3.6 |
RISC V | riscv64 | 64 位 RISC V | v3.20 |
LoongArch | loongarch64 | 64 位 LoongArch | v3.21 |
安装准备
Raspberry Pi Imager 工具
使用 Linux/macOS/Windows 上的 Raspberry Pi Imager 工具,只需点击几下即可轻松生成基于 SD 卡的安装介质。在 Alpine linux 中,安装 rpi-imager 软件包并启动该工具
rpi-imager
按照提示在 SD 卡上创建安装介质。使用此工具时,无需分区和格式化,因为该工具会完成所有操作并创建基于 SD 卡的安装介质。如果不需要进一步自定义,请继续 安装。
手动方法
或者,可以下载镜像,并按照以下步骤格式化和准备介质
- 下载适用于 Raspberry Pi 的 Alpine tarball。选择要下载的镜像/文件时,请使用上面的兼容性列表。
- 在您的 SD 卡上创建一个可引导的 FAT32 分区。 链接页面上关于分区和格式化的说明部分可以使用图形分区工具(如 gnome-disks)完成,只需确保分区类型为
W95 FAT32 (LBA)
。(当前类型可以在fdisk -l
输出的“类型”列中找到。)- 警告: 由于上游 错误,无法从卷标名称相同的子目录加载 kernel/initramfs。由于内核安装在 Alpine Linux 的
boot/
文件夹中,因此请勿为 fat32 分区使用标签boot
。
- 将 tarball 解压到可引导 FAT32 分区的根目录。
无头 Pi
要设置无头系统,可以将引导配置覆盖文件 headless.apkovl.tar.gz 添加到基于 SD 卡的安装介质中。要启用 wifi,请在安装介质中创建一个文件 wpa_supplicant.conf,如下所示
内容为 wpa_supplicant.conf
或者,使用 wpa_supplicant 软件包中的 wpa_passphrase
实用程序来创建上述文件 wpa_supplicant.conf 的加密版本,如下所示
wpa_passphrase 'mySSID' 'myPassPhrase' > wpa_supplicant.conf
并将其放在安装介质上。
通过上述设置,可以使用 ssh
远程执行后续安装步骤。
- 使用 nmap -v -sn 192.168.1.0/24 查找您的 Pi 的 IP 地址。
- 有关其他选项,请参阅 作者的网站。
自定义 config.txt
Raspberry Pi 设备使用名为 config.txt 的配置文件,而不是传统 PC 上的 BIOS。建议在启动分区上创建一个 usercfg.txt 文件来配置底层系统设置,因为 config.txt 可能会在引导加载程序/系统升级期间被替换:详细信息可以在 此处找到。但是,某些设置只能在 config.txt 中设置,并且在 usercfg.txt 中指定时无效(例如 gpu_mem
)。一些有趣的值包括
内容为 usercfg.txt
- 默认情况下,系统将使用旧版视频驱动程序:某些 选项 可用于调整显示模式(例如,如果在 Pi 启动后看到屏幕周围有黑边,您可以添加
disable_overscan=1
)。或者,可以使用 Linux DRM-KMS 驱动程序(见下文)。 - 如果您计划安装在带有 I/O 板的 Pi Computer Module 4 上,您可能需要添加:
otg_mode=1
- Pi Zero 可以配置为简单的 USB 串行小工具或以太网小工具网络,并与其他计算机共享其互联网连接。
- 对于无头使用,请使用以下参数来最大化可用内存(rpi 引导加载程序需要 32MB):
gpu_mem=32
安装
按照以下步骤在 无盘模式下安装 Alpine Linux
- 将 SD 卡插入 Raspberry Pi 并接通电源
- 以 root 身份登录到 Alpine 系统。密码留空。
- 通过发出
date
检查当前日期和时间。如有必要,通过发出date -s YYYYMMDDhhmm
进行更正。 - 键入
setup-alpine
- 安装完成后,通过键入
lbu commit -d
提交更改
键入 reboot
以验证安装是否确实成功。
安装后
更新系统
安装后,请确保您的系统是最新的
apk update apk upgrade
不要忘记保存更改
lbu commit -d
注意:这不会升级内核。为了升级内核,必须执行 Alpine Linux 版本的完整升级,如 升级可移动介质(如 CF/USB)上的 Alpine Linux 中所述。
Linux 内核图形模式
默认情况下,系统配置将使用旧版视频驱动程序:此驱动程序存在一些限制并且缺乏支持。
建议通过将以下内容添加到 usercfg.txt 来启用 Linux DRM-KMS 驱动程序
# Enable DRM VC4 V3D driver dtoverlay=vc4-kms-v3d max_framebuffers=2 # Don't have the firmware create an initial video= setting in cmdline.txt. # Use the kernel's default instead. disable_fw_kms_setup=1
注意:此覆盖禁用旧版视频 选项。
安装 Mesa 驱动程序(Pi4 和 Pi5)
apk add mesa-dri-gallium
然后重启
lbu_commit -d; reboot
无线驱动
从 Alpine 3.17 开始,Wifi 和蓝牙驱动程序在安装镜像中可用:它们是 linux-firmware-brcm
(和链接的依赖项)的一部分。自内核 6.1.25(即 Alpine 3.18)以来,板载蓝牙默认启用和自动探测。可以通过设置 krnbt 关闭来禁用它)。
Picam
- 升级到 edge 版本,因为 v3.21 尚不支持 rpicam-apps 软件包。
- 将 eudev 设置为设备管理器
# setup-devd udev
- 将
camera_auto_detect=1
选项添加到用户配置文件 /boot/usercfg.txt - 安装 rpicam-apps 软件包,该软件包在 testing 存储库中可用。
- 由于错误 #16911,每次重启后都按如下方式更改权限
$ doas chmod 666 /dev/dma_heap/*
- 通过以下命令测试 picam
$ libcamera-hello --list-cameras
持久存储
参考 将无盘模式转换为 sys 模式 选项以切换到完全基于磁盘的安装。
带有 overlayfs 的环回镜像
当您以无盘模式安装 Alpine 时,整个系统会在启动时加载到内存中。如果您需要额外的存储空间(例如,如果您需要的空间超过 RAM 提供的空间),我们需要在安装了 overlayfs 的 SD 卡上创建环回存储。
首先,使 SD 卡再次可写,并更改 fstab 以始终这样做
mount /media/mmcblk0p1 -o rw,remount sed -i 's/vfat\ ro,/vfat\ rw,/' /etc/fstab
创建环回文件,此示例为 1 GB
dd if=/dev/zero of=/media/mmcblk0p1/persist.img bs=1024 count=0 seek=1048576
安装 ext4 实用程序
apk add e2fsprogs
格式化环回文件
mkfs.ext4 /media/mmcblk0p1/persist.img
挂载存储
echo "/media/mmcblk0p1/persist.img /media/persist ext4 rw,relatime,errors=remount-ro 0 0" >> /etc/fstab mkdir /media/persist mount -a
创建 overlay 文件夹,我们在此处使用 /usr 目录,但您可以使用 /home 或任何其他目录。
mkdir /media/persist/usr mkdir /media/persist/.work_usr echo "overlay /usr overlay lowerdir=/usr,upperdir=/media/persist/usr,workdir=/media/persist/.work_usr 0 0" >> /etc/fstab mount -a
您的 /etc/fstab 文件应如下所示
内容为 /etc/fstab
现在提交更改:(可以选择删除 e2fsprogs,但它确实包含修复工具)
lbu_commit -d
请记住,使用此设置,如果您安装了一些东西并且您已经为 /usr 完成了此 overlay,则您不得提交“apk add”,否则,当它启动时,它将尝试将其安装到内存中,而不是持久存储中。
如果您确实想在启动时安装一些小的东西,您可以使用 apk add
和 lbu commit -d
。
如果它稍微大一点,那么您可以使用 apk add
,但之后不要提交它。它将是持久的(在 /usr
中),但请务必检查您需要的所有内容都在该目录中,而不是在您未持久化的文件夹中。
网络启动
可以将 Raspberry Pi 4 引导加载程序配置为从网络启动 [1]。至少使用以下内容配置引导加载程序
BOOT_ORDER=0xf142 TFTP_PREFIX=1
并可选择
TFTP_IP=x.x.x.x
其中 x.x.x.x
是您的 TFTP 服务器的 IP 地址。
如果未在引导加载程序中配置 TFTP_IP
,则需要配置您的 DHCP 服务器以通告 TFTP 服务器 IP 地址。这因您的 DHCP 服务器而异;如果适用,请使用以下详细信息
- 供应商类别:
PXEClient:Arch:00000:UNDI:002001
- 文件名:
/
您的 TFTP 服务器需要托管的最小文件集是
bcm2711-rpi-4-b.dtb
(来自 raspberrypi/firmware/master/boot/bcm2711-rpi-4-b.dtb)cmdline.txt
(见下文)config.txt
(见下文)fixup4.dat
(来自 raspberrypi/firmware/master/boot/fixup4.dat,或者对于精简版本,使用fixup4cd.dat
)initramfs-rpi4
(来自 alpine/edge/releases/aarch64/netboot/initramfs-rpi4)start4.elf
(来自 raspberrypi/firmware/master/boot/start4.elf,或者对于精简版本,使用start4cd.elf
)vmlinuz-rpi4
(来自 alpine/edge/releases/aarch64/netboot/vmlinuz-rpi4)
config.txt
:
[pi4] kernel=vmlinuz-rpi4 initramfs initramfs-rpi4 arm_64bit=1
cmdline.txt
:
modules=loop,squashfs console=ttyAMA0,115200 ip=dhcp alpine_repo=http://dl-cdn.alpinelinux.org/alpine/edge/main modloop=http://dl-cdn.alpinelinux.org/alpine/edge/releases/aarch64/netboot/modloop-rpi4
与其使用上面的 http://dl-cdn.alpinelinux.org/alpine/edge/releases/aarch64/netboot/ 基本 URL,不如固定到特定的时间点。 Raspberry Pi 4 网络启动文件从 https://dl-cdn.alpinelinux.org/alpine/edge/releases/aarch64/netboot-20230329/ 开始提供。
通过以上配置,Raspberry Pi 4 应该能够从网络启动,而无需 SD 卡。
启用串口控制台
除了在 usercfg.txt 中设置 enable_uart=1
之外,内核命令行选项 console 需要在 cmdline.txt 中更改为 console=serial0,115200
。
从 Linux 桌面,使用如下命令连接到它
cu -l /dev/ttyUSB0 -s 115200
故障排除
来自 raspberrypi-utils-raspinfo 软件包的 raspinfo
实用程序可以用作诊断问题的第一步:它将生成一份基本的 Pi 系统配置的日志报告,并且经常用作在 Raspberry Pi 社区(论坛、Github 等)中提交问题或错误报告的参考。
启动后,您可能会发现可用的系统内存比您预期的要少。当前 Pi 启动需要至少 32MB 的 GPU 内存,除非您安装了精简的引导加载程序,在这种情况下您可以使用 16MB。但是,您可能会发现即使您将其配置为更少,如果启用音频或摄像头支持,仍然会使用更多的 GPU 内存。要了解您的系统实际是如何分配的,请使用来自 raspberrypi-utils-vcgencmd 软件包的 vcgencmd
实用程序,如下所示
# vcgencmd get_mem gpu # vcgencmd get_mem arm
以无头模式运行时启动时间过长
如果未连接外围设备,系统可能会长时间挂起,因为它尝试累积熵。
如果是这种情况,只需插入任何 USB 设备即可解决此问题,因为它会增加内核通过中断可用的熵量。
apk 指示 “设备上没有剩余空间”
请注意,某些 Raspberry Pi 型号(如 3A+)只有 512MB 的 RAM,这在全新的 Alpine 部署中只会为 tmpfs 根目录留下大约 200MB。在使用这些板时,重要的是要记住此限制。
在启动期间,您可能会注意到与硬件时钟相关的错误。许多 Raspberry Pi 没有硬件时钟,或者可能有一个没有电池的硬件时钟,在这种情况下,行为取决于您是否物理断电。
此外,setup-alpine
将使安装适应您使用的 Raspberry Pi 类型,这意味着例如,在 RPI5 上,您将看到 hwclock>
服务,而在 RPI4 上,它将使用 swclock
。如有疑问,请确保在目标硬件上进行安装。
如果您仍然遇到时钟错误,请将以下行添加到 /etc/chrony/chrony.conf
makestep 0.1 3
旧版本 Alpine 镜像的无线支持
在 Alpine 3.14 中,Raspberry Pi 的 WiFi 驱动程序已从 linux-firmware-brcm
移动到 linux-firmware-cypress
软件包(来源?)。由于镜像似乎是前者的过时版本,因此 Wi-Fi 在安装期间可以工作,但在首次更新后将会中断。使用以太网接口下载所需的软件包
apk add linux-firmware-cypress
然后重启。
如果您需要 Wi-Fi,您需要 下载 最新的 Broadcom 驱动程序到您的 SD 卡。(将 /mnt/sdcard 替换为正确的挂载点。)
git clone --depth 1 https://github.com/RPi-Distro/firmware-nonfree.git cp firmware-nonfree/brcm/* /mnt/sdcard/firmware/brcm
启动分区的 文件系统
如果您被困在可怕的彩虹屏幕上,并且绿色 LED 连续闪烁几次,请检查启动分区类型。
rpi2 要求启动分区为 fat32,而不是 fat16。使用 linux fdisk 将启动分区类型设置为 “c”(对于 fat32/lba),并按照建议设置分区的 lba 和 boot 标志。使用以下命令将启动分区文件系统创建为 fat32
mkdosfs -F 32 /dev/sdX1