经典安装或树莓派上的 sys 模式

来自 Alpine Linux

本页介绍在 Raspberry Pi 上安装 Alpine Linux 的传统安装或 sys 模式。

推荐安装方法

  1. 创建基于 SD 卡的安装介质。
  2. 运行 setup-alpine 脚本直到基本配置的步骤 11(即 SSH)。不要跳过网络配置,因为完成 sys 模式安装必须要有互联网连接。
  3. 在“磁盘 & 安装”部分,按如下方式回答问题
    没有可用磁盘。尝试启动介质 /media/mmcblk0? (y/n) [n],更改默认选项并输入 y。
    您想使用哪个磁盘?(或输入“?”寻求帮助,或输入“none”)[none],根据显示的信息输入设备名称 mmcblk0。
    您想如何使用它?(“sys”、“data”、“crypt”、“lvm”或“?”寻求帮助)[?],输入 sys。
    警告:擦除上述磁盘并继续? (y/n) [n] 更改默认选项并输入 y 以继续安装。
  4. 安装结束时,您可以重启以启动新安装的 Alpine Linux 并进行进一步配置。

上述步骤在下面以屏幕截图形式显示以供参考。根据您的安装介质和 pi 型号的大小,信息可能会有所不同。

 Disk & Install
----------------
No disks available. Try boot media /media/mmcblk0? (y/n) [n]  y
 * WARNING: you are stopping a sysinit service
 * Caching service dependencies ...                                                                                                [ ok ]
 * Unmounting /.modloop ...                                                                                                        [ ok ]
Available disks are:
  mmcblk0	(64.1 GB  )

Which disk(s) would you like to use? (or '?' for help or 'none') [none]  mmcblk0

The following disk is selected:
  mmcblk0	(64.1 GB  )

How would you like to use it? ('sys', 'data', 'crypt', 'lvm' or '?' for help) [?]  sys
100% ████████████████████████████████████████████████████████████████████████████████████████████████████████████
/usr/sbin/update-raspberrypi-bootloader: WARNING: no kernel found

WARNING: The following disk(s) will be erased:
  mmcblk0	(64.1 GB  )

WARNING: Erase the above disk(s) and continue? (y/n) [n]  y
Partition #2 contains a ext4 signature.
Creating file systems...
mkfs.fat 4.2 (2021-01-31)
Installing system on /dev/mmcblk0p2:
100% ████████████████████████████████████████████████████████████████████████████████████████████████████████████
==> initramfs: creating /boot/initramfs-rpi for 6.12.8-0-rpi
/usr/sbin/update-raspberrypi-bootloader: INFO: replaced config.txt and saved config.txt.old
Configured kernel vmlinuz-rpi / initramfs-rpi

Installation is complete. Please reboot.

手动安装

以下步骤过去使用过。自 Alpine Linux v3.21 起不再需要。

在 8 GB(或更大)的 class 10 SD 卡上创建包含两个分区的 MBR 分区表

  • 第一个分区,fat32 类型,大小为 256MB。您可能需要设置 boot 和 lba 标志
  • 第二个分区,ext4 类型,占用介质上的剩余空间
  • 弹出并重新插入 SD 卡以确保识别所有分区。
  • 进入第一个分区 (fat32)。使用 tar 解压存档

    tar zxvf ~/Download/alpine-rpi-3.21.3-armhf.tar.gz

正确弹出 SD 卡。将其插入 Raspberry Pi。插入 USB 键盘以及 HDMI 和网线。通电。当命令提示符显示时,以 root 身份登录。(没有密码)

执行以下命令。确保有可用的互联网连接,否则设置 apk 镜像将失败。

setup-alpine 

设置键盘映射、时区、如何连接到网络(dhcp 是最佳方法),在 save config 和 save cache 时选择 none。

apk update

如果 SD 卡中的额外空间为空,则现在必须创建分区

apk add cfdisk e2fsprogs  # or the tool of your choice
cfdisk /dev/mmcblk0       # create the new partition with the free space
mkfs.ext4 /dev/mmcblk0p2  # create the ext4 filesystem in the new partition

Raspberry Pi 没有硬件时钟,因此请与 ntp 服务器同步

apk add chrony
service chronyd restart
警告: 2021 年 6 月 22 日 - Alpine 3.12.x 及更早版本中存在一个错误,会导致 setup-disk 在 Raspberry Pi 上的 ext4 挂载失败。解决方法在下面的说明中标记。
#12353


mount /dev/mmcblk0p2 /mnt             # The second partition, in ext4 format, where Alpine Linux is installing in sys mode
export FORCE_BOOTFS=1                 # work around for issue 12353
setup-disk -m sys /mnt
mount -o remount,rw /media/mmcblk0p1  # An update in the first partition is required for the next reboot.

运行 setup-disk 时,您可能会收到一些关于 syslinux 的警告。您可以安全地忽略它。

更新启动分区(保留 alpine-rpi* 镜像布局)

从这里,我们可以更新启动分区以保留 alpine-rpi* 镜像布局,或者保留系统分区/setup-alpine 的布局(见下一节)。我们只需要两者之一。而不是两者都用。

清理第一个分区中的 boot 文件夹以删除未使用的文件

rm -f /media/mmcblk0p1/boot/*  
cd /mnt       # We are in the second partition 
rm boot/boot  # Drop the unused symbolic link

将 Alpine Linux 的镜像和 initramfs 移动到正确的位置

mv boot/* /media/mmcblk0p1/boot/  
rm -Rf boot
mkdir media/mmcblk0p1   # It's the mount point for the first partition on the next reboot

执行以下操作时,不用担心错误

ln -s media/mmcblk0p1/boot boot

更新启动分区(保留系统分区/setup-alpine 布局)

事实证明,setup-alpine 创建的系统分区具有可用的启动布局。要保留此布局,请执行以下步骤,而不是上一章中的步骤。

清理 boot / 第一个分区以删除未使用的文件

rm -Rf /media/mmcblk0p1/*
cd /mnt       # We are in the second partition 
rm boot/boot  # Drop the unused symbolink link

将 setup-alpine 创建的 boot 文件夹移动到正确的位置

cd /media/mmcblk0p1
mkdir boot
cd /mnt
mv boot/* /media/mmcblk0p1/  
rm -Rf boot
mkdir media/mmcblk0p1   # It's the mount point for the first partition on the next reboot

执行以下操作时,不用担心错误

ln -s media/mmcblk0p1 boot

启动分区更新结束 - 两种情况都从这里继续

更新 /etc/fstab

echo "/dev/mmcblk0p1 /media/mmcblk0p1 vfat defaults 0 0" >> etc/fstab
sed -i '/cdrom/d' etc/fstab   # Of course, you don't have any cdrom or floppy on the Raspberry Pi
sed -i '/floppy/d' etc/fstab
cd /media/mmcblk0p1

如果您想激活 edge 仓库

sed -i '/edge/s/^#//' etc/apk/repositories   # But enable the repository for community if you want vim, mc, php, apache, nginx, etc.

对于下次启动,指示根文件系统位于第二个分区。如果 cmdline.txt 文件包含以 /root 开头的行,则使用 sed

sed -i 's/$/ root=\/dev\/mmcblk0p2 /' /media/mmcblk0p1/cmdline.txt  
reboot

这适用于 Raspberry Pi 3B1B,但如果您使用的是 1B 版本,则需要非常有耐心(几十分钟)。如果硬盘通过 usb 连接,您可以将上面的 /dev/mmcblk0p2 替换为 /dev/sda1,例如。

将无盘模式转换为 sys 模式

也可以将无盘安装切换到完全基于磁盘的安装。这尚未得到正式支持,但可以手动完成。这释放了原本根文件系统所需的全部内存,从而允许安装更多软件包。

将您的 SD 卡分成两个分区:上面描述的 FAT32 启动分区(在本例中为 mmcblk0p1),以及用于保存根文件系统的第二个分区(此处为 mmcblk0p2)。如上所述启动并配置您的无盘系统,然后创建根文件系统

apk add e2fsprogs mkfs.ext4 /dev/mmcblk0p2

现在通过挂载点进行磁盘安装。setup-disk 脚本会给出一些关于 syslinux/extlinux 的错误,但您可以忽略它们。Raspberry Pi 不需要它们来启动。

mkdir /stage mount /dev/mmcblk0p2 /stage setup-disk -o /media/mmcblk0p1/MYHOSTNAME.apkovl.tar.gz /stage # (忽略关于 syslinux/extlinux 的错误)

/stage/etc/fstab 中添加一行以再次挂载 Pi 的启动分区

/dev/mmcblk0p1 /media/mmcblk0p1 vfat defaults 0 0

现在向 Pi 的启动命令行添加 root=/dev/mmcblk0p2 参数,可以是 cmdline-rpi2.txtcmdline-rpi.txt,具体取决于型号

mount -o remount,rw /media/mmcblk0p1 sed -i '$ s/$/ root=\/dev\/mmcblk0p2/' /media/mmcblk0p1/cmdline-rpi2.txt

注意:当 Pi 启动时,/boot 的内容将被忽略。它将使用 FAT32 启动分区中的内核、initramfs 和 modloop 镜像。要更新内核、initfs 或模块,您需要手动(生成并)将它们复制到启动分区,或者您可以使用绑定挂载,在这种情况下,不需要手动将文件复制到启动分区。

echo /media/mmcblk0p1/boot /boot none defaults,bind 0 0 >> /etc/fstab

覆盖根文件系统

可以通过在 /boot/cmdline.txt 文件中添加选项 overlaytmpfs=yes 来启用覆盖根文件系统。这将导致底层的 SD 卡根文件系统以只读方式挂载,并使用覆盖的 tmpfs 进行修改,这些修改将在关机时丢弃。此选项将避免在 pi 上不断写入 SD 卡。

/boot/cmdline.txt 文件如下所示

/boot/cmdline.txt 的内容

root=UUID=afaa7f11-8191-4fbc-9e45-62113f61e1b4 modules=sd-mod,usb-storage,ext4 quiet rootfstype=ext4 overlaytmpfs=yes

以下输出显示了启用覆盖根文件系统时文件系统的挂载方式

# df -m

Filesystem           1M-blocks      Used Available Use% Mounted on
...
/dev/mmcblk0p2           59555       326     56172   1% /media/root-ro
root-tmpfs                 225        13       211   6% /media/root-rw
overlayfs                  225        13       211   6% /
...

# mount
...
/dev/mmcblk0p2 on /media/root-ro type ext4 (ro,relatime)
root-tmpfs on /media/root-rw type tmpfs (rw,relatime,mode=755)
overlayfs on / type overlay (rw,relatime,lowerdir=/media/root-ro,upperdir=/media/root-rw/root,workdir=/media/root-rw/work,uuid=on)
...

/boot/cmdline.txt 文件中使用切换脚本删除并重新添加 overlaytmpfs=yes 选项将允许在 pi 上轻松维护,并且可以轻松添加/删除任何软件/配置。

另请参阅