这些是我在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-build,mkusb,UNetbootin,xixer,rufus,YUMI,Simple-cdd。您还应该查看Debian DebianCustomCD文档,因为它将比本文提供的信息多得多。
我写这本指南的目的更多是出于教育目的。它不一定是满足您需求的最快指南或最佳指南。希望对您有所帮助。
警告:我已突出显示您应该在 [chroot]环境中的所有位置。小心!在本地环境而不是 chroot中运行其中一些命令可能会损坏系统。
先决条件
安装我们需要构建环境的应用程序。
1 | sudo apt-get install \ |
创建一个目录,我们将在其中存储在本指南中创建的所有文件。
1 | mkdir -p $HOME/LIVE_BOOT |
引导和配置Debian
设置基本的Debian环境。我正在使用stretch
我的发行版和i386
体系结构。请查阅debian镜像列表。
如果附近有镜像网站,请在此命令中更改URL。
1 | sudo debootstrap \ |
Chroot到我们刚刚引导的Debian环境。
1 | sudo chroot $HOME/LIVE_BOOT/chroot |
[chroot]为您的Debian环境设置自定义主机名。
1 | echo "ling" > /etc/hostname |
[chroot]确定实时环境中需要哪个Linux内核。
1 | apt-cache search linux-image |
[chroot]我选择了图像linux-image-686
。我也认为这live-boot
是必要的。systemd-sys
(或等效项)也是提供init所必需的。
1 | apt-get update && \ |
[chroot]安装您选择的程序,然后运行apt-get clean
以节省一些空间。我使用--no-install-recommends
以避免多余的程序包。您应该确定环境所需的内容。
阅读Debian的ReduceDebian文章,以获取有关减小Debian环境大小的技巧(如果大小很重要并且您需要最小和紧凑的安装)。请注意,某些实时环境(如Tiny Core Linux或Puppy Linux)经过专门优化,仅占很小的空间。尽管本文提供了一个相对较小的实时环境,但生成仅几十MB大小的环境仍需要付出额外的精力,而本文并未涉及。
1 | apt-get install --no-install-recommends \ |
[chroot]设置root密码。root
将默认为该实时环境中的唯一用户,但是您可以根据需要添加其他用户。
1 | passwd root |
[chroot]退出chroot。
1 | exit |
创建目录,其中将包含我们的实时环境文件和暂存文件的文件。
1 | mkdir -p $HOME/LIVE_BOOT/{scratch,image/live} |
将chroot环境压缩到一个Squash文件系统中。
1 | sudo mksquashfs \ |
将内核和initramfs从中复制chroot
到live
目录中。
1 | cp $HOME/LIVE_BOOT/chroot/boot/vmlinuz-* \ |
为grub创建菜单配置文件。请注意,insmod all_video
在我的测试中需要该行来处理我的一台计算机的UEFI引导中的错误。也许不是每个人都需要那条线,但我确实需要。
此配置指示Grub使用该search
命令来推断哪个设备包含我们的实时环境。考虑到我们可以将实时环境写入可启动媒体的各种方式,这似乎是最可移植的解决方案。
1 | cat <<'EOF' >$HOME/LIVE_BOOT/scratch/grub.cfg |
在image
named中创建一个特殊文件DEBIAN_CUSTOM
。该文件将用于帮助Grub
确定哪个设备包含我们的实时文件系统。该文件名必须唯一,并且必须与我们的grub.cfg
配置中的文件名匹配。
1 | touch $HOME/LIVE_BOOT/image/DEBIAN_CUSTOM |
您的LIVE_BOOT
目录现在应该大致如下所示。
1 | LIVE_BOOT/chroot/*tons of chroot files* |
创建可启动媒体
请注意,下面有两组单独的说明,用于为实时环境创建可启动媒体。一个进程名为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 (BIOS 启动方式)
将实时环境安装到.iso
可以刻录到光学介质的文件中。
如上所述,.iso
通过这些步骤生成的文件可以使用写入到USB设备dd
。
创建一个grub BIOS映像。
1 | grub-mkstandalone \ |
cat
用于将可引导的Grub cdboot.img
引导加载程序与我们的引导映像结合使用。
1 | cat \ |
生成ISO文件。
1 | xorriso \ |
现在将ISO刻录到CD,您应该可以使用BIOS系统从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 |
使用分割USB驱动器parted
。该命令在传统的MBR布局中创建1个分区。
1 | sudo parted --script $disk \ |
格式化分区。
1 | sudo mkfs.vfat -F32 ${disk}1 |
挂载分区。
1 | sudo mount ${disk}1 /mnt/usb |
安装用于i386-pc引导的Grub。
1 | sudo grub-install \ |
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 | sudo cp \ |
现在,卸下磁盘,您应该已经准备好在BIOS系统上从磁盘引导。
1 | sudo umount /mnt/usb |
注意事项 +
注释(Rufus支持) +
引文
- sgdisk(8)-Linux手册页
- 混合UEFI GPT + BIOS GPT / MBR引导
- “找不到合适的模式”错误
- Ubuntu 64位实时CD上的memtest选项在哪里?
- 重新掌握安装ISO
- 在(U)EFI系统中安装GRUB2
- 6.4将配置文件嵌入GRUB
- 独立的Grub2 EFI安装-grub.cfg放置?
- “ grub-mkimage –config =”的实际用法
- GRUB2使用方法(4):内存磁盘和回送设备
- grub efi加载程序如何找到正确的grub.cfg和引导目录?
- 如何在Linux上救援非引导式GRUB 2
- 使用光盘
- 从EFI和GPT用extlinux引导Linux
- GRUB2模块
- grub-install.c
- Grub2 /问题排查
- 设置预加载器
- 使用PreLoader
- build.sh
- 阿奇索
- 简单的菜单系统
- UEFI
- 制作UEFI可启动实时CD
- 将ISOLINUX与UEFI一起使用的正确方法是什么?
- 从可移动媒体引导
- UEFI系统
- 管理Linux的EFI引导加载程序:EFI引导加载程序安装
- 例子
- Grub2 El-Torito CD
- 使用GRUB2创建ISO映像
- DebianLive MultibootISO
- 11个GRUB图像文件
- stage2_eltorito遗失
- 3.4制作GRUB可引导CD-ROM
- 从CD上的el torito引导时,grub2为什么会忽略内核选项?
- 从CD / DVD引导UEFI无效
- 升级到VMWS Player 12后的UEFI问题
- 品牌
- UEFI + BIOS可启动实时Debian Stretch amd64持久化
- [syslinux] Isohybrid Wiki页面和UEFI