内容


自动化 Linux 云安装

简化在新的 Power System 或 System p LPAR 上安装 Linux 的过程

Comments

云计算的特性之一就是能够将应用程序从一个处理器环境移动到另一个。这个特性要求在移动应用程序之前 存在一个接收它的目标操作系统。如果能够自动化新操作系统的安装,不是很好吗?

Intel™ 架构系统的一个为人熟知的特性就是能够自动安装 Linux。不过,对于使用硬件管理控制台的 System p 或 IBM Power Systems,自动安装 Linux 是一个棘手的问题。本文讨论的解决方案的优点之一是:它是一个纯 Linux 解决方案,并且不要求您掌握任何具体的 AIX 技术。

自动化解决方案概述

这个解决方案的目标是通过使用一组易于维护和修改的配置自动化操作系统的安装。它具有以下特征:

  • 刚创建和安装的 LPAR 使用一个静态 IP 地址。这仅与 LPAR 的最终配置相关;您可以在安装过程使用动态主机配置协议(DHCP)。
  • Automatic Linux Installation and Configuration with YaST2(AutoYaST)配置 XML 文件是很通用的,可以在许多服务器类型上使用,包括 HTTP、MySQL 等。
  • AutoYaST 文件 包含特定于系统的信息,比如 IP 地址、主机名等。
  • 使用这种方式自动化所有内容,这样在 HMC 上使用一个命令就可以安装新的 LPAR。

构建和使用自动化解决方案的步骤包括:

  1. 配置 AutoYaST 文件
  2. 配置 DHCP/BOOTP 和 TFTP 服务器
  3. 使用 HMC lpar_netboot 命令
  4. 使用 -g 参数自动化 lpar_netboot
  5. 重用自动化解决方案

步骤 1. 配置 AutoYaST 文件

SUSE Linux 使用一个名为 AutoYaST.xml 的 XML 配置文件控制操作系统的安装。默认情况下,每次使用 AutoYaST 时它都会使用相同的配置安装系统。这使您能够获得特定于不同配置的 AutoYaST 文件。例如,您可能有一个针对 Web 服务器的 AutoYaST 文件,以及另一个针对 MySQL 服务器的 AutoYaST 文件。然而,如果服务器仅是 IP 地址和主机名不同,为它们配置和维护多个 AutoYaST 文件是相当困难的,并且很费时。

要创建一个从 DHCP 服务器获取 IP 地址和主机名的定制 AutoYaST 文件,必须从 SUSE 安装 CD 复制 AutoYaST 文件,并按以下的说明修改它:

  1. 将标准的 AutoYaST 文件配置为使用 DHCP。将网络区段修改为仅在首次安装操作系统时使用 DHCP。进行检查,确保这些网络区段中没有分配主机名。如果某个区段存在主机名,必须完全删除该区段。
  2. 如果 XML 文件包含静态 IP 信息、DNS 信息 或其他网络信息,请将这些内容从文件中删除。
  3. 将清单 1 中的代码复制到 AutoYaST 文件的最后一个 XML 标记之前的位置。这个新的部分包含一个脚本,它将当前的引导 DHCP 配置转换成静态网络配置(在下一次引导 LPAR 时使用该配置)。

    有了这个脚本之后,就不需要单独为每个 LPAR 准备硬编码 IP 地址的 AutoYaST 文件。因此,您只需维护 DHCP 服务器。

清单 1. AutoYaST DHCP 转换脚本
<scripts>
  <init-scripts config:type="list">
    <listentry>
      <filename>network_setup</filename>
      <interpreter>shell</interpreter>
      <source><![CDATA[#!/bin/bash
### Disable ipv6
echo 'install ipv6 /bin/true' >> /etc/modprobe.conf.local

### Variables to Calculate Network Configuration Settings for a static configuration ###
ACTIVE_INTERFACE=`/sbin/ifconfig | grep eth | awk '{print $1}'`
IP_ADDRESS=`/sbin/ifconfig $ACTIVE_INTERFACE | grep 'inet addr' | awk '{print $2}' 
 | sed 's/addr://'`
NETMASK=`/sbin/ifconfig $ACTIVE_INTERFACE | grep 'inet addr' | awk '{print $4}' 
 | sed 's/Mask://'`
BROADCAST=`/sbin/ifconfig $ACTIVE_INTERFACE | grep Bcast: | awk '{ print $3 }' 
 | sed 's/Bcast://'`
NETWORK=`/sbin/ip route list | grep $IP_ADDRESS | awk '{ print $1 }' 
 | sed 's/\/[1-9][1-9]//'`
GATEWAY=`/sbin/route | grep default | awk '{print $2}'`
HOSTNAME=`/usr/bin/host $IP_ADDRESS | awk '{print $5}' | sed '$s/.$//'`

### Setup HOSTNAME
echo "$HOSTNAME" > /etc/HOSTNAME

### Setup Gateway Address
echo "default $GATEWAY - -" > /etc/sysconfig/network/routes

### Setup /etc/hosts with correct host information
HOST=`/usr/bin/host $IP_ADDRESS | awk '{print $5}' | sed '$s/.$//' | cut -d "." -f 1`
echo "$IP_ADDRESS   $HOSTNAME $HOST" >> /etc/hosts

### Network configuration file rewrite for static configuration

INT_CONF_FILE=/etc/sysconfig/network/ifcfg-eth-id-`ifconfig eth0 | grep HWaddr 
 | awk '{ print $5 }' | perl -ne '$var=$_; print lc($var)'`

echo 'DEVICE=eth0' > $INT_CONF_FILE
echo 'BOOTPROTO=static' >> $INT_CONF_FILE
echo "IPADDR=$IP_ADDRESS" >> $INT_CONF_FILE
echo "NETMASK=$NETMASK" >> $INT_CONF_FILE
echo "BROADCAST=$BROADCAST" >> $INT_CONF_FILE
echo "NETWORK=$NETWORK" >> $INT_CONF_FILE
echo 'STARTMODE=onboot' >> $INT_CONF_FILE
echo 'TYPE=Ethernet' >> $INT_CONF_FILE

### Restart Network
/etc/init.d/network restart
      ]]></source>
    </listentry>
  </init-scripts>
</scripts>

步骤 2. 配置 DHCP/BOOTP 和 TFTP 服务器

这个解决方案使用标准的 Linux DHCP 服务器,该服务器是所有主要的 Linux 发行版的一部分。在这一步骤中,需要配置 DHCP 服务器以为新的 LPAR 提供网络引导信息。初始代码通过 Trivial File Transfer Protocol(TFTP)服务器装载到 LPAR。要设置网络引导,必须将 DHCP 服务器和 TFTP 服务器装载到网络中的服务器。

这个解决方案使用的 DHCP 服务器并没有配置为动态地向网络中的系统提供 TCP/IP 地址,但它能够在同一个网络上和担任这一传统角色的 DHCP 服务器共存。即使 DHCP 服务器所在的网络与引导系统的网络不同,也可以使用这种类型的配置。例如,它可以通过德克萨斯州的服务器动态地引导在纽约的系统。

要使 lpar_netboot 命令能够按照这个解决方案的 步骤 3 那样工作,则需要为每个安装的 LPAR 配置 DHCP 服务器。这个方法的优点是:自动安装 LPAR 所需的所有配置信息都包含在 dhcpd.conf 文件中。因此,在前面步骤中更改的 AutoYaST 文件不需要包含任何用于定义 LPAR 网络配置的硬编码信息。

清单 2 包含了一个示例 dhcp.conf 文件。使用这个示例作为一个模型,并为每个需要配置的 LPAR 添加额外的 host 定义。本文 下载 小节的压缩文件包含一个名为 addsystem 的脚本,您可以使用它来自动化 dhcpd.conf 文件的编辑过程。

每次更改 dhcpd.conf 文件时,必须重启 DHCP 服务器使更改生效。

清单 2. 示例 dhcpd.conf 文件
ddns-update-style ad-hoc;
allow bootp;
subnet 0.0.0.0 netmask 0.0.0.0 {
	host rcc-hny-poc-003 {
		option host-name 	"myserver.cloud9.ibm.com";
		fixed-address 		192.168.0.203;
		hardware ethernet	16:E9:10:94:87:03;
		filename			"inst64";
	}
	next-server 		192.168.0.201;
	option routers 		192.168.0.201;
}

下面详细说明示例 dhcp.conf 文件中的选项:

  • subnet 将该服务器配置为响应其他服务器的请求,而不考虑这些服务器在网络中的位置。因为没有将这个 DHCP 服务器配置为动态寻址,所以它将响应来自 LPAR 的引导请求,并且不影响在网络上进行正常的 DHCP 操作。
  • host 部分定义每个需要配置的 LPAR。配置文件中可以拥有多个 host 部分。这个示例的 host 部分仅包含安装 LPAR 所需的最少选项(并且以后将 LPAR 作为 DHCP 客户机引导时还可以使用这个选项)。
    • host-name 是 DNS 分配给客户机的 IP 地址的名称。如果客户机没有 DNS 条目,这个选项应该指定需要包含在 LPAR 的本地主机文件中的名称。
    • fixed-address 是分配给 LPAR 的 IP 地址。这个指定的地址用于代替 DHCP 服务器的默认地址池。这样做的优点是在每次引导操作系统时为 LPAR 保留这一 IP 地址。
    • hardware ethernet 指定 LPAR 的 MAC 地址。使用这个选项在安装的 BOOTP 阶段将 LPAR 和 host 条目关联起来。
    • filename 指定响应 BOOTP 请求时需要装载的 Linux 内核。必须能够通过由 next-server 选项指定的服务器上的 TFTP 访问这个文件。或者,如果忽略 next-server,则必须能够通过 DHCP 服务器上的 TFTP 访问这个文件。
  • next-server 指定服务器的地址。在这个服务器上,通过 TFTP 可以访问在 filename 选项中定义的 Linux 内核。如果 TFTP 服务器与 DHCP 服务器都在同一个服务器中,则可以跳过这个选项。
  • option routers 指定 TFTP 服务器的地址,前提是将路由器配置为在网络中不将 TFTP 服务器请求转发到 TFTP 服务器。如果 TFTP 服务器和 DHCP 服务器在同一个机器上,则可以跳过这个选项。

可以使用 SLES 发行版中的 atftpd 包配置 TFTP 服务器。TFTP 配置提供一个目录,在这里可以使用 TFTP 下载文件。下载目录通常为 /tftpboot。在 dhcpd.conf 文件中的每个 host 部分的 filename 参数上指定的文件必须位于该下载目录中。

例如,对于网络安装 SUSE,该文件为 inst64 文件,可从 SUSE 安装 CD 的 /suseboot 目录获得。您需要将该文件放到 /tftpboot 目录,确保所有人都有读取它的权限。

步骤 3. 使用 HMC lpar_netboot 命令

就像 HMC 可用于激活现有的 LPAR 一样,它也可用于在一个新的 LPAR 上安装操作系统。虽然 HMC 提供了一个图形用户界面,但所有 HMC 功能也可以通过命令行来使用。通过命令行可以进一步自动化这个步骤。

开始网络安装的 HMC 命令为 lpar_netboot。本文的 参考资料 小节包含详细说明如何使用 lpar_netboot 命令的链接。这个解决方案使用 lpar_netboot 通过网络引导 LPAR。

清单 3 是一个示例 lpar_netboot 命令。根据需求修改这个示例,然后在一个 LPAR 上使用它,并尝试从网络中的服务器引导它。

该示例命令假设:

  • 如本文的前一个步骤所述,配置 DHCP/BOOTP 服务器,使其带有新的 LPAR 的 MAC 地址,并且有一个针对 SUSE 安装程序的条目。
  • 通常将新的 LPAR 作为 DHCP 引导,并且在 dhcpd.conf 文件中包含为它定义的静态 IP 地址。
清单 3. 示例 lpar_netboot 命令
lpar_netboot -f -t ent -m 16E910948703 -s auto -d auto -S 192.168.0.201 -G \
192.168.0.201 -C 192.168.0.203 lpar1 lpar1 SystemA

注意:清单 3 使用反斜杠字符表示连续行;它不是该命令的一部分。输入命令时切勿使用反斜杠。

以下是该示例中所用的参数的详细说明:

  • -m 需要引导的客户机的 MAC 地址。可以通过使用另一种形式的 lpar_netboot 命令获取 MAC 地址。
  • -S 是 DHCP/BOOTP 服务器的 IP 地址。
  • -G 是到达 DHCP/BOOTP 服务器所需的网关的 IP 地址。如果 DHCP/BOOTP 服务器位于本地网络,则改用 DHCP/BOOTP 服务器的 IP 地址。
  • -C 是分配给被引导的客户机的 IP 地址。
  • 命令末尾有 3 个名称:
    • LPAR(lpar1)的 HMC 名
    • LPAR 配置名,默认情况下与 LPAR 本身同名(lpar1
    • 在 HMC 上拥有 LPAR 的服务器的名称(SystemA

本文 下载 小节的压缩文件包含一个名为 autoinstall 的示例脚本。您可以将该脚本安装到 HMC 服务器,以使用本文描述的技术自动安装新的 LPAR。该脚本自动获取 LPAR 的 MAC 地址,接着调用 DHCP addsystem 脚本来配置并重启 DHCP 服务器,然后调用 lpar_netboot 命令安装 LPAR。最后,它调用一个 mkvterm 命令,使您可以看到安装过程。

步骤 4. 使用 -g 参数自动化 lpar_netboot

新的 LPAR 使用本文前面提到的步骤装载 Linux 安装程序。如果从 HMC 打开一个到 LPAR 的控制台连接,就可以看到安装程序的初始屏幕。

要进一步自动化安装,可以使用 lpar_netboot 命令的 -g 参数,将其他参数传递到刚引导的系统的安装程序。Linux 发行版(比如 SUSE 和 Red Hat)允许通过网络完全自动化安装,前提是要将正确的信息传递给安装程序以启动安装。

-g 参数上传递的信息是一个字符串,它包含安装程序查找 SUSE AutoYaST XML 文件和 SUSE 操作系统安装 RPM 所需的信息。该信息的格式由每个发行版进行归档,并且对所有架构都是一样的(i386 和 Power 等)。

清单 4 是 -g 参数的一个示例,它从服务器启动一个自动化安装。根据需要修改这个示例,然后将它和 lpar_netboot 命令一起使用,以开始操作系统的自动化安装。

这个示例假设:

  • 拥有一个在安装服务器上运行的 Web 服务器。这个 Web 服务器可以包含 DHCP 服务器和 TFTP 服务器,但这不是必须的。
  • 已经将 SUSE 安装 CD 映像复制到 Web 服务器文档根目录下的一个目录中。
  • 已经将在本文的 步骤 1 中配置的 AutoYaST.xml 文件的一个副本放置到 SUSE 安装映像所在的 Web 服务器目录中。
清单 4. 示例 lpar_netboot 服务器 -g 参数
-g "hostip=192.168.0.203 netmask=255.255.255.0 \
gateway=192.168.0.1 nameserver=192.168.0.1 insmod=ibmveth \
install=http://192.168.0.201/suse autoyast=http://192.168.0.201/autoyast.xml"

注意:清单 4 使用反斜杠字符表示连续行;它不是该命令的一部分。输入命令时切勿使用反斜杠。

清单 4 中的 insmod 参数装载一个虚拟 Ethernet 适配器。如果当前引导的 LPAR 拥有一个物理 Ethernet 适配器,则不需要该参数。

步骤 5. 重用自动化解决方案

现在,您已经拥有一个在云环境中轻松管理 LPAR 的配置。通过以下步骤添加新的 LPAR:

  1. 在 HMC 上创建 LPAR。
  2. 登录 HMC SSH 界面并运行 lpar_netboot,确定 LPAR 的 MAC 地址。
  3. 使用新的 LPAR 信息重新配置 dhcpd.conf 文件。
  4. 重启 DHCP 服务器使对 dhcpd.conf 的更改生效。
  5. 再次登录 HMC 并运行 lpar_netboot 以在 LPAR 上安装操作系统。

现在,您惟一需要做的就是等待操作系统安装完成。安装完成之后,您的云环境就有了一个新的 LPAR,它已经准备好接受您需要装载的进程。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux, AIX and UNIX
ArticleID=357400
ArticleTitle=自动化 Linux 云安装
publish-date=12082008