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都可以。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话