参考
- 从零开始制作一个linux iso镜像 _
- 详解:把 Linux 系统做成 Livecd
- 从零制作 Ubuntu 20.04 LiveCD
- LiveCDCustomization(ubuntu官方文档)
- 从零开始制作 Ubuntu 22.04 Live CD
- Create a Custom Debian Live Environment (CD or USB)
方法一: live-build
这是debian官方的live镜像构建工具,此方法相对第二种更简单
- 安装:
apt install live-build
- 新建一个空文件夹,比如
liveb
,cd进去 - 进行配置:
lb config --mirror-binary https://mirrors.ustc.edu.cn/debian/ \ --mirror-binary-security https://mirrors.ustc.edu.cn/debian-security/ \ --mirror-bootstrap https://mirrors.ustc.edu.cn/debian/ \ --mirror-chroot-security https://mirrors.ustc.edu.cn/debian-security/ \ --distribution bookworm
这里的lb就是live-build的简写,这个命令使用了中科大的镜像,不使用镜像会很慢(此处镜像是一会使用lb build下载文件时的镜像),--distribution
指定了debian的版本,也可以选择bullseye等别的版本,我选了debian12 - 此时可以自定义软件包,在
liveb/config/package-lists/
下面新建文件:[随便命名].list.chroot
里面写上要装的软件包,比如:
vim
network-manager
htop
- 此方法构建的
liveb/chroot
目录,直接chroot进去会不能联网,要手动配置/etc/resolv.conf
,所以这里我直接在配置文件里写好要安装的软件包
- 在
liveb
中执行lb build
(需要root),一般十几分钟就会完成构建,成功的话有绿色提示,在liveb
根目录下有生成的iso文件,liveb/binary
下面有iso文件的内容 - 按照方法二第11步的方法新建分区,然后把binary下面的东西复制进去,就可以启动live系统了
方法二: 手动构建
此方法全程sudo su
执行即可,很多命令都要root权限
- apt安装
debootstrap squashfs-tools
,中间有其他需要的软件包我忘了是什么了,提示找不到命令自己安装一下即可 - 使用
debootstrap
构建基本根目录:
mkdir rootfs
debootstrap bookworm rootfs https://mirrors.ustc.edu.cn/debian/
此处的第一个参数是发行版,我仍然选择bookworm,第二个参数是文件夹,第三个是使用的镜像;大概需要10分钟下载完成,根目录约300MB
3. chroot rootfs
,这会切换根目录
ubuntu官方文档里提到了要mount一下设备文件,然后再chroot
,但是我测试发现不mount也没问题,命令如下:
mount --bind /sys ./rootfs/sys
mount --bind /proc ./rootfs/proc
mount --bind /dev/pts ./rootfs/dev/pts
卸载(离开chroot之后再卸载):
umount ./rootfs/sys
umount ./rootfs/proc
umount ./rootfs/dev/pts
- 为live系统安装内核,有很多方法,最简单的方法是直接
apt install linux-image-6.1.0-25-amd64
,但是我对内核有特殊要求,所以自己编译了,方法:debian内核编译手册,然后dpkg -i
安装编译好的文件 - 安装必要软件包:
live-boot live-boot-initramfs-tools
这两个软件包是必须的!没有将会无法启动live系统 - 自定义系统,自己想怎么搞都行,我的脚本:
apt update
echo -e "deb http://mirrors.ustc.edu.cn/debian bookworm main contrib non-free non-free-firmware\ndeb http://mirrors.ustc.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware\ndeb http://mirrors.ustc.edu.cn/debian bookworm-backports main contrib non-free non-free-firmware\ndeb http://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware" > /etc/apt/sources.list
apt install -y lightdm
apt install -y lxqt-core
apt install -y firefox-esr
apt install -y bash-completion vim sudo htop network-manager gparted mpv nm-tray firmware-linux firmware-iwlwifi rfkill pciutils
sed -i '/# enable bash completion in interactive shells/{n;N;N;N;N;N;N;s/^#//gm}' /etc/bash.bashrc
passwd -d root
apt upgrade -y
apt autoclean
我这里用了lxqt的桌面,有几个坑:
- lxqt-core软件包很小,但是不会自动安装显示管理器,所以要先装一个lightdm
- debootstrap构建的根目录很小,很多固件都没有,要联网需要安装
network-manager nm-tray firmware-iwlwifi rfkill
- 更新initrd:
update-initramfs -c -k all
必须执行,否则initrd会无法启动 - exit命令退出chroot
- 构建uefi引导:
dd if=/dev/zero of=vefi.img bs=1M count=32 # 创建虚拟硬盘
mkfs.vfat vefi.img # 在虚拟硬盘新建fat32文件系统
mkdir vefi-mnt
mount vefi.img vefi-mnt #挂载虚拟硬盘
mkdir vefi-mnt/boot
grub-install --boot-directory=vefi-mnt/boot --efi-directory=vefi-mnt --removable vefi.img #生成grub的bootx64.efi引导程序和grub.cfg
sed -i 's/^/# /' vefi-mnt/EFI/BOOT/grub.cfg
echo -e "menuentry \"Live system (amd64)\" {\n linux /live/vmlinuz boot=live\n initrd /live/initrd.img\n}" >> vefi-mnt/EFI/BOOT/grub.cfg # 配置grub
umount vefi.img # 卸载
grub-install这个命令默认选择本机的efi和boot目录,不要无参数执行,否则会更新本机的grub
10. 构建squashfs:mksquashfs rootfs/ filesystem.squashfs
这会在执行目录下生成filesystem.squashfs文件,live环境一般有manifest文件,但是我没加也成功了,具体怎么生成可以参考开头那几个链接
11. 创建启动u盘:确定自己的u盘已经是gpt分区表,不是的改一下,新建一个fat32分区,我的带lxqt桌面的live系统只有1.1g,分区新建4g应该是够的,这几步用windows的diskgenius操作就行,具体操作百度即可
12. 复制文件:我的u盘目录结构(注意是刚才新建的fat32分区),initrd.img和vmlinuz是rootfs/boot
下面的两个文件重命名复制来的(分别是初始文件系统和内核镜像):
main@n960kp:/media/main/linux-live$ ls -R
.:
EFI live
./EFI:
BOOT
./EFI/BOOT:
BOOTX64.CSV BOOTX64.EFI grub.cfg grubx64.efi mmx64.efi
./live:
filesystem.squashfs initrd.img vmlinuz
- EFI和boot文件夹在
vefi.img
虚拟硬盘里,挂载之后再复制到u盘里,不挂载看不到文件夹 live
这个文件夹名称不固定,但是要和grub.cfg里写的对应
- 完成,进入电脑bios启动吧
后记
- ubuntu那边有一个叫
cubic
的软件,应该比这种手动方法方便,但是debian好像没有 - 关于启动u盘,我只会做uefi启动的,bios启动的u盘制作应该更复杂;很多教程都要求烧写u盘,其实这对于uefi启动u盘不必要(bios启动有要求),新建分区把引导文件放进去即可,这样还可以制作多个启动选项的u盘
vefi-mnt/boot/grub
下面有x86_64-efi i386-efi
两个文件夹,下面文件很多,我也不知道有什么用,反正没复制他也能启动,u盘速度慢的可以不复制live-boot live-boot-initramfs-tools
两个软件包会修改initrd.img,使他可以在live环境中正常启动