蚊章汇 - iPXE
type: channel
link: https://linuxcn.bwsl.wang/tag/iPXE/
items: 网络启动一个 Fedora Live CD

网络启动一个 Fedora Live CD
type: item
date: 2019-12-24T06:48:43+08:00
description: Live CD 对于很多任务是很有用的，例如:将操作系统安装到一个硬盘驱动器修复一个启动加载程序或执行其它救援模式操作为 Web 浏览提供一个相适应的最小环境…以及更多的东西。作为使用 DVD 和 USB 驱动器来存储你的 Live CD 镜像是一个替代方案，你可以上传它们到一个不太可能丢失或损坏的 iSCSI 服务器中。这个指南向你展示如何加载你的 Live CD 镜像到一个 ISCSI 服务器上，并使用 iPXE 启动加载程序来访问它们。下载一个 Live CD 镜像$ MY_RLSE=27 $ MY_LIVE=$(wget -q -O - https://dl.fedoraproject.org/pub/archive/fedora/linux/releases/$MY_RLSE/Workstation/x86_64/iso | perl -ne '/(Fedora[^ ]*?-Live-[^ ]*?\.iso)(?{print $^N})/;') $ MY_NAME=fc$MY_RLSE $ wget -O $MY_NAME.iso https://dl.fedoraproject.org/pub/archive/fedora/linux/releases/$MY_RLSE/Workstation/x86_64/iso/$MY_LIVE上面的命令下载 Fedora-Workstation-Live-x86_64-27-1.6.iso Fedora Live 镜像，并保存为 fc27.iso。更改 MY_RLSE 的值来下载其它档案版本。或者，你可以浏览 https://getfedora.org/ 来下载最新的 Fedora live 镜像。在 21 之前的版本使用不同的命名约定，必需在这里手动下载。如果你手动下载一个 Live CD 镜像，设置 MY_NAME 变量为不带有扩展名的文件的基本名称。用此方法，下面部分中命令将引用正确的文件。转换 Live CD 镜像使用 livecd-iso-to-disk 工具来转换 ISO 文件为一个磁盘镜像，并添加 netroot 参数到嵌入的内核命令行：$ sudo dnf install -y livecd-tools $ MY_SIZE=$(du -ms $MY_NAME.iso | cut -f 1) $ dd if=/dev/zero of=$MY_NAME.img bs=1MiB count=0 seek=$(($MY_SIZE+512)) $ MY_SRVR=server-01.example.edu $ MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR}) $ MY_LOOP=$(sudo losetup --show --nooverlap --find $MY_NAME.img) $ sudo livecd-iso-to-disk --format --extra-kernel-args netroot=iscsi:$MY_SRVR:::1:iqn.$MY_RVRS:$MY_NAME $MY_NAME.iso $MY_LOOP $ sudo losetup -d $MY_LOOP上传 Live 镜像到你的服务器在你的 ISCSI 服务器上创建一个目录来存储你的 live 镜像，随后上传你修改的镜像到其中。对于 21 及更高发布版本：$ MY_FLDR=/images $ scp $MY_NAME.img $MY_SRVR:$MY_FLDR/对于 21 以前发布版本：$ MY_FLDR=/images $ MY_LOOP=$(sudo losetup --show --nooverlap --find --partscan $MY_NAME.img) $ sudo tune2fs -O ^has_journal ${MY_LOOP}p1 $ sudo e2fsck ${MY_LOOP}p1 $ sudo dd status=none if=${MY_LOOP}p1 | ssh $MY_SRVR "dd of=$MY_FLDR/$MY_NAME.img" $ sudo losetup -d $MY_LOOP定义 iSCSI 目标在你的 iSCSI 服务器上运行下面的命令：$ sudo -i # MY_NAME=fc27 # MY_FLDR=/images # MY_SRVR=`hostname` # MY_RVRS=$(echo $MY_SRVR | tr '.' "\n" | tac | tr "\n" '.' | cut -b -${#MY_SRVR})…