shell脚本+PXE实现无人值守装机(完整shell代码)

PXE (preboot execute environment,预启动执行环境) 是由 Intel 公司设计的协议,它可以使计算机通过网络启动。原理简图如下:

 

 

shell脚本+PXE实现无人值守装机(完整shell代码)_第1张图片

首先,dhcpd服务为待装机的主机分配IP地址。

在主机得到IP地址后,会从tftp服务器上请求得到pxelinux.0,default配置文件以及vmlinux initrd。

然后,当主机拥有这些文件后,会向vsftp服务器请求得到系统镜像资源,从而开启装机。

注意,在本图中,ks.cfg文件作为装机的参数配置文件,是由pykickstar制作的。

我们先来看看制作ks.cfg的流程:

(1)yum源配置:
[development]        //名字必须是这个
name=centos7u3
baseurl=file:///mnt/centos7u3
enabled=1
gpgcheck=0
(2)开启kickstart进程:
# yum install system-config-kickstart -y
# system-config-kickstart

(3)按照引导操作:

图一:选择语言,时区

shell脚本+PXE实现无人值守装机(完整shell代码)_第2张图片

图二:设置ftp服务器,这里FTP目录虽然绝对路径是/var/ftp/centos7u3,但是填写只需要centos7u3

shell脚本+PXE实现无人值守装机(完整shell代码)_第3张图片

图三:

shell脚本+PXE实现无人值守装机(完整shell代码)_第4张图片

图四:这里的重点是布局,点击添加,相当于手动装机选择挂在点,并配置大小的操作。

shell脚本+PXE实现无人值守装机(完整shell代码)_第5张图片

后续步骤不再赘述。

(4)PXE配置:

首先我们需要配置服务:dhcp,tftp,vsftp

安装:

# yum install dhcp tftp-server tftp vsftpd lftp syslinux xinetd -y

配置:

1.DHCP:
DHCP:端口67 68
# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# vim /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0 {   //网段和子网掩码
range 192.168.10.201 192.168.10.210;               //dhcp池分配IP地址范围
next-server 192.168.10.12;                                    //配置PXE主机的IP
filename "pxelinux.0";
}

2.TFTP:
DHCP:端口69
# rpm -ql tftp-server
/etc/xinetd.d/tftp
/var/lib/tftpboot
# vim /etc/xinetd.d/tftp
disable = no


# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/     //配置上述pxelinux.0文件
# mkdir /var/lib/tftpboot/pxelinux.cfg
# mount /dev/sr0 /mnt
# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default         //配置上述default配置文件
# vim pxelinux.cfg/default
1 default linux                     //请修改为linux
2 timeout 60                       //建议修改为60
61 label linux
62 menu label ^Install CentOS Linux 7
63 kernel vmlinuz
64 append initrd=initrd.img ks=ftp://192.168.2.241/ks.cfg                 //请将制作好的ks.cfg文件放置到配置PXE的主机的/var/ftp下面
# cp /mnt/isolinux/* /var/lib/tftpboot/

3. VSFTPD:
# cd /var/ftp
# mkdir centos7u3
将镜像挂载到centos7u3目录

启动服务:

# systemctl start dhcpd
# systemctl start xinetd
# systemctl start vsftpd

关闭防火墙和selinux

上述过程可使用shell脚本实现自动化装机:

#!/bin/bash
# PXE装机脚本
# ========配置yum源============
[ -d /mnt/centos7u3 ] || mkdir /mnt/centos7u3/
rm -rf /etc/yum.repos.d/*
cat > /etc/yum.repos.d/local.repo < /dev/null
yum clean all &> /dev/null
# ========安装服务===================
yum install dhcp tftp-server tftp  vsftpd lftp  syslinux xinetd expect -y &> /dev/null
# ========配置DHCP===================
[ -f /etc/dhcp/dhcpd.conf ] && rm -rf /etc/dhcp/dhcpd.conf
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# 获取本主机的IP地址
HOST_IP=`ifconfig ens33 | awk '/\/{print $2}'`
# 获取本主机的网络位
NETNO=`echo $HOST_IP|awk -F"." '{print $3}'`
read -p "请输入起始主机号" STARTNO
read -p "请输入终止主机号" ENDNO
sed -i '27c\subnet 192.168.'$NETNO'.0 netmask 255.255.255.0 {' /etc/dhcp/dhcpd.conf
sed -i '27a\\trange 192.168.'$NETNO'.'$STARTNO' 192.168.'$NETNO'.'$ENDNO';\n\tnext-server '$HOST_IP';\n\tfilename "pxelinux.0";' /etc/dhcp/dhcpd.conf
# ========配置TFTP===================
sed -i '/\/s@\@no@' /etc/xinetd.d/tftp
cp /usr/share/syslinux/pxelinux.0   /var/lib/tftpboot/
[ -d /var/lib/tftpboot/pxelinux.cfg ]|| mkdir /var/lib/tftpboot/pxelinux.cfg
umount /dev/sr0 &> /dev/null
mount  /dev/sr0 /mnt &> /dev/null
cp /mnt/isolinux/isolinux.cfg  /var/lib/tftpboot/pxelinux.cfg/default
sed -i '1c\default linux' /var/lib/tftpboot/pxelinux.cfg/default
sed -i '2c\timeout 60' /var/lib/tftpboot/pxelinux.cfg/default
sed -i '64c\  append initrd=initrd.img ks=ftp://'$HOST_IP'/ks.cfg' /var/lib/tftpboot/pxelinux.cfg/default
cp /mnt/isolinux/* /var/lib/tftpboot/
# =========配置VSFTPD=================
umount /dev/sr0 &> /dev/null
[ -d /var/ftp/centos7u3 ] || mkdir /var/ftp/centos7u3
mount /dev/sr0 /var/ftp/centos7u3 &> /dev/null
# =========写入ks.cfg文件=============
cat > /var/ftp/ks.cfg < /dev/null
systemctl start xinetd &> /dev/null
systemctl start vsftpd &> /dev/null
# =========关闭firewalld和selinux======
systemctl stop firewalld &> /dev/null
systemctl disable firewalld &> /dev/null
setenforce 0 &> /dev/null
sed -i '7c\SELINUX=disabled' /etc/selinux/config

 

你可能感兴趣的:(CentOS)