通过 chroot 安装(x86 / x86_64 / aarch64)

本指南详述了通过 chroot 在 x86、x86_64 或 aarch64 架构的平台上安装 Void 的过程。您不必很了解用 chroot 安装 Linux 的过程,但您应该对 Linux 操作系统足够熟悉。本指南可以用来指导一个“典型”的 Void 安装过程,使用一块 SATA / IDE / USB 磁盘上的一个分区。每个步骤都可以按需调整,比如开启全盘加密,使得安装过程不那么“典型”。

Void 提供两种安装方法:XBPS 方法在宿主系统上运行XBPS 包管理器,安装基础系统;ROOTFS 方法通过解压 ROOTFS 压缩包来安装基础系统。

XBPS 方法要求宿主系统上安装了 XBPS。宿主系统可以是已经安装好的 Void、一个官方 live 镜像或是安装了静态连接的 XBPS的任何 Linux。

ROOTFS 方法只要求宿主系统可以进入 Linux chroot,且安装了 tar(1)xz(1)。如果你要从其他发行版上安装 Void,推荐这个方法。

准备文件系统

硬盘分好区,并用 mke2fs(8)mkfs.xfs(8)mkfs.btrfs(8) 或其他文件系统必须的工具将分区格式化。

也可以用 mkfs.vfat(8) 创建 FAT32 分区。但是由于 FAT 文件系统的种种缺陷,只应该在没有其他选择时创建 FAT 分区(比如 EFI 系统分区)。

Live 镜像上可以使用 cfdisk(8)fdisk(8) 分区,但你可能会想用 gdisk(8)(在软件包 gptfdisk 中)或 parted(8)

对于 UEFI 引导系统,一定要创建 EFI 系统分区(ESP)。ESP 的分区类型应该是“EFI System”(代号 EF00),用 mkfs.vfat(8) 格式化为 FAT32 文件系统。

如果你不确定要创建什么分区,创建一个 1GB 的 “EFI System”(代号 EF00)分区,再用剩余的空间创建一个“Linux Filesystem”(代号 8300)分区。

分别把这两个分区格式化为 FAT32 和 ext4:

# mkfs.vfat /dev/sda1
# mkfs.ext4 /dev/sda2

创建新根分区并挂载文件系统

本指南假设新的根文件系统被挂载到 /mnt。你可能会想要将它挂载到其他地方。

如果使用 UEFI,将 EFI 系统分区挂载为 /mnt/boot/efi

例如,如果将 /dev/sda2 挂载为 //dev/sda1 是 EFI 系统分区:

# mount /dev/sda2 /mnt/
# mkdir -p /mnt/boot/efi/
# mount /dev/sda1 /mnt/boot/efi/

mkswap(8) 按需初始化交换空间。

基础系统安装

请选择两种方法之一,跟随对应小节的指导。

如果在 aarch64 平台上安装,除了 base-system,还必须安装一个内核软件包,比如 linux 是 Void 提供的最新稳定版本的内核软件包。

XBPS 方法

选择一个镜像,根据你想要安装的系统类型,选择合适的 URL。方便起见可以将这个 URL 保存为一个 shell 变量。比如,如果是安装一个 glibc 系统:

# REPO=https://repo-default.voidlinux.org/current

同时还需要告诉 XBPS 要安装的系统的架构。可用的选项有 PC 上的 x86_64x86_64-musli686 或者 aarch64。例如:

# ARCH=x86_64

这个架构必须与你当前的操作系统兼容,但不需要完全一致。如果你的宿主是 x86_64 操作系统,上述三种架构(无论 musl 还是 glibc)都可以安装,但 i686 宿主只能安装 i686 版本。

将 RSA 密钥从安装介质复制到要安装系统的目录。

# mkdir -p /mnt/var/db/xbps/keys
# cp /var/db/xbps/keys/* /mnt/var/db/xbps/keys/

xbps-install 安装 base-system 元软件包

# XBPS_ARCH=$ARCH xbps-install -S -r /mnt -R "$REPO" base-system

ROOTFS 方法

根据你要安装的架构,下载 ROOTFS 压缩包

解压压缩包到新设置的文件系统:

# tar xvf void-<...>-ROOTFS.tar.xz -C /mnt

配置

除了《安装基础系统(仅限 ROOTFS 方法)》一节,指南剩余的部分都适用于 XBPS 和 ROOTFS 两种方法。

进入 Chroot

xchroot(1) (来自 xtools) 可以用来设置和进入 chroot。另外,这也可以手动完成.。

# xchroot /mnt /bin/bash

安装基础系统(仅限 ROOTFS 方法)

因为 ROOTFS 镜像是其构建时的快照,其中的软件包一般都有所滞后,而且不包含完整的 base-system,需要更新包管理器并安装 base-system

[xchroot /mnt] # xbps-install -Su xbps
[xchroot /mnt] # xbps-install -u
[xchroot /mnt] # xbps-install base-system
[xchroot /mnt] # xbps-remove base-voidstrap

安装配置

locales. 在 /etc/hostname 中指定 hostname。检查一下 /etc/rc.conf 中的选项。如果安装 glibc 版本,编辑 /etc/default/libc-locales,按需取消掉 locale 前的注释

nvi(1) 在 chroot 中可用,但你此时可能希望安装您喜欢的文本编辑器

对于 glibc 构建,使用以下命令生成语言环境文件:

[xchroot /mnt] # xbps-reconfigure -f glibc-locales

设置 Root 密码

设置至少一个超级用户)。其他用户可以稍后配置,但必须设置一个 root 密码,或是设置一个有 sudo(8) 权限的新账户。

要设置 root 密码,请运行:

[xchroot /mnt] # passwd

配置 fstab

可以通过拷贝 /proc/mounts 文件,从当前已挂载的文件系统,自动生成 fstab(5) 文件:

[xchroot /mnt] # cp /proc/mounts /etc/fstab

删掉 /etc/fstab 中代表 procsysdevtmpfspts 的行。.

分别用对应的 UUID 代替 fstab 中的 /dev/sdXX/dev/nvmeXnYpZ 等文件系统名称。UUID 可以通过运行 blkid(8) 找到。用 UUID 定位文件系统,可以确保系统能找到文件系统;有时,同一个文件系统可能会被赋予不同的名称,比如从 USB 引导启动时,此时就很有必要用 UUID 定位文件系统。有时,除非物理增加或移除硬盘,硬盘总能被被赋予相同的名字,此时就没有必要使用 UUID 定位文件系统。但我们建议在 fstab 中,始终用 UUID 代替文件系统的名称定位文件系统。

配置 fsck(8) 的行为,把 / 一行末尾的 0 改为 1。把其他行末尾的 0 改为 2

比如,之前例子中的分区方案会产生这样的 fstab

/dev/sda1       /boot/efi   vfat    rw,relatime,[...]       0 0
/dev/sda2       /           ext4    rw,relatime             0 0

blkid 输出的信息,修改 /etc/fstab 为:

UUID=6914[...]  /boot/efi   vfat    rw,relatime,[...]       0 2
UUID=dc1b[...]  /           ext4    rw,relatime             0 1

注意,/proc/mounts 的输出结果每列之间只有一个空格。为了方便阅读,示例中的文本经过对齐处理。

增加一行,在内存中挂载 /tmp

tmpfs           /tmp        tmpfs   defaults,nosuid,nodev   0 0

如果要使用交换空间,增加 swap 分区:

UUID=1cb4[...]  swap        swap    rw,noatime,discard      0 0

安装 GRUB

grub-install 在引导磁盘上安装 GRUB。

在 BIOS 电脑上,安装软件包 grub。然后运行 grub-install /dev/sdX/dev/sdX 是你要安装 GRUB 的硬盘(不是分区),例如:

[xchroot /mnt] # xbps-install grub
[xchroot /mnt] # grub-install /dev/sda

在 UEFI 电脑上,根据你的架构,安装 grub-x86_64-efigrub-i386-efigrub-arm64-efi,然后运行 grub-install,可以指定一个引导器标签(手动选择引导设备时,你的电脑固件可能会使用这个标签):

[xchroot /mnt] # xbps-install grub-x86_64-efi
[xchroot /mnt] # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id="Void"

GRUB 安装疑难解答

如果不能使用 EFI 变量,执行 grub-install 命令时,增加 --no-nvram 选项。

在可移除介质上安装或不兼容的 UEFI 系统

并非所有系统都有标准完整的 UEFI 实现。某些情况下,有必要“糊弄”固件,让固件用默认备用地址引导启动。这种情况下,或是在可移除硬盘(比如 USB)上安装系统时,执行 grub-install 命令时,增加 --removable 选项。

另外,用 mkdir(1) 创建 /boot/efi/EFI/boot 目录,将安装好的 GRUB 可执行文件拷贝到新创建的目录中,GRUB 可执行文件一般在 /boot/efi/void/grubx64.efi(可执行文件的地址可以用 efibootmgr(8) 找到):

[xchroot /mnt] # mkdir -p /boot/efi/EFI/boot
[xchroot /mnt] # cp /boot/efi/EFI/Void/grubx64.efi /boot/efi/EFI/boot/bootx64.efi

善后

xbps-reconfigure(1) 确保所有安装的软件包都正确配置了:

[xchroot /mnt] # xbps-reconfigure -fa

这会使 dracut(8) 生成 initramfs,使 GRUB 生成配置。

至此,安装已经完成。退出 chroot 并重启电脑:

[xchroot /mnt] # exit
# umount -R /mnt
# shutdown -r now

首次引导进入 Void 系统后,更新系统