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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。