通过 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_64
、x86_64-musl
、i686
或者 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
中代表 proc
、sys
、devtmpfs
、pts
的行。.
分别用对应的 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-efi
或 grub-i386-efi
或 grub-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 系统后,更新系统。