网络启动 Fedora 现场CD

[ad_1]

现场CD 可用于许多任务,例如:

  • 将操作系统安装到硬盘驱动器
  • 修复引导加载程序或执行其他救援模式操作
  • 为网页浏览提供一致且最小的环境
  • …和 多得多.

作为使用 DVD 和 USB 驱动器存储 Live CD 映像的替代方法,您可以将它们上传到 iSCSI 丢失或损坏的可能性较小的服务器。 本指南向您展示如何将 Live CD 映像加载到 iSCSI 服务器并使用 PXE 引导加载程序。

下载 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 实时图像并将其保存为 fc27.iso。 更改 MY_RLSE 的值以下载其他存档版本。 或者您可以浏览到 https://getfedora.org/ 下载最新的 Fedora 实时图像。 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

将实时图像上传到您的服务器

在 iSCSI 服务器上创建一个目录来存储实时图像,然后将修改后的图像上传到其中。

对于版本 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})
# cat << END > /etc/tgt/conf.d/$MY_NAME.conf
<target iqn.$MY_RVRS:$MY_NAME>
backing-store $MY_FLDR/$MY_NAME.img
readonly 1
allow-in-use yes
</target>
END
# tgt-admin --update ALL

创建可启动的 USB 驱动器

PXE 引导加载程序有一个 sanboot 您可以使用命令连接并启动 iSCSI 服务器上托管的实时映像。 它可以编译成许多不同的 格式. 最有效的格式取决于您运行的硬件类型。 例如,以下说明显示了如何 链条负载 iPXE 来自 系统Linux 在 USB 驱动器上。

首先,下载 iPXE 并以 lkrn 格式构建它。 这应该作为工作站上的普通用户完成:

$ sudo dnf install -y git 
$ git clone https://git.ipxe.org/ipxe.git $HOME/ipxe
$ sudo dnf groupinstall -y "C Development Tools and Libraries"
$ cd $HOME/ipxe/src
$ make clean
$ make bin/ipxe.lkrn
$ cp bin/ipxe.lkrn /tmp

接下来,准备一个带有 MSDOS 分区表和 FAT32 文件系统的 USB 驱动器。 下面的命令假设您已经连接了要格式化的 U 盘。 小心不要格式化错误的驱动器!

$ sudo -i 
# dnf install -y parted util-linux dosfstools
# echo; find /dev/disk/by-id ! -regex '.*-part.*' -name 'usb-*' -exec readlink -f {} ; | xargs -i bash -c "parted -s {} unit MiB print | perl -0 -ne '/^Model: ([^(]*).*n.*?([0-9]*MiB)/i && print "Found: {} = $2 $1n"'"; echo; read -e -i "$(find /dev/disk/by-id ! -regex '.*-part.*' -name 'usb-*' -exec readlink -f {} ; -quit)" -p "Drive to format: " MY_USB
# umount $MY_USB?
# wipefs -a $MY_USB
# parted -s $MY_USB mklabel msdos mkpart primary fat32 1MiB 100% set 1 boot on
# mkfs -t vfat -F 32 ${MY_USB}1

最后,在 USB 驱动器上安装 syslinux 并将其配置为链式加载 iPXE:

# dnf install -y syslinux-nonlinux 
# syslinux -i ${MY_USB}1
# dd if=/usr/share/syslinux/mbr.bin of=${MY_USB}
# MY_MNT=$(mktemp -d)
# mount ${MY_USB}1 $MY_MNT
# MY_NAME=fc27
# MY_SRVR=server-01.example.edu
# MY_RVRS=$(echo $MY_SRVR | tr '.' "n" | tac | tr "n" '.' | cut -b -${#MY_SRVR})
# cat << END > $MY_MNT/syslinux.cfg
ui menu.c32
default $MY_NAME
timeout 100
menu title SYSLINUX
label $MY_NAME
menu label ${MY_NAME^^}
kernel ipxe.lkrn
append dhcp && sanboot iscsi:$MY_SRVR:::1:iqn.$MY_RVRS:$MY_NAME
END
# cp /usr/share/syslinux/menu.c32 $MY_MNT
# cp /usr/share/syslinux/libutil.c32 $MY_MNT
# cp /tmp/ipxe.lkrn $MY_MNT
# umount ${MY_USB}1

只需编辑 syslinux.cfg 文件并添加其他菜单项,您就应该能够使用同一个 USB 驱动器来网络引导其他 iSCSI 目标。

这只是加载 iPXE 的一种方法。 您可以直接在工作站上安装 syslinux。 另一种选择是将 iPXE 编译为 EFI 可执行文件并将其直接放在您的 静电除尘器. 另一种方法是将 iPXE 编译为 PXE 加载程序并将其放置在您的 TFTP 服务器上以供 DHCP 引用。 最佳选择取决于您的环境。

最后的笔记

  • 如果您以 EFI 格式编译 iPXE,您可能需要将 –filename EFIBOOTgrubx64.efi 参数添加到 sanboot 命令。
  • 可以创建自定义实时图像。 参考 创建和使用 Live CD 想要查询更多的信息。
  • 可以将 –overlay-size-mb 和 –home-size-mb 参数添加到 livecd-iso-to-disk 命令以创建具有持久存储的实时映像。 但是,如果您有多个并发用户,则需要设置 iSCSI 服务器来管理单独的每用户可写覆盖。 这类似于“如何构建网络引导服务器,第 4 部分”一文中显示的内容。
  • 实时映像支持在其内核命令行上使用persistenthome 选项(例如persistenthome=LABEL=HOME)。 与 CHAP 身份验证的 iSCSI 目标一起使用,persistenthome 选项为集中主目录提供了 NFS 的有趣替代方案。

拍摄者 克里斯·耶茨不飞溅.

[ad_2]

Related Posts