前言#
Void Linux 是一个极简的滚动发行版,但与其他滚动发行版不同,Void 具有比较好的稳定性,但软件可能就没那么新了。
Void Linux 是一个极为小众的 Linux 发行版,它也提供了相对于多数 Linux 发行版比较小众的 Musl libc 和 runit,这是 Void Linux 的显著优势。
Musl 轻量快速,通常被认为比 glibc 更标准,更简单,对于开发人员来说,Musl 的源码优雅干净很多,对于用户来说,Musl 编译出来的包更小,非常适合追求极致精简高效的发行版。
相比与 Musl,还是 runit 更吸引我。我曾经是一个 Arch Linux 用户 ||(虽然我目前仍然在服务器上用)|| Arch Linux 上的一切都很好...... 除了 systemd,systemd 太 “重” 了,且做了太多 init 系统不该做的事情,背离了 UNIX 的哲学。而 runit 就轻量很多,代码库非常小,足够稳定,维护起来要方便多了。
Void Linux 的包管理器 xbps 从头开始设计,十分迅速,且提供了 xbps-src 构建器,可以使用 Linux 命名空间在容器中构建软件。
安装前的准备#
在下载镜像之前,我们可以选择一个更符合自己习惯的镜像,"base" 镜像不提供图形界面,就像 archiso 那样。与 Arch Linux 不同 Void Linux 是有 TUI 安装程序的,但我会更喜欢手动命令行安装,就像 Arch Linux 那样。musl 和 glibc 就看个人喜好吧,我希望我的系统能更加小巧,所以我选择 Musl
::: banner {warn}
Musl 并非完美。Musl 的标准化使运行的程序也需要遵守标准编写,否则可能在 Musl 下无法正常工作,如果你是一个 VIM 用户,Musl 下 VIM 无法正常显示中文。
详细内容 : https://wiki.musl-libc.org/functional-differences-from-glibc.html
:::
Void Linux 在国内仅有少数镜像源,您可以从以下链接下载 Void Linux 安装镜像。
清华源:https://mirrors.tuna.tsinghua.edu.cn/voidlinux/live/current
北外源:https://mirrors.bfsu.edu.cn/voidlinux/live/current
Fastly Global CDN : https://repo-fastly.voidlinux.org/live/current
供参考的下载链接 (musl base) : https://repo-fastly.voidlinux.org/live/current/void-live-x86_64-musl-20221001-base.iso
当然您也可以不使用 Void Linux 的 livecd,可以用 archiso 或其他发行版的 livecd 来进行安装,需要下载 Void 的 rootfs 解压到已经格式化的根分区上。
供参考的 rootfs 下载链接 (musl) : https://repo-fastly.voidlinux.org/live/current/void-x86_64-musl-ROOTFS-20221001.tar.xz
注意事项#
如果您是 N 卡用户,在 Void livecd 引导界面按 Tab,添加 nomodeset
内核参数,防止无法进入 tty。
如果您之前不是 runit 用户,对 Livecd 启动时陌生的启动流程不必感到疑惑,runit 的启动流程与 sysemd 等 init 系统不同。
Livecd 的 root 用户密码为 voidlinux,anon 用户的密码为 voidlinux。
安装#
进入 LiveCD 后,登入 root 用户。
Void Linux 默认镜像国内速度感人,我们首先更换 国内镜像源,我使用北外镜像源。
# mkdir -p /etc/xbps.d
# cp /usr/share/xbps.d/*-repository-*.conf /etc/xbps.d/
# sed -i 's|https://repo-default.voidlinux.org|https://mirrors.bfsu.edu.cn/voidlinux|g' /etc/xbps.d/*-repository-*.conf
接下来让 xbps 同步更改
# xbps-install -S
硬盘分区#
我使用一整块硬盘安装 Void Linux,当然也可以在现有系统的硬盘单独分区用于安装 Void Linux。
我习惯用 gptfdisk (以下简称为 gdisk) 工具对硬盘进行分区,首先需要在 LiveCD 上安装 gdisk
# xbps-install -Sy gptfdisk
使用 gdisk 进行分区:
步骤解析:
-
创建一个新的 GPT 分区表,并确认执行 (y)。
-
创建一个 ef02 标签的 2MB 的分区
/dev/sda1
,使 Legacy Boot 可以识别并引导 GPT 硬盘上的 GRUB2。 -
创建一个 ef00 标签的 500MB 的分区
/dev/sda2
,在 Legacy Boot 上仅作为/boot
分区存放 GRUB2 引导程序和 Linux 内核,使用 UEFI 引导可以作为/boot/efi
分区。 -
创建一个利用所有空闲空间的分区,作为
/
分区(根分区)/dev/sda3
。 -
写入到硬盘,并确认更改 (y)。
::: banner {info}
这里我的硬盘在系统中是 /dev/sda
,您需要将自己的实际情况替换掉我的硬盘和分区,您可以使用fdisk -l
命令查看,顺带一提这里我并没有使用 swap。
:::
准备文件系统#
我们的分区情况大概是一个额外分区,一个根分区和一个 boot 分区,我们需要格式化后面二者。
使用 mkfs.ext4
将 /dev/sda3
(根分区)格式化为 EXT4 分区。
# mkfs.ext4 /dev/sda3
使用 mkfs.vfat
将/dev/sda2
(boot 分区)格式化为 FAT32 分区。
# mkfs.vfat /dev/sda2
将上面的两个分区挂载分别挂载到 /
和/boot
# mount /dev/sda3 /mnt
# mount /dev/sda2 /mnt/boot --mkdir
基础系统安装#
我选择下载 rootfs 安装的方式,这同样适用于其他发行版的 LiveCD。
在 LiveCD 安装 wget
。
# xbps-install wget -y
下载 rootfs 包。
# wget https://repo-fastly.voidlinux.org/live/current/void-x86_64-musl-ROOTFS-20221001.tar.xz
使用 tar 将 rootfs 包解压到我们的根分区。
# tar -xvf void-x86_64-musl-ROOTFS-20221001.tar.xz -C /mnt
对于 Void LiveCD,可以直接使用 xchroot
工具自动进入 Chroot。
# xchroot /mnt /bin/sh
非 Void LiveCD 需要手动完成。
# mount -t proc none /mnt/proc
# mount -t sysfs none /mnt/sys
# mount --rbind /dev /mnt/dev
# mount --rbind /run /mnt/run
Void Linux 的 rootfs 包更新并不及时,其中的软件包通常是已经过时的,而且没有完整的base-system
包组。我们需要更新 rootfs 包现有软件包并安装base-system
包组。
# xbps-install -Su xbps
# xbps-install -u
# xbps-install base-system
# xbps-remove base-voidstrap
设置主机名,我这里设置为 "InSnh-Gd"。
# echo 'InSnh-Gd' > /etc/hostname
设置时区,对于 Void Linux,可以直接修改 rc.conf
,将 "TIMEZONE=" 的默认值改为 Asia/Shanghai
即可。
# 在/etc/rc.conf 下修改
TIMEZONE=Asia/Shanghai
如果使用 glibc 分支,需要编辑 /etc/default/libc-locales
,取消 "zh_CN.UTF-8" 一行的注释。
修改 root 密码并创建 wheel
组的用户,再使用 'visudo' 修改 /etc/sudoers,取消 "#% wheel ALL=(ALL) ALL" 一行的注释。
# passwd
# useradd -m -G wheel <user>
# visudo
配置 fstab,可以直接复制/proc/mounts
将当前挂载的文件系统参数写入/etc/fstab
# cp /proc/mounts
删除根分区 /
与 boot 分区 /boot
以外的行。如果你有创建 swap 分区那将 swap 一行保留。
最后的结果看起来大概像这样:
/dev/sda3 / ext4 rw,realtime 0 0
/dev/sda2 /boot vfat rw,realtime 0 0
配置网络#
我们还需要配置网络,可以安装 dhcpcd
用于自动配置网络,启用它的服务。
# xbps-install dhcpcd -y
# ln -s /etc/sv/dhcpcd /etc/runit/runsvdir/default/
我选择使用静态 IP,我认为如果网络管理器对你来说并不是强制性的需求(比如配置网桥等),你也可以像我一样直接使用 iproute2
工具配置一个固定 IP 而不去安装 NerworkManager
之类的管理程序,这样你的系统又能精简一点。为了实现开机自动配置网络,可以将命令写入 /etc/rc.local
如果不存在就创建它。
我习惯使用 ethX 形式的网卡名称,并使用 net.ifnames=0
内核参数将网卡名改为 eth0
,你需要根据自己的网卡名称修改命令,建议先运行 ip addr
命令查看自己的网卡名以及内网 IP 段,IP 建议写为 x.x.x.200~254 以防止 IP 冲突。
# echo "
ip addr add 192.168.2.200/16 dev eth0
ip route add default via 192.168.2.1" >> /etc/rc.local
安装引导程序 GRUB2#
使用 xbps-install
安装 GRUB2,使用 Legacy Boot(BIOS 系统)引导,安装 grub
包。
# xbps-install grub -y
使用 UEFI 引导,安装 grub-x86_64-efi
包
# xbps-install grub-x86_64-efi
我使用 Legacy Boot,所以只需要运行grub-install /dev/sda
。
如果你使用 UEFI 引导,则需要运行以下命令。特别需要注意自己的 boot 分区或者是 efi 分区的挂载点,如果你完全跟着我的步骤此时 boot 分区的挂载点为 /boot
,那么将 --efi-directory
的 /boot/efi
改为 /boot
。
# grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id="Void"
完成安装#
使用 xbps-reconfigure
确保所有安装了的软件包全部正确配置。
# xbps-reconfigure -fa
至此,我们已经获得了一个基本完整的 Void Linux,退出 chroot,重启电脑。
[xchroot /mnt]# exit
# umount -R /mnt
# shutdown -r now
说说我安装时的感受吧,虽然说我已经基本离开了 Arch Linux,但我安装 Linux 发行版的方式还是变成了 Arch Linux 的模样(呜,还是忘不掉 Arch)。从安装过程中可以足以看出 Void Linux 的精简,xbps 包管理的强大,还有干人事的 runit!!!它真的只是作为 init 系统和 supervision,这么好的东西为什么没多少人用呢,难道人们宁愿用 sh*t 山一般的 systemd,也不愿用其他人不用的 runit 吗,还是咱太极端了,太守旧了。
Void Linux 安装完大小比 Arch Linux 安装大致同数量的包还要少 100MB 左右,这波啊,这波是 Void Linux 精确拆包和 Musl 的双重作用,太强力。
参考资料#
runit-- a UNIX init scheme with service supervision
此文由 Mix Space 同步更新至 xLog
原始链接为 https://blog.insnhgd.com/posts/build/1