基于上游发行版制作你的 Linux 发行版 — live-build/archiso/livecd-tools 指南

六月 25, 2026 [linux] #linux #debian #archlinux #fedora #live-build #archiso #livecd-tools

为什么基于上游制作

自己从 LFS 构建系统不现实——没有包管理、没有软件仓库。绝大多数"小而美"的发行版(elementary OS、Kali Linux、PureOS)都是基于 Debian/Arch/Fedora 等上游发行版的软件源制作的。

三大上游各自提供了成熟的构建工具链:

上游工具知名下游发行版
Debianlive-buildKali Linux, elementary OS, PureOS
Arch LinuxarchisoManjaro, EndeavourOS, ArcoLinux
Fedoralivecd-toolsNobara, Ultramarine

下文以 Debian + live-build 为主线讲解实操,Arch 和 Fedora 的方案提要点。

live-build 快速上手(重点)

安装

sudo apt install live-build

三步构建一个默认 ISO

mkdir myos && cd myos

# 1. 生成配置骨架
lb config --distribution bookworm \
          --archive-areas "main contrib non-free non-free-firmware" \
          --mirror-binary https://mirrors.163.com/debian

# 2. 构建(需 root)
sudo lb build

# 3. 产物:live-image-amd64.hybrid.iso

lb build 按五个阶段顺序执行:

  1. bootstrap — debootstrap 构建基础 Debian 根文件系统
  2. chroot — 安装内核、软件包、执行 hook(大部分定制在此阶段)
  3. installer — (可选) 集成 Debian Installer
  4. binary — 打包为可引导 ISO
  5. source — (可选) 生成源码映像

auto 脚本:固化配置

每次敲长参数不现实,用 auto/ 目录下的脚本固化:

# auto/config
#!/bin/sh
set -e
lb config noauto \
    --architecture amd64 \
    --distribution bookworm \
    --debian-installer live \
    --debian-installer-gui true \
    --iso-application "MyOS" \
    --bootappend-live "boot=live components" \
    --mirror-binary https://mirrors.163.com/debian \
    "${@}"

# auto/build
#!/bin/sh
set -e
lb build noauto "${@}" 2>&1 | tee build.log

# auto/clean
#!/bin/sh
set -e
lb clean noauto "${@}"
rm -f build.log

之后只需 sudo lb config && sudo lb build。每次重新构建前先 sudo lb clean

定制软件包

官方仓库中的包 — 在 config/package-lists/ 下创建 .list.chroot 文件:

# config/package-lists/desktop.list.chroot
gnome-core
firefox-esr
git
build-essential

外部 deb 包(如 VSCode、Chrome)— 直接放到 config/packages.chroot/ 目录即可。

定制系统文件 & GNOME 配置

添加/替换文件 — 放到 config/includes.chroot_after_packages/,对应该 Live 系统的根目录 /

# 例如添加自定义配置
config/includes.chroot_after_packages/etc/NetworkManager/conf.d/dns.conf

GNOME 配置 — 通过 vendor override 文件覆盖 GSettings 默认值。放到 config/includes.chroot_after_packages/usr/share/glib-2.0/schemas/

# 20_myos-theme.gschema.override
[org.gnome.desktop.interface]
gtk-theme='Adwaita-dark'
icon-theme='Papirus'

[org.gnome.desktop.background]
picture-uri='file:///usr/share/backgrounds/myos/wallpaper.png'

关键一步:添加 hook 脚本重新编译 schemas:

# config/hooks/live/0100-compile-schemas.hook.chroot
#!/bin/sh
set -e
glib-compile-schemas /usr/share/glib-2.0/schemas/

Live 系统运行时配置

通过 live-config 配置文件设置主机名、语言、Live 用户等:

# config/includes.chroot_after_packages/etc/live/config.conf.d/myos.conf
LIVE_HOSTNAME="MyOS"
LIVE_LOCALES="zh_CN.UTF-8"
LIVE_TIMEZONE="Asia/Shanghai"
LIVE_USERNAME="liveuser"

定制引导界面

config/bootloaders/ 下覆盖默认配置:

调试技巧

# 缓存多阶段,避免重复构建
lb config --cache-stages "bootstrap,chroot"

# 启用调试输出
lb config --debug

Arch Linux:archiso

Arch 的构建工具为 archiso,核心是通过 mkarchiso 命令构建 ISO。配置文件在 profiledef.sh 中定义基础包和引导参数,在 packages.x86_64 列表中指定需要安装的包。

# 安装
sudo pacman -S archiso

# 复制官方 releng 配置作为基础
cp -r /usr/share/archiso/configs/releng ./myarch

# 编辑 packages.x86_64 添加自定义包,然后构建
sudo mkarchiso -v -w /tmp/archiso-tmp -o ./out ./myarch

与 live-build 类似,archiso 通过 airootfs/ 目录覆盖文件、通过 profiledef.sh 中的 customize_airootfs() 函数执行 hook 操作。

Fedora:livecd-tools

Fedora 使用 livecd-tools(基于 kickstart),通过 .ks 配置文件声明式地定义要安装的包和要执行的脚本。

sudo dnf install livecd-tools

# 编写 kickstart 文件 myos.ks,然后构建
sudo livecd-creator -c myos.ks -f MyOS --cache /var/cache/live

小结

特性live-build (Debian)archiso (Arch)livecd-tools (Fedora)
配置方式auto 脚本 + config 目录profiledef.sh + 包列表kickstart .ks 文件
包管理APT + deb 文件pacmanDNF
引导ISOLINUX + GRUBsystemd-boot + GRUBGRUB
学习曲线中等,目录结构清晰较简单,配置集中简单,声明式

三者的共同思路:选择包列表 → 通过 hook 定制文件/配置 → 打包 ISO。选哪个取决于你熟悉的上游发行版——你用什么系统,就用它的工具链打包。