[other] 怎么制作Fedora Live
Tofloor
poster avatar
老实人6767
deepin
15 hours ago
Author
目前本人掌握的方法有两种,分享给大家:

一.lorax生成

lorax是红帽主导开发的RH系发行版生成工具,可以生成Fedora、RHEL、OpenEuler、Rocky等各种RH系发行版。

以下是利用lorax生成Fedora的方法:

  1. 我们需要一个Fedora环境。
  2. 打开终端,安装pykickstart和lorax
    sudo dnf install pykickstart lorax
  3. 去下载一份fedora的kickstart文件
    通过git:git clone https://pagure.io/fedora-kickstarts.git -b f43
    (为什么是43:Fedora在44时全面使用了其他工具,所以不再维护ks文件了;但是不要怕,只需要为releasever定义为最新版本即可)
  4. 通过pykickstart里的ksflatten工具合并一下ks文件。我这里以plasma为例,稍后利用生成的ks修改为cosmic的
    具体命令:ksflatten -c xxx -o xxx
    现在ks已经合并好了,让我们来修改吧!具体怎么修改,可以看看redhat等提供的相关文档
  5. 现在让我们来尝试生成吧!
    让我们来看看最少有哪些参数是我们所需要的:
    --make-iso:生成iso,不需要赋值
    --ks:定义ks,需要赋值,定义ks的路径
    --iso-name 生成的iso名字,需要赋值,只需要随便定义一个名字
    --resultdir 结果的输出目录,需要赋值 需要定义绝对路径,并且定义的文件夹原来是不存在的(不要自己手动生成文件夹,否则会报错)
    --image-size-align rootfs空间大小,需要赋值(这个为了防止rootfs过大)
    --no-virt 不用虚拟化软件,无需赋值
    --releasever 生成的系统的版本,需要赋值
    这里是我给出的示例: sudo livemedia-creator --make-iso --iso-name 1.iso --ks output.ks --resultdir /home/hank/Videos/test --no-virt --image-size-align=10240 --releasever 44

如果程序报错,直接按下ctrl+c退出。在再次运行工具之前,需要删除刚刚的文件夹
例如:出现2026-06-16 18:45:12,362: Running anaconda failed: process '['unshare', '--pid', '--kill-child', '--mount', '--propagation', 'unchanged', 'anaconda', '--kickstart', '/home/hank/output.ks', '--cmdline', '--dirinstall', '--remotelog', '127.0.0.1:48443']' exited with status 1 一类的话,这就说明这将会失败。

现在,只要ks配置无误,工具便会开始生成了:)(在配置的时候,可能会有与selinux相关的气泡产生,这是正常现象)

优点:傻瓜式 缺点:只能在RH系上制作、即将过时

二.利用一些工具手搓

方法:

1.创建文件夹

2.用dnf向文件夹里安装所需的包(必须安装:@core @anaconda-tools anaconda-install-env-deps dracut-live anaconda-live glibc-all-langpacks kernel-modules-extra kernel-modules livesys-scripts kernel),命令:dnf install 【包】-y --installroot 【文件夹的绝对路径】

3.把宿主系统的resolv.conf和dnf源移动到系统内,并挂载proc、tmp、sys、dev、run

4.依次向制作好的系统内运行以下命令:

systemctl enable livesys-late.service livesys.service tmp.mount (自启live组件、tmpfs)

/usr/bin/mandb(更新man手册的缓存)

rm -f chroot/var/lib/rpm/__db* chroot/core* chroot/var/lib/systemd/random-seed chroot/boot/-rescue chroot/etc/machine-id (删除无用文件)
touch chroot/etc/machine-id

cat >> chroot/etc/fstab << EOF
vartmp /var/tmp tmpfs defaults 0 0
EOF(挂tmp)

如果你还需要安装桌面,则需要运行:sed -i 's/^livesys_session=.*/livesys_session="【桌面】"/' chroot/etc/sysconfig/livesys

然后利用以下命令生成initrd:dracut -v --force --no-hostonly --no-hostonly-cmdline --add "dmsquash-live network-manager overlayfs" --kernel-cmdline "systemd.log_level=debug systemd.log_target=console rd.shell=0" --modules "bash systemd dracut-systemd i18n plymouth drm kernel-modules dmsquash-live network-manager overlayfs rootfs-block fs-lib" --install "/bin/mount /bin/umount /bin/journalctl" initrd.img --kver 【内核版本】

5.然后卸载rootfs系统的proc、tmp、sys、dev、run后制作squashfs

6.写grub配置文件

7.把grub配置文件移动到一个新的文件夹的boot/grub(或boot/grub2,取决于你的宿主机系统)文件夹,把squashfs移动到那个新的文件夹的新的LiveOS文件夹中,还得把你创建的新的initrd与rootfs系统的/boot的mlinuz文件移动到一个文件夹里,这个你就随意,名字合法即可

8。利用grub-mkrescue打包

以下是完整的命令:

#!/bin/bash

mkdir chroot

dnf install @core @anaconda-tools anaconda-install-env-deps dracut-live anaconda-live glibc-all-langpacks kernel-modules-extra kernel-modules livesys-scripts kernel -y --installroot $(realpath chroot)

mount --bind /run chroot/run
mount --bind /sys chroot/sys
mount --bind /tmp chroot/tmp
mount --bind /proc chroot/proc
mount --bind /dev chroot/dev
rm -r chroot/etc/resolv.conf
cp -r /etc/resolv.conf chroot/etc/resolv.conf
rm -r chroot/etc/yum.repos.d
cp -r /etc/yum.repos.d chroot/etc

chroot ./chroot dnf install plasma-desktop konsole dolphin plasma-discover plasma-camera gwenview kate vlc timeshift plasma-login-manager plasma-setup kde-l10n @guest-desktop-agents kcalc plymouth-theme-spinner plasma-nm fcitx5 kinfocenter -y
chroot ./chroot systemctl enable livesys-late.service livesys.service tmp.mount
chroot ./chroot /usr/bin/mandb
KERN_VER=$(ls -1 "chroot/lib/modules/" | head -1)
chroot ./chroot dracut -v --force --no-hostonly --no-hostonly-cmdline --add "dmsquash-live network-manager overlayfs" --kernel-cmdline "systemd.log_level=debug systemd.log_target=console rd.shell=0" --modules "bash systemd dracut-systemd i18n plymouth drm kernel-modules dmsquash-live network-manager overlayfs rootfs-block fs-lib" --install "/bin/mount /bin/umount /bin/journalctl" initrd.img --kver ${KERN_VER}
cat >> chroot/etc/locale.conf << "EOF"
LANG=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_MESSAGES=zh_CN.UTF-8
LC_CTYPE=zh_CN.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
EOF
source /etc/locale.conf
timedatectl set-timezone Asia/Shanghai
sudo localectl set-x11-keymap us,cn pc105 "" grp:win_space_toggle

cp -r include/* chroot/

umount -l chroot/tmp chroot/run chroot/sys chroot/proc chroot/dev chroot/sys

rm -f chroot/var/lib/rpm/__db* chroot/core* chroot/var/lib/systemd/random-seed chroot/boot/-rescue chroot/etc/machine-id
touch chroot/etc/machine-id
cat >> chroot/etc/fstab << EOF
vartmp /var/tmp tmpfs defaults 0 0
EOF
sed -i 's/^livesys_session=.*/livesys_session="kde"/' chroot/etc/sysconfig/livesys

mkdir iso
mkdir iso/{boot,LiveOS}
mv chroot/initrd.img iso/LiveOS
cp chroot/boot/vmlinuz* iso/LiveOS/vmlinuz
mkdir iso/boot/grub
cat >> iso/boot/grub/grub.cfg << EOF
set default="0"

function load_video {
insmod all_video
}

load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
insmod chain

set timeout=60

END /etc/grub.d/00_header

search --no-floppy --set=root -l 'NirvanaOS-53'

BEGIN /etc/grub.d/10_linux

menuentry 'Start NirvanaOS' --class fedora --class gnu-linux --class gnu --class os {
linux /LiveOS/vmlinuz root=live:CDLABEL=NirvanaOS-53 rd.live.image quiet rhgb selinux=0
initrd /LiveOS/initrd.img
}
menuentry 'Test this media & start NirvanaOS' --class fedora --class gnu-linux --class gnu --class os {
linux /LiveOS/vmlinuz root=live:CDLABEL=NirvanaOS-53 rd.live.image rd.live.check quiet selinux=0
initrd /LiveOS/initrd.img
}
menuentry 'Start NirvanaOS in basic graphics mode' --class fedora --class gnu-linux --class gnu --class os {
linux /LiveOS/vmlinuz root=live:CDLABEL=NirvanaOS-53 rd.live.image nomodeset vga=791 quiet rhgb selinux=0
initrd /LiveOS/initrd.img
}
EOF

umount -l chroot/tmp chroot/run chroot/sys chroot/proc chroot/dev chroot/sys
mksquashfs chroot squashfs.img -comp xz -Xbcj x86 -b 1M -noappend
mv squashfs.img ./iso/LiveOS
grub-mkrescue -o result.iso -V "NirvanaOS-53" iso -iso-level 3 -J -R

优点:不受发行版的约束,只要你的发行版能安装dnf、grub工具、squashfs工具等即可,并且自由度更高,你随时可以停止在某一步

缺点:复杂,对新手小白不友好

注:该方法还适用于打包虚拟机内的Fedora系统,从第4步骤开始即可,只不过你需要根据环境而变换

其他方法有kiwi、osbuild等,都是很高效的办法,可以自己研究

(因为步骤简单,所以我才不把某个发行版看作宝)

Reply Favorite View the author
All Replies
avatar
vbox
deepin
14 hours ago
#1

基本都是一样的原理
图片.png

Reply View the author
avatar
老实人6767
deepin
14 hours ago
#2
vbox

基本都是一样的原理
图片.png

是的,原理大差不差,用相似的原理同样可以作ArchLinux、Debian等

Reply View the author