Ubuntu From Scratch (UFS) 严格来说并不是一个像 Linux From Scratch (LFS) 那样官方、标准化的项目。LFS 是教你从源码编译一个 Linux 系统,而 Ubuntu 的核心是基于 Debian 的预编译包。
因此,“定制 Ubuntu From Scratch” 通常有两种含义:
以下是这两种方法的详细指南:
这种方法是在你现有的 Linux 系统里,利用 debootstrap 工具从零开始安装一个 Ubuntu 的基础文件系统。
适用场景:制作容器基础镜像、极简系统、理解 Ubuntu 的目录结构。
你需要一个正在运行的 Linux 系统(可以是 Ubuntu 或 Debian)。
sudo apt update
sudo apt install debootstrap schroot
假设我们要构建一个 Ubuntu 22.04 (Jammy) 的 amd64 架构系统,放在 /mnt/ubuntu-base 目录下。
# 创建目标目录
sudo mkdir -p /mnt/ubuntu-base
# 运行 debootstrap
# 格式: sudo debootstrap <版本代号> <目标目录> <镜像源>
sudo debootstrap jammy /mnt/ubuntu-base http://archive.ubuntu.com/ubuntu
这个过程会下载 Ubuntu 的最小必要文件(大约 200-300MB)。
现在你已经有了一个 Ubuntu 的骨架,进入它进行配置:
# 挂载必要的虚拟文件系统
sudo mount --bind /dev /mnt/ubuntu-base/dev
sudo mount --bind /proc /mnt/ubuntu-base/proc
sudo mount --bind /sys /mnt/ubuntu-base/sys
# 切换根目录到新系统
sudo chroot /mnt/ubuntu-base
现在你已经在“新系统”里了(提示符可能会变)。
设置语言和时区:
apt update
apt install locales
dpkg-reconfigure locales # 选择 en_US.UTF-8 或 zh_CN.UTF-8
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
设置主机名:
echo "my-custom-ubuntu" > /etc/hostname
设置 root 密码(非常重要,否则可能无法登录):
passwd
安装内核和引导程序(如果你想把它做成实体机系统):
apt install linux-image-generic grub-pc
注意:如果你只是做实验,可以不装内核。
安装网络工具:
apt install network-manager systemd networkd
# 在 chroot 内输入 exit
exit
# 卸载挂载
sudo umount /mnt/ubuntu-base/dev
sudo umount /mnt/ubuntu-base/proc
sudo umount /mnt/ubuntu-base/sys
现在 /mnt/ubuntu-base 就是一个定制的 Ubuntu 基础系统。你可以把它打包成 tar 包,或者制作成 Live CD。
如果你是想做一个安装盘,里面预装了 Chrome、WPS、特定驱动,或者删除了 Snap,这是最推荐的方法。
工具推荐:Cubic (Custom Ubuntu ISO Creator)。这是目前最简单、最强大的图形化工具。
sudo apt-add-repository ppa:cubic-wizard/release
sudo apt update
sudo apt install cubic
在这个终端里,你可以像在真实的 Ubuntu 系统里一样操作:
apt remove thunderbird snapdapt install vim git curl/etc/default/grub,或者放入你的脚本到 /etc/init.d/。apt clean 和 apt autoremove。配置完成后,点击 “Next” 直到生成 ISO。Cubic 会生成一个 .iso 文件,你可以拿去虚拟机或实体机安装。
Ubuntu 官方其实提供了一个叫 “Ubuntu Base” 的极小镜像(类似 Core 版),专门给开发者做定制。
ubuntu-base-22.04-base-amd64.tar.gz。chroot 进行配置(类似于方法一,但比 debootstrap 手动一点)。| 你的需求 | 推荐方案 |
|---|---|
| 我想学习 Linux 底层原理,从源码编译 | 请直接去学 Linux From Scratch (LFS),不要折腾 Ubuntu。 |
| 我想做一个极其精简的 Ubuntu 容器或系统 | 使用 方法一 (Debootstrap)。 |
| 我想做一个安装盘,装完就有我常用的软件 | 使用 方法二 (Cubic),这是最省事且效果最好的。 |
| 我想做嵌入式开发或 IoT 设备 | 使用 方法三 (Ubuntu Base)。 |
警告:如果你从未接触过 Linux 系统管理,直接尝试“从零构建”可能会非常困难(涉及分区、fstab、内核编译、grub 引导修复等)。建议先在虚拟机里尝试。