0%

创建一个自定义 UEFI 启动的 Debian Live 环境 (CD或USB)

这些是我在Ubuntu 18.04 LTS(Bionic Beaver) 64位系统上使用的步骤,用于构建可以从CD或USB引导的x86 Debian 9(Stretch)实时环境。

这些步骤可用于创建可启动BIOS(MBR),可启动UEFI(GPT)或可启动UEFI和BIOS的组合的实时环境。本指南的独特之处在于未使用Syslinux / Isolinux。只有Grub引导设备。这样做是为了保持一致性,并避免两者混淆(仅Syslinux / Isolinux不能完成本文中介绍的所有内容,但是Grub可以做到)。

以下是我的指南的替代方法,对于那些阅读本文的人来说,它们可能是更好的解决方案:live-buildmkusbUNetbootinxixerrufusYUMISimple-cdd。您还应该查看Debian DebianCustomCD文档,因为它将比本文提供的信息多得多。

我写这本指南的目的更多是出于教育目的。它不一定是满足您需求的最快指南或最佳指南。希望对您有所帮助。

警告:我已突出显示您应该在 [chroot]环境中的所有位置。小心!在本地环境而不是 chroot中运行其中一些命令可能会损坏系统。

先决条件

安装我们需要构建环境的应用程序。

1
2
3
4
5
6
7
sudo apt-get install \
debootstrap \
squashfs-tools \
xorriso \
grub-pc-bin \
grub-efi-amd64-bin \
mtools

创建一个目录,我们将在其中存储在本指南中创建的所有文件。

1
mkdir -p $HOME/LIVE_BOOT

引导和配置Debian

设置基本的Debian环境。我正在使用stretch我的发行版和i386体系结构。请查阅debian镜像列表。

如果附近有镜子,请在此命令中更改URL。

1
2
3
4
5
6
sudo debootstrap \
--arch=i386 \
--variant=minbase \
stretch \
$HOME/LIVE_BOOT/chroot \
http://ftp.us.debian.org/debian/

Chroot到我们刚刚引导的Debian环境。

1
sudo chroot $HOME/LIVE_BOOT/chroot

[chroot]为您的Debian环境设置自定义主机名。

1
echo "debian-live" > /etc/hostname

[chroot]确定实时环境中需要哪个Linux内核。

1
apt-cache search linux-image

[chroot]我选择了图像linux-image-686。我也认为这live-boot是必要的。systemd-sys(或等效项)也是提供init所必需的。

1
2
3
4
5
apt-get update && \
apt-get install --no-install-recommends \
linux-image-686 \
live-boot \
systemd-sysv

[chroot]安装您选择的程序,然后运行apt-get clean以节省一些空间。我使用--no-install-recommends以避免多余的程序包。您应该确定环境所需的内容。

阅读Debian的ReduceDebian文章,以获取有关减小Debian环境大小的技巧(如果大小很重要并且您需要最小和紧凑的安装)。请注意,某些实时环境(如Tiny Core LinuxPuppy Linux)经过专门优化,仅占很小的空间。尽管本文提供了一个相对较小的实时环境,但生成仅几十MB大小的环境仍需要付出额外的精力,而本文并未涉及。

1
2
3
4
5
6
apt-get install --no-install-recommends \
network-manager net-tools wireless-tools wpagui \
curl openssh-client \
blackbox xserver-xorg-core xserver-xorg xinit xterm \
nano && \
apt-get clean

[chroot]设置root密码。root将默认为该实时环境中的唯一用户,但是您可以根据需要添加其他用户。

1
passwd root

[chroot]退出chroot。

1
exit

创建目录,其中将包含我们的实时环境文件和暂存文件的文件。

1
mkdir -p $HOME/LIVE_BOOT/{scratch,image/live}

将chroot环境压缩到一个Squash文件系统中。

1
2
3
4
sudo mksquashfs \
$HOME/LIVE_BOOT/chroot \
$HOME/LIVE_BOOT/image/live/filesystem.squashfs \
-e boot

将内核和initramfs从中复制chrootlive目录中。

1
2
3
4
cp $HOME/LIVE_BOOT/chroot/boot/vmlinuz-* \
$HOME/LIVE_BOOT/image/vmlinuz && \
cp $HOME/LIVE_BOOT/chroot/boot/initrd.img-* \
$HOME/LIVE_BOOT/image/initrd

为grub创建菜单配置文件。请注意,insmod all_video在我的测试中需要该行来处理我的一台计算机的UEFI引导中的错误。也许不是每个人都需要那条线,但我确实需要。

此配置指示Grub使用该search命令来推断哪个设备包含我们的实时环境。考虑到我们可以将实时环境写入可启动媒体的各种方式,这似乎是最可移植的解决方案。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat <<'EOF' >$HOME/LIVE_BOOT/scratch/grub.cfg

insmod all_video

search --set=root --file /DEBIAN_CUSTOM

set default="0"
set timeout=30

menuentry "Debian Live" {
linux /vmlinuz boot=live quiet nomodeset
initrd /initrd
}
EOF

imagenamed中创建一个特殊文件DEBIAN_CUSTOM。该文件将用于帮助Grub确定哪个设备包含我们的实时文件系统。该文件名必须唯一,并且必须与我们的grub.cfg配置中的文件名匹配。

1
touch $HOME/LIVE_BOOT/image/DEBIAN_CUSTOM

您的LIVE_BOOT目录现在应该大致如下所示。

1
2
3
4
5
6
LIVE_BOOT/chroot/*tons of chroot files*
LIVE_BOOT/scratch/grub.cfg
LIVE_BOOT/image/DEBIAN_CUSTOM
LIVE_BOOT/image/initrd
LIVE_BOOT/image/vmlinuz
LIVE_BOOT/image/live/filesystem.squashfs

创建可启动媒体

请注意,下面有两组单独的说明,用于为实时环境创建可启动媒体。一个进程名为Create Bootable ISO / CD另一个进程名为Create Bootable USB

  • 创建可启动ISO / CD指令将导致.iso包含我们的生活环境中的图像文件。
  • 创建可启动USB”说明将导致我们的实时环境直接安装到USB设备上。

.iso我们使用创建可启动ISO / CD指令创建的文件可以刻录到CD-ROM(光学介质),或通过写入USB设备dd。允许我们.iso文件中这种“应收帐款”行为的功能并非免费提供。这个过程有点复杂,但是在许多现代的实时环境(例如Ubuntu安装.iso文件)中,这种行为是很常见的。

请注意,将.iso文件写入USB设备与将实时环境直接安装到USB设备并不相同。在我的笔记中详细了解我的发现。

创建可启动的ISO / CD

将实时环境安装到.iso可以刻录到光学介质的文件中。

如上所述,.iso通过这些步骤生成的文件可以使用写入到USB设备dd

创建一个grub UEFI映像。

1
2
3
4
5
6
grub-mkstandalone \
--format=x86_64-efi \
--output=$HOME/LIVE_BOOT/scratch/bootx64.efi \
--locales="" \
--fonts="" \
"boot/grub/grub.cfg=$HOME/LIVE_BOOT/scratch/grub.cfg"

创建包含EFI引导加载程序的FAT16 UEFI引导磁盘映像。请注意,使用mmdmcopy命令来复制名为的UEFI引导加载程序bootx64.efi

1
2
3
4
5
6
(cd $HOME/LIVE_BOOT/scratch && \
dd if=/dev/zero of=efiboot.img bs=1M count=10 && \
mkfs.vfat efiboot.img && \
mmd -i efiboot.img efi efi/boot && \
mcopy -i efiboot.img ./bootx64.efi ::efi/boot/
)

生成ISO文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
xorriso \
-as mkisofs \
-iso-level 3 \
-full-iso9660-filenames \
-volid "DEBIAN_CUSTOM" \
-eltorito-alt-boot \
-e EFI/efiboot.img \
-no-emul-boot \
-append_partition 2 0xef ${HOME}/LIVE_BOOT/scratch/efiboot.img \
-output "${HOME}/LIVE_BOOT/debian-custom.iso" \
-graft-points \
"${HOME}/LIVE_BOOT/image" \
/EFI/efiboot.img=$HOME/LIVE_BOOT/scratch/efiboot.img

现在将ISO刻录到CD,您应该可以使用UEFI系统从CD引导了。

创建可启动USB

将实时环境安装到USB设备。

如上所述,在安装现场环境到USB设备是一样的书面.iso文件到USB设备。在这两种情况下,最终结果在大多数情况下都是相同的,但是存在一些细微的差异值得理解,并且有正当的理由,有人可能希望将实时环境直接安装到USB设备,而不是将.iso文件写入USB设备。

我假设您在/ dev / sdz上有一个已挂载的空白 USB驱动器。为了在实际的块设备中轻松进行交换,我在这些命令中使用了一个变量。$disk

导出disk变量。

1
export disk=/dev/sdz

为USB驱动器创建一些安装点。

1
sudo mkdir -p /mnt/{usb,efi}

使用分割USB驱动器parted。此命令在GPT(Guid分区表)布局中创建2个分区。一个分区用于UEFI,另一个分区用于我们的Debian OS和其他实时数据。

1
2
3
4
5
6
7
8
sudo parted --script $disk \
mklabel gpt \
mkpart ESP fat32 1MiB 200MiB \
name 1 EFI \
set 1 esp on \
mkpart primary fat32 200MiB 100% \
name 2 LINUX \
set 2 msftdata on

格式化UEFI和数据分区。

1
2
sudo mkfs.vfat -F32 ${disk}1 && \
sudo mkfs.vfat -F32 ${disk}2

挂载分区。

1
2
sudo mount ${disk}1 /mnt/efi && \
sudo mount ${disk}2 /mnt/usb

安装用于x86_64 UEFI引导的Grub。

1
2
3
4
5
6
sudo grub-install \
--target=x86_64-efi \
--efi-directory=/mnt/efi \
--boot-directory=/mnt/usb/boot \
--removable \
--recheck

live在USB设备上创建目录。

1
sudo mkdir -p /mnt/usb/{boot/grub,live}

将我们先前生成的Debian实时环境文件复制到USB磁盘。

1
sudo cp -r $HOME/LIVE_BOOT/image/* /mnt/usb/

grub.cfg启动配置复制到USB设备。

1
2
3
sudo cp \
$HOME/LIVE_BOOT/scratch/grub.cfg \
/mnt/usb/boot/grub/grub.cfg

现在卸载磁盘,您应该已经准备好在UEFI系统上从磁盘启动。

1
sudo umount /mnt/{usb,efi}

注意事项 +

注释(Rufus支持) +

引文

原文地址:

  • 本文标题:创建一个自定义 UEFI 启动的 Debian Live 环境 (CD或USB)
  • 本文作者: LinG218
  • 本文链接: https://www.ling218.cn/archives/1a14b41f.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!