我想从 chroot (debootstrap) 环境创建我自己的 Debian Live 启动棒。
根文件系统应该安装为squashfs,并且grub应该能够从单个EFI分区引导系统。
到目前为止,我在 USB 棒上有一个 chroot 环境、vmlinuz 和 initrd.img 的 squashfs 映像。但是,我不知道如何配置 grub,以便它不会启动我的本地系统(尝试使用:grub-install...),而是启动 USB 棒的 squashfs。
答案1
我解决了问题!
首先,chroot 环境必须具有加载 shquashfs 映像所需的 initframe。为此,我只是在 chroot 中安装了实时启动数据包,然后更新了 initframes。 /proc、/dev/pts、/dev、/sys 应该在 chroot 中可用才能正常工作。
# @ root on localhost
mount -o bind /proc /debootstrap/proc
mount -o bind /dev /debootstrap/dev
mount -o bind /dev/pts /debootstrap/dev/pts
mount -o bind /sys /debootstrap/sys
# @ root in chroot
apt install live-boot live-boot-initramfs-tools
update-initramfs -u
完成后,应该卸载这些目录,并且可以将 shquashfs 创建到 /target/live/filesystem.squashfs。
# @ root on localhost
umount /debootstrap/proc
umount /debootstrap/dev
umount /debootstrap/dev/pts
umount /debootstrap/sys
# @ root on localhost
mksquashfs -comp xz /debootstrap /target/live/filesystem.squashfs
我将 U 盘格式化为 fat32 并将其安装在 /target 中。现在可以安装 Grub 了。
# @ root on localhost
grub-install --target=x86_64-efi --root-directory=/target
完成后,将 vmlinuz 和 initrd.img 复制到 /target/boot 并使用以下内容在 /target/boot/grub/grub.cfg 中创建 grub.cfg。
insmod all_video
set default=0
set timeout=0
menuentry "debian live" {
linux /boot/vmlinuz boot=live toram=filesystem.squashfs quiet
initrd /boot/initrd.img
}
就是这样,你的电脑应该能够 EFI 启动这个棒。