云计算:自动化 Linux 云安装

youruncloud 2009-01-27

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

    简化操作系统安装过程能够减少管理云计算环境所需的时间。本文讲解如何在新的 IBM Power? System 或 System p? LPAR 上自动安装 SUSE Linux?。这种安装方法也适用于安装 Red Hat Linux 或 AIX?。
    云计算的特性之一就是能够将应用程序从一个处理器环境移动到另一个。这个特性要求在移动应用程序之前 存在一个接收它的目标操作系统。如果能够自动化新操作系统的安装,不是很好吗?

    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>

相关推荐