搭建“Ubuntu From Scratch”(通常指从零开始构建或定制 Ubuntu 系统)有几种不同的理解方式。最常见的是指 构建 Ubuntu 的 Live CD/安装镜像,或者像 Linux From Scratch (LFS) 那样从源码编译一个类 Ubuntu 系统。
由于 Ubuntu 基于 Debian,且拥有庞大的二进制包仓库,完全从源码编译(LFS 方式) 通常是不切实际的。最实用、最接近“From Scratch”的方法是使用 debootstrap 构建一个最小化的 Ubuntu 基础系统(Rootfs),然后按需定制。
以下是基于 debootstrap 的详细步骤,这是最标准、最专业的 Ubuntu 定制方法。
debootstrap 构建最小化 Ubuntu(推荐)这种方法可以让你在一个目录中生成一个完整的、可启动的 Ubuntu 文件系统。
你需要一个已经安装好的 Linux 系统(可以是 Ubuntu、Debian 或其他发行版)作为“宿主系统”。
# 更新软件源并安装必要工具
sudo apt update
sudo apt install debootstrap squashfs-tools xorriso isolinux syslinux-efi grub-pc-bin grub-efi-amd64-bin mtools
创建一个目录来存放新的系统文件。
# 创建一个工作目录
mkdir ~/ubuntu-from-scratch
cd ~/ubuntu-from-scratch
# 使用 debootstrap 拉取 Ubuntu 基础包
# 参数说明: jammy (22.04版本代号) 或 noble (24.04)
# 后面的 URL 是 Ubuntu 官方源
sudo debootstrap --arch=amd64 jammy ./chroot http://archive.ubuntu.com/ubuntu/
这个过程会下载几百MB的基础包并解压到 ./chroot 目录。
现在你需要进入这个“半成品”系统,像配置普通 Ubuntu 一样安装软件。
# 挂载必要的虚拟文件系统(让新系统能访问网络、进程信息等)
sudo mount --bind /dev ./chroot/dev
sudo mount --bind /dev/pts ./chroot/dev/pts
sudo mount --bind /proc ./chroot/proc
sudo mount --bind /sys ./chroot/sys
# 进入新系统
sudo chroot ./chroot
在 Chroot 环境内部:
# 1. 设置基本配置
export HOME=/root
export LC_ALL=C
# 2. 设置主机名
echo "my-custom-ubuntu" > /etc/hostname
# 3. 配置网络(DHCP)
echo "auto lo" >> /etc/network/interfaces
echo "iface lo inet loopback" >> /etc/network/interfaces
echo "auto eth0" >> /etc/network/interfaces
echo "iface eth0 inet dhcp" >> /etc/network/interfaces
# 4. 配置 APT 源(根据你构建的版本修改 jammy)
cat <<EOF > /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
EOF
# 5. 更新并安装你想要的软件(例如:内核、桌面环境、工具)
apt update
apt install -y linux-image-generic ubuntu-minimal vim bash-completion network-manager
# 如果你想要图形界面(这会很大):
# apt install -y ubuntu-desktop
# 6. 设置 root 密码
passwd
# 7. 清理缓存(减小体积)
apt clean
rm -rf /var/lib/apt/lists/*
# 8. 退出 chroot
exit
回到宿主系统后,卸载之前挂载的设备。
sudo umount ./chroot/dev/pts
sudo umount ./chroot/dev
sudo umount ./chroot/proc
sudo umount ./chroot/sys
如果你只是想得到一个文件夹,到这里就结束了。如果你想把它做成 ISO 或 USB 启动盘,还需要进一步处理(打包成 SquashFS 并制作引导)。
如果你真的想从源码编译每一个包(像 LFS 那样),而不是用 apt install,那将是一个长达数周的工程。Ubuntu 的包管理依赖非常复杂(Glibc, GCC, Perl, Python 等互相依赖),手动编译极其困难。
为什么不推荐在 Ubuntu 上做 LFS? LFS 的目标是理解 Linux 组件如何工作。而 Ubuntu 的目标是易用性。如果你编译了所有东西,实际上你就不再是 Ubuntu 了,而是一个你自己命名的发行版。
如果你坚持要手动编译,请遵循 Linux From Scratch 官网 的指南,但你需要手动下载 Ubuntu 对应的源码包版本(而不是 LFS 书里推荐的版本),这非常痛苦。
如果你只是想修改官方的 Ubuntu ISO(比如预装几个软件,去掉一些软件),不需要“From Scratch”,而是“Remastering”。
推荐使用 Cubic (Custom Ubuntu ISO Creator)。
sudo add-apt-repository ppa:cubic-wizard/release
sudo apt update
sudo apt install cubic
apt install 任何东西。| 需求 | 推荐方案 |
|---|---|
| 学习 Ubuntu 内部结构 | 方法一 (debootstrap)。这是最标准的“构建”方式。 |
| 制作自己的发行版 | 方法一 (debootstrap) + 制作 Live CD 引导。 |
| 修改官方 ISO | 方法三 (Cubic)。最简单,有图形界面。 |
| 从源码编译一切 | Linux From Scratch (LFS)。但这不再是 Ubuntu,且难度极大。 |
建议: 从 方法一 开始,尝试构建一个最小化的 Ubuntu 系统,并成功 chroot 进去,这是理解 Linux 系统构成的最佳实践。