XenServer 6.x PXE自动化布署:

测试环境:win10 + Tiny pxe server 1.0.2,采用gpxelinux.0

时间:2017.1.10

 

PXE远程安装:

1)default文件:从光盘的/boot/isolinux下,取得isolinux.cfg文件,做为default文件的蓝本,然后,修改下面几项

      。文件路径:按照实际情况修改

      。修改第一行default选项(默认是DEFAULT install),改为menu.c32,以便可以看到菜单,否则看不到。当然不改也不影响。

      。如果要实现自动化布署,需要在console后面,增加两项:一项是脚本地址,另一个是关键词 install(如果漏了这个,安装时,你会看到读取到了http指定的脚本,但是就不自动执行)

      。有些第三方分支系统,可能要放弃gpt模式,也在这里增加。root_size有些也需要由2G改为4G(改不改好象都是4G)

DEFAULT menu.c32
PROMPT 1
TIMEOUT 50
DISPLAY pg_main
F1 pg_main
F2 pg_help

LABEL install
    KERNEL /xen/boot/isolinux/mboot.c32
    APPEND /xen/boot/xen.gz dom0_max_vcpus=1-2 dom0_mem=752M,max:752M com1=115200,8n1 console=com1,vga --- /xen/boot/vmlinuz xencons=hvc console=hvc0 console=tty0 disable-gpt root_size=4096 answerfile=http://192.168.200.1/answerfile install --- /xen/install.img

 

2)启动后,PXE CLIENT读取default文件,就开始安装,并读取自动应答文件answerfile,功能与kisckstart一样,但语法完全不同。

<?xml version="1.0"?>
<installation>
    <keymap>us</keymap>
    <primary-disk gueststorage="no">sda</primary-disk>
    <root-password>123456a?</root-password>
    <source    type="url">http://192.168.200.1/xen/</source>
    <script    stage="filesystem-populated" type="url">http://192.168.200.1/lx0.sh</script>
    <admin-interface name="eth0" proto="dhcp" />
    <timezone>Etc/UTC</timezone>
</installation>

还可能增加很多内容,可以百度。这个脚本不能象esxi的ks文件一样,具有pre-install, post-install, firtboot-install几个阶段写在同一个文件中的功能。因此,需要分开写。

系统安装完成后,根系统已经安装完成,开始启动之前,执行一个脚本lx0.sh。这是一个标准LINUX脚本,相当于postInstall。网上可以查到几个阶段的意义:filesystem-populated就是安装完成后,第一次重启前执行的。

看一下lx0.sh

#!/bin/sh
#lx.sh--> firstboot-script.sh
#hostlist: ip <---> name , host new name file, firstBootScript will change host name via the file.
#
# By Peter Hu
# 2017.1.10

touch $1/tmp/post-executed
rm -f $1/tmp/first-boot-script.sh
rm -f $1/tmp/hostlist

wget http://192.168.200.1/lx.sh -O $1/tmp/first-boot-script.sh
wget http://192.168.200.1/hostlist -O $1/tmp/hostlist
chmod 777 $1/tmp/first-boot-script.sh
ln -s /tmp/first-boot-script.sh  $1/etc/rc3.d/S99zzpostinstall

这个脚本执行时,目标系统其实被安装完了,但还没有启动,还处在虚拟根系统状态。有些配置需要XEN真正启动后才能执行。因此,这个脚本的目的,就是将XEN启动后,需要执行的脚本下载下来,并让其在机器重启完成后能执行一次脚本。first-boot-script.sh就是机器启动后要执行的脚本。(hostlist文件是供lx.sh使用的一个文件)

lx0.sh执行完成后,系统自动启动,启动成功后,会执行lx0.sh安装的lx.sh文件,这个文件就是完成配置的工作。

#!/bin/bash
# 
# This script support inspurCloud 4.x,xenserver 6.x
#
# By Peter Hu, QQ 332694832
# 2017.1.10
#
# You should change following parameters:
# 1) MGMTDEV="eth0" ; your management NIC name 
# 2) It should read new hostname from file /tmp/hostlist
#---------------------------------------------------------

#Set ip address via DHCP
#----------------------------------------------
MGMTDEV="eth0"

MGMTUUID=$(xe pif-list device=$MGMTDEV --minimal)

IPADDR=$(xe pif-param-list uuid=$MGMTUUID | grep "IP ( RO)" | awk -F: '{print $2}' )
NETMASK=$(xe pif-param-list uuid=$MGMTUUID | grep "netmask ( RO)" | awk -F: '{print $2}')
GATEWAY=$(xe pif-param-list uuid=$MGMTUUID | grep "gateway ( RO)" | awk -F: '{print $2}')
IPADDR=$(echo $IPADDR | tr -d '\n')
NETMASK=$(echo $NETMASK | tr -d '\n')
GATEWAY=$(echo $GATEWAY | tr -d '\n')

xe pif-reconfigure-ip mode=static uuid=$MGMTUUID IP=$IPADDR netmask=$NETMASK gateway=$GATEWAY

#Change HOSTNAME
#----------------------------------------------
if [ -f "/tmp/hostlist" ]; then
   HOSTNEWNAME=$( cat /tmp/hostlist | grep $IPADDR | awk '{print $2}' | tr -d '\n')
   HOSTUUID=$(xe host-list --minimal)
   xe host-set-hostname-live host-uuid=$HOSTUUID host-name="$HOSTNEWNAME"
   xe host-param-set  uuid=$HOSTUUID name-label="$HOSTNEWNAME"
fi

#First boot script finished, remove it
#---------------------------------------------
rm -f /etc/rc3.d/S99zzpostinstall

这个脚本的功能是:读取DHCP得到的IP地址信息,并设成静态。动态获取的DNS不用管,静态IP后自动转成静态。

然后,根据IP地直址,推导出主机名。

hostlist文件内容如下:

192.168.200.1    name1
192.168.200.2    name2
192.168.200.3    name3
192.168.200.144    name-144
192.168.200.244 name-244

以上文件,实验时,除了default外,全部采用unix格式,好象utf-8或ansi都可以。

 

posted on 2017-01-10 14:54  胡彼德  阅读(948)  评论(0编辑  收藏  举报