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


加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。