简体中文 繁體中文 English 日本語 Deutsch 한국 사람 بالعربية TÜRKÇE português คนไทย Français

站内搜索

搜索

活动公告

11-02 12:46
10-23 09:32
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,将及时处理!
10-23 09:31
10-23 09:28
通知:签到时间调整为每日4:00(东八区)
10-23 09:26

Void Linux源码编译完全指南从零开始构建专属轻量高效系统

3万

主题

423

科技点

3万

积分

大区版主

木柜子打湿

积分
31916

三倍冰淇淋无人之境【一阶】财Doro小樱(小丑装)立华奏以外的星空【二阶】⑨的冰沙

发表于 2025-9-29 00:20:01 | 显示全部楼层 |阅读模式 [标记阅至此楼]

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. Void Linux简介

Void Linux是一个独立的、滚动发布的Linux发行版,它以简洁、高效和稳定而著称。与其他主流发行版不同,Void Linux使用runit作为初始化系统,而不是systemd,这使得系统更加轻量和快速。Void Linux还采用XBPS作为其包管理系统,这是一个快速、高效的二进制包管理器。

通过从源码编译Void Linux,您可以:

• 完全控制系统中包含的组件
• 针对特定硬件优化系统性能
• 移除不必要的功能,减少系统资源占用
• 深入了解Linux系统的内部工作原理

2. 准备工作

2.1 硬件要求

在开始之前,请确保您的系统满足以下基本要求:

• CPU:支持64位架构(x86_64)的现代处理器
• 内存:至少8GB RAM(编译过程内存消耗较大)
• 存储:至少50GB可用空间(用于存放源码和编译产物)
• 网络:稳定的互联网连接(用于下载源码和依赖)

2.2 宿主系统准备

您可以使用现有的Linux发行版作为宿主系统来编译Void Linux。推荐使用轻量级的发行版,如Arch Linux、Gentoo或已经安装好的Void Linux。

首先,更新您的系统并安装必要的编译工具:
  1. # 在基于Debian/Ubuntu的系统上
  2. sudo apt update
  3. sudo apt upgrade -y
  4. sudo apt install -y build-essential git wget curl xz-utils file bc libssl-dev kmod cpio
  5. # 在基于Arch Linux的系统上
  6. sudo pacman -Syu
  7. sudo pacman -S base-devel git wget curl xz file bc openssl kmod cpio
  8. # 在Void Linux上
  9. sudo xbps-install -Su
  10. sudo xbps-install -S base-devel git wget curl xz file bc openssl kmod cpio
复制代码

2.3 下载Void Linux源码

创建一个工作目录并克隆Void Linux的源码仓库:
  1. mkdir -p ~/void-build
  2. cd ~/void-build
  3. git clone https://github.com/void-linux/void-packages.git
  4. cd void-packages
复制代码

更新仓库并获取最新的包定义:
  1. ./xbps-src binary-bootstrap
复制代码

3. 构建交叉编译工具链

为了编译Void Linux,我们需要先构建一个交叉编译工具链。这将允许我们在宿主系统上为目标架构生成代码。

3.1 设置目标架构

Void Linux支持多种架构,最常见的x86_64。确认您的目标架构:
  1. # 查看当前系统架构
  2. uname -m
复制代码

3.2 配置XBPS源码构建工具

编辑etc/conf文件,设置目标架构:
  1. cp etc/conf etc/conf.bak
  2. echo "XBPS_TARGET_ARCH=$ARCH" >> etc/conf
复制代码

其中$ARCH是您的目标架构,如x86_64。

3.3 构建交叉编译工具链

使用XBPS源码构建工具来构建交叉编译工具链:
  1. ./xbps-src bootstrap
复制代码

这个过程可能需要一些时间,因为它会下载并编译构建工具链所需的所有组件。

4. 编译Linux内核

Void Linux使用自定义的Linux内核,我们需要从源码编译它。

4.1 下载内核源码

首先,获取内核源码:
  1. ./xbps-src -a $ARCH fetch linux
复制代码

4.2 配置内核

提取内核源码并进入源码目录:
  1. ./xbps-src -a $ARCH extract linux
  2. cd masterdir/builddir/linux-*/
复制代码

使用默认配置作为起点:
  1. make ARCH=$ARCH defconfig
复制代码

接下来,您可以根据需要自定义内核配置:
  1. make ARCH=$ARCH menuconfig
复制代码

在menuconfig界面中,您可以:

• 启用或禁用特定驱动程序
• 选择合适的文件系统支持
• 优化内核参数以提高性能
• 移除不需要的功能以减小内核大小

配置完成后,保存并退出。

4.3 编译内核

开始编译内核:
  1. make ARCH=$ARCH -j$(nproc)
复制代码

-j$(nproc)参数会使用所有可用的CPU核心来加速编译过程。

编译完成后,安装内核模块:
  1. make ARCH=$ARCH modules_install INSTALL_MOD_PATH=../../
复制代码

4.4 打包内核

将内核和模块打包以便后续使用:
  1. cd ../../
  2. mkdir -p boot
  3. cp builddir/linux-*/arch/x86/boot/bzImage boot/vmlinuz-void
  4. tar -cJf kernel-modules.tar.xz lib/modules/
复制代码

5. 编译基础系统工具

Void Linux的基础系统包括一系列核心工具和库,我们需要从源码编译这些组件。

5.1 编译基础库和工具

首先,编译一些基础库和工具:
  1. cd ~/void-build/void-packages
  2. ./xbps-src -a $ARCH pkg glibc
  3. ./xbps-src -a $ARCH pkg zlib
  4. ./xbps-src -a $ARCH pkg xz
  5. ./xbps-src -a $ARCH pkg openssl
  6. ./xbps-src -a $ARCH pkg bash
  7. ./xbps-src -a $ARCH pkg coreutils
  8. ./xbps-src -a $ARCH pkg findutils
  9. ./xbps-src -a $ARCH pkg diffutils
  10. ./xbps-src -a $ARCH pkg awk
  11. ./xbps-src -a $ARCH pkg sed
  12. ./xbps-src -a $ARCH pkg grep
  13. ./xbps-src -a $ARCH pkg gawk
  14. ./xbps-src -a $ARCH pkg gzip
  15. ./xbps-src -a $ARCH pkg tar
  16. ./xbps-src -a $ARCH pkg bzip2
  17. ./xbps-src -a $ARCH pkg patch
  18. ./xbps-src -a $ARCH pkg make
  19. ./xbps-src -a $ARCH pkg gcc
  20. ./xbps-src -a $ARCH pkg binutils
复制代码

5.2 编译系统关键组件

接下来,编译系统的一些关键组件:
  1. ./xbps-src -a $ARCH pkg kmod
  2. ./xbps-src -a $ARCH pkg util-linux
  3. ./xbps-src -a $ARCH pkg e2fsprogs
  4. ./xbps-src -a $ARCH pkg kbd
  5. ./xbps-src -a $ARCH pkg procps-ng
  6. ./xbps-src -a $ARCH pkg shadow
  7. ./xbps-src -a $ARCH pkg runit
  8. ./xbps-src -a $ARCH pkg runit-void
复制代码

6. 构建Void Linux包管理系统

Void Linux使用XBPS作为其包管理系统,我们需要构建它。

6.1 编译XBPS
  1. ./xbps-src -a $ARCH pkg xbps
复制代码

6.2 设置XBPS仓库

创建一个本地仓库来存放我们编译的包:
  1. mkdir -p ~/void-build/repo
  2. cd ~/void-build/void-packages
  3. for pkg in hostdir/binpkgs/*.xbps; do
  4.     ln -sf "$pkg" ~/void-build/repo/
  5. done
  6. cd ~/void-build/repo
  7. xbps-rindex -a *.xbps
复制代码

7. 安装和配置基本系统

现在我们已经编译了所有必要的组件,可以开始安装和配置基本系统了。

7.1 准备根文件系统

创建一个目录作为新系统的根文件系统:
  1. mkdir -p ~/void-build/rootfs
  2. cd ~/void-build/rootfs
复制代码

7.2 安装基础系统

使用XBPS安装基础系统:
  1. XBPS_ARCH=$ARCH xbps-install -S -R ~/void-build/repo -r ~/void-build/rootfs base-system
复制代码

7.3 安装内核

将之前编译的内核安装到新系统中:
  1. cd ~/void-build/rootfs
  2. mkdir -p boot
  3. cp ../void-packages/masterdir/boot/vmlinuz-void boot/
  4. tar -xJf ../void-packages/masterdir/kernel-modules.tar.xz
复制代码

7.4 配置系统

进入新系统并开始配置:
  1. cd ~/void-build/rootfs
  2. mount -t proc proc proc/
  3. mount -t sysfs sys sys/
  4. mount -t devtmpfs devtmpfs dev/
  5. mount -t devpts devpts dev/pts
  6. chroot . /bin/bash
复制代码

现在您已经进入了新系统的chroot环境,可以开始配置系统:
  1. # 设置时区
  2. ln -sf /usr/share/zoneinfo/UTC /etc/localtime
  3. # 设置主机名
  4. echo "void-linux" > /etc/hostname
  5. # 配置网络
  6. cat > /etc/rc.conf << EOF
  7. HOSTNAME="void-linux"
  8. HARDWARECLOCK="UTC"
  9. TIMEZONE="UTC"
  10. KEYMAP="us"
  11. EOF
  12. # 创建fstab文件
  13. cat > /etc/fstab << EOF
  14. # <fs>                <mountpoint>        <type>                <opts>                <dump/pass>
  15. /dev/sda1        /boot                ext4                defaults        0 1
  16. /dev/sda2        /                ext4                defaults        0 1
  17. /dev/sda3        none                swap                sw                0 0
  18. proc                /proc                proc                defaults        0 0
  19. sysfs                /sys                sysfs                defaults        0 0
  20. EOF
  21. # 设置root密码
  22. passwd root
  23. # 创建用户
  24. useradd -m -G users,wheel -s /bin/bash void
  25. passwd void
复制代码

7.5 安装引导程序

安装GRUB引导程序:
  1. # 安装GRUB
  2. xbps-install -S grub
  3. # 安装GRUB到MBR
  4. grub-install /dev/sda
  5. # 生成GRUB配置文件
  6. grub-mkconfig -o /boot/grub/grub.cfg
复制代码

8. 优化系统性能

为了使系统更加轻量和高效,我们可以进行一些优化。

8.1 内核参数优化

编辑/etc/sysctl.conf文件,添加以下内容:
  1. # 网络优化
  2. net.core.rmem_max = 16777216
  3. net.core.wmem_max = 16777216
  4. net.ipv4.tcp_rmem = 4096 87380 16777216
  5. net.ipv4.tcp_wmem = 4096 65536 16777216
  6. net.ipv4.tcp_congestion_control = bbr
  7. # 文件系统优化
  8. vm.swappiness = 10
  9. vm.vfs_cache_pressure = 50
复制代码

8.2 服务优化

Void Linux使用runit作为初始化系统,可以通过禁用不必要的服务来优化系统:
  1. # 查看已启用的服务
  2. ls /etc/runit/runsvdir/current/
  3. # 禁用不必要的服务(示例)
  4. rm /etc/runit/runsvdir/default/sshd
  5. rm /etc/runit/runsvdir/default/crond
复制代码

8.3 编译优化

如果您希望进一步优化系统性能,可以重新编译一些关键组件,针对您的CPU进行特定优化:
  1. # 编辑common/environment/setup文件
  2. export CFLAGS="-march=native -O2 -pipe"
  3. export CXXFLAGS="${CFLAGS}"
  4. export LDFLAGS="-Wl,-O1,--sort-common,--as-needed"
  5. # 重新编译关键组件
  6. ./xbps-src -a $ARCH pkg glibc
  7. ./xbps-src -a $ARCH pkg gcc
  8. ./xbps-src -a $ARCH pkg binutils
  9. ./xbps-src -a $ARCH pkg linux
复制代码

9. 常见问题及解决方案

9.1 编译错误

在编译过程中,您可能会遇到各种错误。以下是一些常见问题及其解决方案:

问题1:依赖关系错误
  1. error: package 'foo' depends on 'bar', which is not installed
复制代码

解决方案:安装缺失的依赖包:
  1. ./xbps-src -a $ARCH pkg bar
复制代码

问题2:编译器错误
  1. error: 'SOME_MACRO' undeclared
复制代码

解决方案:这通常是由于头文件缺失或版本不匹配导致的。尝试更新相关包或检查编译选项。

问题3:链接错误
  1. undefined reference to 'some_function'
复制代码

解决方案:这通常是由于库文件缺失或版本不匹配导致的。尝试安装所需的开发包。

9.2 系统启动问题

问题1:内核恐慌
  1. Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
复制代码

解决方案:这通常是由于内核配置错误或initramfs问题导致的。检查内核配置并确保正确设置了根文件系统。

问题2:服务启动失败
  1. runsv: warning: unable to open supervise/ok: file does not exist
复制代码

解决方案:这通常是由于服务配置错误导致的。检查服务配置文件并确保所有依赖都已满足。

10. 总结

通过本指南,您已经学会了如何从源码编译Void Linux,并构建了一个轻量高效的专属系统。这个过程虽然复杂,但它提供了对系统的完全控制,使您能够根据自己的需求优化系统性能。

从源码编译Void Linux的主要优势包括:

• 完全控制系统中包含的组件
• 针对特定硬件优化系统性能
• 移除不必要的功能,减少系统资源占用
• 深入了解Linux系统的内部工作原理

希望本指南能够帮助您成功构建自己的Void Linux系统。如果您遇到任何问题,可以参考Void Linux的官方文档和社区支持资源。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

频道订阅

频道订阅

加入社群

加入社群

联系我们|TG频道|RSS

Powered by Pixtech

© 2025 Pixtech Team.