Raspberry Pi

来自 Alpine Linux

本页介绍如何在 Raspberry Pi 上安装和使用 Alpine Linux。

对于设置后预计磁盘不会发生重大更改的场景(例如运行静态 HTTP 服务器),无盘模式是首选,因为从内存运行整个系统将提高性能(通过避免速度慢的 SD 卡)并延长 SD 卡寿命(通过减少对卡的写入,因为所有日志记录都将在 RAM 中进行)。使用 Alpine 本地备份 (lbu) 实用程序来安装软件包、保存本地文件和调整系统。

sys 模式安装更适用于以下用例

  • 初始设置后磁盘将不断发生更改(例如,如果您希望人们登录并将文件保存到其主目录)
  • 日志应在重启后保留
  • 计划安装消耗空间超过 RAM 加载能力的软件包
  • 计划安装内核模块(例如 ZFS)

兼容性列表

下载页面为您的设备选择镜像/文件时,请参考下表中的 Raspberry Pi 型号信息。在继续操作之前,验证下载的镜像。

Alpine Linux 硬件支持矩阵
架构 端口 描述 始于
x86 x86 32 位 i686 兼容(或更高版本)的 CPU,至少具有 CMOVSSE2 全部
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

country=FR network={ key_mgmt=WPA-PSK ssid="mySSID" psk="myPassPhrase" }

或者,使用 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

enable_uart=1 # 启用 UART 控制台: dtparam=audio=on # 启用音频
  • 默认情况下,系统将使用旧版视频驱动程序:某些 选项 可用于调整显示模式(例如,如果在 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

  1. 将 SD 卡插入 Raspberry Pi 并接通电源
  2. 以 root 身份登录到 Alpine 系统。密码留空。
  3. 通过发出 date 检查当前日期和时间。如有必要,通过发出 date -s YYYYMMDDhhmm 进行更正。
  4. 键入 setup-alpine
  5. 安装完成后,通过键入 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

注意: 以下使 picam 与 Pi Zero 2 W 型号配合使用的说明仅在 sys 模式下进行了测试。
  1. 升级到 edge 版本,因为 v3.21 尚不支持 rpicam-apps 软件包。
  2. 将 eudev 设置为设备管理器

    # setup-devd udev

  3. camera_auto_detect=1 选项添加到用户配置文件 /boot/usercfg.txt
  4. 安装 rpicam-apps 软件包,该软件包在 testing 存储库中可用。
  5. 由于错误 #16911,每次重启后都按如下方式更改权限

    $ doas chmod 666 /dev/dma_heap/*

  6. 通过以下命令测试 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 workdir 需要是与上层目录位于同一文件系统挂载点上的空目录。因此,每个 overlay 都必须使用自己的 workdir。

创建 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

/dev/cdrom /media/cdrom iso9660 noauto,ro 0 0 /dev/usbdisk /media/usb vfat noauto,ro 0 0 /dev/mmcblk0p1 /media/mmcblk0p1 vfat rw,relatime,fmask=0022,dmask=0022,errors=remount-ro 0 0 /media/mmcblk0p1/persist.img /media/persist ext4 rw,relatime,errors=remount-ro 0 0 overlay /usr overlay lowerdir=/usr,upperdir=/media/persist/usr,workdir=/media/persist/.work_usr 0 0

现在提交更改:(可以选择删除 e2fsprogs,但它确实包含修复工具)

lbu_commit -d

请记住,使用此设置,如果您安装了一些东西并且您已经为 /usr 完成了此 overlay,则您不得提交“apk add”,否则,当它启动时,它将尝试将其安装到内存中,而不是持久存储中。

如果您确实想在启动时安装一些小的东西,您可以使用 apk addlbu 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 服务器而异;如果适用,请使用以下详细信息

  1. 供应商类别:PXEClient:Arch:00000:UNDI:002001
  2. 文件名:/

您的 TFTP 服务器需要托管的最小文件集是

  1. bcm2711-rpi-4-b.dtb(来自 raspberrypi/firmware/master/boot/bcm2711-rpi-4-b.dtb
  2. cmdline.txt(见下文)
  3. config.txt(见下文)
  4. fixup4.dat(来自 raspberrypi/firmware/master/boot/fixup4.dat,或者对于精简版本,使用 fixup4cd.dat
  5. initramfs-rpi4(来自 alpine/edge/releases/aarch64/netboot/initramfs-rpi4
  6. start4.elf(来自 raspberrypi/firmware/master/boot/start4.elf,或者对于精简版本,使用 start4cd.elf
  7. 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),并按照建议设置分区的 lbaboot 标志。使用以下命令将启动分区文件系统创建为 fat32

mkdosfs -F 32 /dev/sdX1

参见