用shell脚本实现pxe自动化部署

我们大家对pxe应该都有一定的了解,下面看一下官方的解释:

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统。

我们平时可以用一台虚拟机来实现pxe的整个功能,然后把这台机器作为服务器,其他客服端通过访问我们,实现自动安装linux操作系统。

  • 需要用到的软件有dhcp,TFTP,nfs(或者ftp,http),平时我们需要自己一步一步的安装这些软件,然后对他们进行配置,才能形成一个完整的pxe,在这里,我就不对这些步骤做具体阐述,我把整个过程写成了一个shell脚本,运行完这个脚本以后,pxe就形成了。
    pxe的大致流程如图:
    在这里插入图片描述
  • 我大概描述一个实现PXE的过程:先看图
  • 1、我们是把dhcp服务器、tftp服务器和共享服务(nfs)都放到了同一台虚拟机。
  • 2、所以,我们实现要做的就是安装所需要服务的软件,然后就是准备操作系统的完整镜像,将其共享。
  • 3、基本就差不多了吧,我直接在我的代码里面注释吧。我的是安装RHEL7.4
[root@server-10 /test]# cat pxe.sh 
#!/bin/bash
# 描述:pxe自动化部署
# 相关软件:需要安装dhcp,tftp,tftp-server,nfs-utils

#交互式页面,先输入服务器的ip,以及本机的/dev/sr0所在位置
read -p "Please enter your Ip:" ip   #服务器ip
read -p "Please enter your ISO file path:" iso  #镜像文件的挂载目录
tftp=/var/lib/tftpboot/     #tftp的主工作目录,也是这个实验最重要的目录,经常用到,所以定义成变量

# 安装相关软件,syslinux是用来提供pxelinux.0的,rpcbind是帮助nfs请求端口信息的
yum install -y dhcp tftp tftp-server syslinux nfs-utils rpcbind  >/dev/null 2>/var/log/pxe.error
#安装信息直接扔到垃圾桶,错误信息保留

#配置dhcp的配置文件
cat >/etc/dhcp/dhcpd.conf <<EOF
ddns-update-style interim;
ignore client-updates;
subnet 192.168.72.0 netmask 255.255.255.0 {
        range 192.168.72.20  192.168.72.30;
        next-server $ip;   #为tftp服务器的地址,这里我们是公用一台
        filename "pxelinux.0";      #不用写绝对路径,写相对路径就可以,相对的就是/var/lib/tftpboot/这个主工作目录
}
EOF

#准备好需要的环境,内核、镜像等,最好自己先清理/var/lib/tftpboot/,确保里面没有以前残留的,本来想在脚本直接用rm -rf /var/lib/tftpboot/* ,但是。这样确实很不安全,在实际工作中,要是这个目录下有你需要的东西,执行完这个,那你可能就要gg了,所以,还是自己手动操作吧!
cp /usr/share/syslinux/pxelinux.0 $tftp
cp $iso/isolinux/vmlinuz $tftp
cp $iso/isolinux/initrd.img $tftp
mkdir $tftp/pxelinux.cfg/

# nfs服务,并让他立即生效
ip1=`echo $ip | awk -F '.' '{print $1"."$2"."$3}'`.0 #找到ip的网段
cat >/etc/exports << EOF
$iso $ip1/255.255.255.0(ro)
EOF
exportfs -rv >/dev/null 2>/var/log/pxe.error  #让修改立即生效

#自定义页面
cat >$tftp/boot.msg <<EOF   
############################################################
#                                                          #    
# ----1-To Install RHEL7.4 Type 1  Press Enter -------     #                     
#                                                          #                                     
# ----2-To Install RHEL6.5 Type 2  Press Enter ------      #        
#                                                          #                                     
# ----3-To Install RHEL7.4 Type 3  Press Enter -------     #       
#                                                          #                                     
############################################################
EOF

cat >$tftp/pxelinux.cfg/default <<EOF
default 1     
timeout 600
display boot.msg    
prompt 1

label 1     
	kernel vmlinuz   #内核名字必须和主工作目录里面的一样,镜像也是
	append initrd=initrd.img  method=nfs://$ip/iso    #nfs共享的路径
label 2     #如果要弄其他系统,可以多加几个label
	kernel vmlinuz6-2
	append initrd=initrd6-2.img
EOF
#启动服务
systemctl restart dhcpd  
systemctl restart tftp
systemctl restart rpcbind
systemctl restart nfs

echo "OK"  #这句话并也没有什么用,只是个人觉得脚本执行完得输出一些东西而已!

总结:好了,这就是我的脚本啦,我自己暂时只安装了红帽7 ,如果想安装更多的系统,直接在/var/lib/tftp/pxelinux.cfg/default里面加label就可以了,但前提是,要先准备好镜像文件,可以共享,也可以直接拷贝镜像,也可以用脚本实现呀!

猜你喜欢

转载自blog.csdn.net/ssiyla/article/details/82958529