通过 PXE 引导进行自动部署

如果在相似硬件上大量安装操作系统,投入一些精力来准备操作系统的批量部署并以此最大程度上降低实际部署所需的时间,这是非常有用的。这正是本章将要阐述的内容。目标就是将计算机挂接到电源和网络,启动网络引导并等待至计算机再次关闭。

要完成此任务,必须执行以下操作:

设置引导和安装服务器

需要一个专用计算机,该专用计算机应准备提供 PXE 引导以及 ftp 或 web 服务器以提供预装载映像。最好为计算机提供足够的内存以在内存中存放所有必需的安装数据。对于默认安装,应至少具有 4 GB 的内存。可通过 SUSE Linux Enterprise Server 完成所有必需任务。有关细节,请参阅第 22.2.1 节 “设置引导并安装服务器”

准备预装载映像

通过将操作系统的原始映像复制到新硬盘来完成实际安装。必须细心准备和测试所有功能和设置。要提供此类映像,可使用 SUSE Linux Enterprise 操作系统的 SDK 中提供的 KIWI。第 17 章 KIWI中提供了有关映像创建的更多信息。有关预装载映像的要求的更多细节,请参见第 22.2.2 节 “创建预装载映像”

创建用于部署的初始系统

此任务要求具备一些 Linux 专业知识。第 22.2.3 节 “创建初始系统以部署预装载映像”中提供了有关通过示例安装完成此任务的方法描述。

配置引导服务器以执行自动部署

最终,所有任务必须整合在一起。必须命令 PXE 引导来引导安装系统,安装系统随即从服务器获取预装载映像并将其复制到硬盘。

设置引导并安装服务器

安装 SUSE Linux Enterprise Server 后,执行此任务要完成四个步骤:

要执行此类型安装,请执行如下操作:

  1. 第 14.2 节 “设置存放安装源的服务器”中所述设置安装源。 选择 HTTP 或 FTP 网络服务器。

  2. 设置 TFTP 服务器以存放将在稍后步骤中创建的引导映像。第 14.3.2 节 “设置 TFTP 服务器”中对此进行了说明。

  3. 设置 DHCP 服务器以向所有计算机提供 IP 地址,并向目标系统显示 TFTP 服务器的位置。 第 14.3.1 节 “设置 DHCP 服务”中对此进行了说明。

  4. 准备安装服务器 PXE 引导。第 14.3.3 节 “使用 PXE 引导”中对此有详细说明。

注意,如果您为此计算机提供了足够的内存以在内存中存放预装载映像,则实际安装过程将获益良多。其次,如果使用千兆以太网,将显著加速部署过程(与较慢的网络相比),前提是整个网络支持千兆以太网。

创建预装载映像

第 17.4.2 节 “创建映像”中描述了通过 KIWI 创建映像的过程。但是,要创建有用的映像以进行批量部署,应考虑若干注意事项:

  • 典型的预装载映像将使用以下类型:

    <type primary="true" filesystem="ext3" boot="oemboot/suse-SLES11">vmx</type>
  • 在设置预装载映像期间,映像创建过程多次运行。本地计算机上应提供构建映像所需的安装源。

  • 根据对预装载的所需使用情况,应花些精力来配置首次引导。请在第 20 章 部署自定义预安装中查找有关首次引导的更多细节。通过此方法,还可要求用户在系统首次引导时进行初始配置。

  • 可以为映像配置许多附加功能,如添加更新安装源或在首次引导时进行更新。但无法在此处描述所有可能情况,并且根据不同要求,预装载映像的创建可能要求深入了解创建映像系统 KIWI 以及 SUSE Linux Enterprise Server 中使用的若干其他技术。

要部署的实际映像应该可以从您在安装服务器上提供的 ftp 或 http 服务器中获取。

创建初始系统以部署预装载映像

要运行自动部署,需要启动目标计算机上的初始 linux 系统。在典型安装期间,内核和初始 ram 文件系统从某个引导媒体读取并由 bios 启动。所需的功能可在 ram 文件系统中实施,ram 文件系统连同内核一起充当初始系统。

必须由初始系统提供的主要功能是实现对硬盘的访问,并使网络连接可用。这两个功能都取决于要用于部署的硬件。原则上说,可全新创建一个初始系统,但为了简化此任务,还可修改计算机在引导期间使用的初始 ram 文件系统。

以下过程是如何创建所需初始 ram 文件系统的示例。创建此类系统有多种不同方法,但以下方法比较简单。

  1. 在目标系统上进行 SUSE Linux Enterprise Server 的标准安装。

  2. 在系统上安装包 busybox

  3. 使用以下命令创建新的 ram 文件系统:

    mkinitrd -f busybox -D eth0

    注意,eth0 表示您的网络电缆挂接到的以太网设备。参数 -f busybox 将多个调用二进制文件 busybox 添加到 ram 文件系统。进行此操作后,便可在此系统中使用很多标准 unix 命令。

  4. 使用以下命令将新的 ram 文件系统和内核复制到引导服务器:

    scp /boot/initrd /boot/vmlinuz pxe.example.com:

    用本地引导服务器的名称或 ip 地址替换 pxe.example.com。

  5. 作为 root 用户登录到引导服务器,在您修改 ram 文件系统的位置创建一个目录:

    mkdir ~/bootimage
  6. 通过 cd ~/bootimage 命令将工作目录切换到此目录。

  7. 使用以下命令解压缩先前复制的初始 ram 文件系统:

    zcat ../initrd | cpio -i
  8. 编辑文件 run_all.sh

  9. 搜索以下行,删除该行及剩余部分:

    [ "$debug" ] && echo preping 21-nfs.sh 
  10. 在文件 run_all.sh 的结尾添加以下行:

    [ "$debug" ] && echo preping 92-install.sh
    [ "$debug" ] && echo running 92-install.sh
    source boot/92-install.sh
    [ "$modules" ] && load_modules
         
  11. 使用以下内容创建新脚本 boot/92-install.sh

    #!/bin/bash
    if [ "$(get_param rawimage)" ]; then
      rawimage=$(get_param rawimage)
      if  [ "$(get_param rawdevice)" ]; then
        rawdevice=$(get_param rawdevice)
        echo "wget -O ${rawdevice} ${rawimage}"
        wget -O ${rawdevice} ${rawimage}
        sync
        sleep 5
        echo "DONE"
      fi
    fi
    # /bin/bash
    /bin/poweroff -f
    
  12. 如果希望在计算机关闭前具有一个调试外壳,请删除 /bin/bash 前的注释符号。

  13. 通过命令 chmod 755 boot/92-install.sh 使此脚本可执行。

  14. 使用以下命令创建新的初始 ram 文件系统:

    mkdir -p /srv/tftpboot
    find . | cpio --quiet -H newc -o | gzip -9 -n > \
    /srv/tftpboot/initrd.boot
  15. 另外将内核复制到此目录:

    cp ../vmlinuz /srv/tftpboot/linux.boot

初始 ram 文件系统现已准备采用两个新的内核命令行参数。参数 rawimage=<URL> 用于标识预装载映像的位置。可使用 wget 能理解的任何 URL。参数 rawdevice=<device> 用于标识目标计算机上硬盘的块设备。

引导服务器配置

在若干不同章节中详细描述了引导服务器的配置,如第 22.2.1 节 “设置引导并安装服务器”中所列。本节提供了一个核对清单,涵盖了配置系统所必需的步骤。

  • 设置 dhcp 服务器。安装有计算机的子网需要以下附加行:

    filename "pxelinux.0";
    next-server 192.168.1.115;

    在此示例中,192.168.1.115 是 PXE 服务器 pxe.example.com 的 ip 地址。

  • 按照第 14.3.3 节 “使用 PXE 引导”中的描述配置 PXE 服务器。编辑 /srv/tftpboot/pxelinux.cfg/default 时,添加以下项:

    default bootinstall
    label bootinstall
      kernel linux.boot
      append initrd=initrd.boot \
      rawimage=ftp://192.168.1.115/preload/preloadimage.raw rawdevice=/dev/sda
  • 安装 ftp 服务器并将准备好的预装载映像复制到 /srv/ftp/preload/preloadimage.raw

通过使用 PXE 网络引导来引导目标系统以测试安装。这会自动将准备好的预装载映像复制到硬盘并在就绪时关闭计算机。