XenServer 6.x PXE自動化佈署:linux
測試環境:win10 + Tiny pxe server 1.0.2,採用gpxelinux.0bash
時間:2017.1.10dom
PXE遠程安裝:post
1)default文件:從光盤的/boot/isolinux下,取得isolinux.cfg文件,作爲default文件的藍本,而後,修改下面幾項測試
。文件路徑:按照實際狀況修改ui
。修改第一行default選項(默認是DEFAULT install),改成menu.c32,以即可以看到菜單,不然看不到。固然不改也不影響。url
。若是要實現自動化佈署,須要在console後面,增長兩項:一項是腳本地址,另外一個是關鍵詞 install(若是漏了這個,安裝時,你會看到讀取到了http指定的腳本,可是就不自動執行)spa
。有些第三方分支系統,可能要放棄gpt模式,也在這裏增長。root_size有些也須要由2G改成4G(改不改好象都是4G)unix
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同樣,但語法徹底不一樣。code
<?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均可以。