InSnh-Gd

InSnh-Gd 的小空间

Void Linux 安装记

前言#

Void Linux 是一个极简的滚动发行版,但与其他滚动发行版不同,Void 具有比较好的稳定性,但软件可能就没那么新了。

Void Linux 是一个极为小众的 Linux 发行版,它也提供了相对于多数 Linux 发行版比较小众的 Musl libcrunit,这是 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 fdisk

步骤解析:

  1. 创建一个新的 GPT 分区表,并确认执行 (y)。

  2. 创建一个 ef02 标签的 2MB 的分区 /dev/sda1,使 Legacy Boot 可以识别并引导 GPT 硬盘上的 GRUB2。

  3. 创建一个 ef00 标签的 500MB 的分区 /dev/sda2,在 Legacy Boot 上仅作为 /boot 分区存放 GRUB2 引导程序和 Linux 内核,使用 UEFI 引导可以作为 /boot/efi 分区。

  4. 创建一个利用所有空闲空间的分区,作为 / 分区(根分区)/dev/sda3

  5. 写入到硬盘,并确认更改 (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 的双重作用,太强力。

参考资料#

ArchWiki - GRUB

Void Linux Handbook

musl libc

runit-- a UNIX init scheme with service supervision

Void Linux manpages

VoidLinux 中文网

此文由 Mix Space 同步更新至 xLog
原始链接为 https://blog.insnhgd.com/posts/build/1


Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.