Debian制作LiveCD

制作前安装软件

1
2
3
4
5
6
7
8
9
# 在构建主机上安装如下软件
sudo apt install debootstrap squashfs-tools linux-image-amd64 live-boot grub-efi

# 上述软件提供的功能或作用
debootstrap # 获取Debian的根文件系统
squashfs-tools # 压缩及解压squashfs文件
linux-image-amd64 # 提供所需内核文件
live-boot # 生成支持LiveCD的initramfs
grub-efi # 提供EFI的启动引导

配置启动的环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 获取根文件系统
sudo su
ROOTFS_PATH=/opt/debian
mkdir $ROOTFS_PATH
debootstrap --arch=amd64 --include=linux-image-amd64,grub-efi-amd64 stable $ROOTFS_PATH http://ftp2.cn.debian.org/debian

# 进入chroot环境后配置启动环境
chroot $ROOTFS_PATH /bin/bash -l

# 安装额外的软件
apt install sudo htop fdisk pciutils usbutils alsa-utils
apt install wireless-tools wpasupplicant bluez bluez-tools

# 安装内核和固件驱动(根据你的硬件选择固件驱动)
apt install linux-image-amd64 firmware-atheros firmware-iwlwifi
apt install firmware-misc-nonfree firmware-linux-nonfree
apt install firmware-realtek firmware-ralink firmware-brcm80211
apt install firmware-intel-sound firmware-amd-graphics nvidia-settings

# 添加一个用户并赋予sudo权限
useradd -m -g sudo -s /bin/bash debian
passwd debian
echo "debian ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chown -R debian:sudo /home/debian

# 设置DNS和软件源
echo "nameserver 127.0.0.1" > /etc/resolv.conf
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
echo "deb http://ftp2.cn.debian.org/debian/ buster main non-free contrib" \
> /etc/apt/sources.list

# 设置主机名和时区
echo Debian > /etc/hostname
sed -i '/localhost/s/$/\t'"Debian"'/g' /etc/hosts
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 清理所有已缓存的包后退出chroot环境
apt clean
exit
rm $ROOTFS_PATH/root/.bash_history

启动时必须文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 挂载GPT分区表U盘的Fat32分区并复制下面的文件到其中
mount /dev/sdb1 /mnt
mkdir -p /mnt/efi/boot/

# 生成squashfs根文件系统和内核到U盘
mksquashfs $ROOTFS_PATH /mnt/live/filesystem.squashfs
cp /boot/vmlinuz-4.19.0-9-amd64 /mnt/live/

# 制作initrd文件,4.19.0-9-amd64为/lib/modules下的内核模块目录名称
mkinitramfs 4.19.0-9-amd64 -o /mnt/live/initrd.img-4.19.0-9-amd64

# 生成GRUB的EFI单引导文件
echo -e "configfile (\$root)/efi/boot/grub.cfg" > grub.cfg

grub-mkimage -d /usr/lib/grub/x86_64-efi/ -c grub.cfg -p /efi/boot \
-o /mnt/efi/boot/bootx64.efi -O x86_64-efi boot linux linux16 chain \
loopback net search disk part_gpt part_msdos disk blocklist cpio btrfs \
exfat fat ext2 hfs hfsplus iso9660 jfs ntfs procfs squash4 xfs zfs tar \
date echo ls configfile normal file sleep true minicmd play read acpi \
reboot halt efifwsetup efi_gop efi_uga video_bochs video_cirrus \
gfxmenu gfxterm gfxterm_background gfxterm_menu font jpeg png

# 写入GRUB的引导配置
cat << EOF > /mnt/efi/boot/grub.cfg
set timeout=3
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue

menuentry "Debian GNU/Linux Live (kernel 4.19.0-9-amd64)" {
linux /live/vmlinuz-4.19.0-9-amd64 boot=live components quiet
initrd /live/initrd.img-4.19.0-9-amd64
}
EOF

# 优盘中现在的目录及文件
leux@K680:/mnt$ tree
.
├── efi
│   └── boot
│   ├── bootx64.efi
│   └── grub.cfg
└── live
├── filesystem.squashfs
├── initrd.img-4.19.0-9-amd64
└── vmlinuz-4.19.0-9-amd64

3 directories, 5 files

# 现在就可以直接从U盘启动LiveCD了

部署到磁盘启动(可选)

  1. 由于squashfs文件系统无法保存任何更改,也可直接部署到磁盘来启动

  2. 如果要安装系统的磁盘还未分区和格式化,先分区并格式化为指定格式

1
2
3
4
5
6
7
leux@K680:/mnt$ sudo fdisk /dev/sdb
Device Start End Sectors Size Type
/dev/sdb1 2048 207000 204953 100.1M Fat32
/dev/sdb2 208896 20971486 20762591 9.9G Ext4

mkfs.vfat /dev/sdb1
mkfs.ext4 /dev/sdb2
  1. 挂载要安装系统的磁盘到指定目录并复制文件到其中
1
2
3
4
5
6
mkdir -p /media/boot/ /media/root/
mount /dev/sdb1 /media/boot/
mount /dev/sdb2 /media/root/
unsquashfs -d /media/squashfs/ /mnt/live/filesystem.squashfs
cp -r /media/squashfs/* /media/root/
cp -r /mnt/efi/boot/bootx64.efi /media/boot/bootx64.efi
  1. 获取磁盘的UUID
1
2
3
4
5
leux@K680:/mnt$ lsblk -f
NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
|-sda1 vfat boot 9A46-9516 100.1M 2% /boot/efi
`-sda2 ext4 root 004e6e14-b1bd-384b-84a5-93d03fdcf964 9.9G 7% /
  1. 设置开机自动挂载磁盘
1
2
3
# /media/root/fstab
UUID=9A46-9516 /boot/efi vfat defaults 0 1
UUID=004e6e14-b1bd-384b-84a5-93d03fdcf964 / ext4 discard,noatime 0 1
  1. 配置GRUB的启动参数
1
2
3
4
5
6
7
8
9
10
# /media/boot/efi/boot/grub.cfg
set timeout=1
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue

menuentry "Debian GNU/Linux Buster (kernel 4.19.0-9-amd64)" {
search --no-floppy --fs-uuid --set=root 004e6e14-b1bd-384b-84a5-93d03fdcf964
linux /vmlinuz root=UUID=004e6e14-b1bd-384b-84a5-93d03fdcf964 quiet
initrd /initrd.img
}

其他说明

  1. 本文的构建是在Debian Buster WSL下进行的,其他环境请自测

  2. Debian的LiveCD内核是在压缩文件外面。如果你的LiveCD已经完美驱动了您的硬件,那么你可以不用安装内核到rootfs,否则安装内核可以解决多数驱动问题

  3. LiveCD是不需要配置/etc/fstab的,设置了可能会启动出错

  4. 如果LiveCD无法连接网络,驱动等正常的话请执行 dhclient 获取DHCP地址试试