vim pxe_ks.sh
关于改进:把各项参数例如IP地址和一些不同设备的不同路径都做成变量
#!/bin/bash
#提示信息
echo "!!!请确认虚拟机是CD/DVD是否设置已连接?"
echo "!!!请确认PXE脚本各项参数是否已修改?"
echo "!!!请确认虚拟机镜像路径是否设置?"
echo "!!!请确认yum是否休眠需要rm -f /var/run/yum.pid?"
echo "!!!未设置可在5秒钟内ctrl+c结束!!"
sleep 5 #睡眠五秒
#判断是否挂载
grep mount_cdrom /etc/fstab > /dev/null 2>&1 #所有输出重定向到null
if [ $? -eq 0 ] ; then
echo "光盘重新加载.."
mount -a
sleep 0
echo "光盘已挂载成功!!"
else
echo "正在挂载光盘.."
echo "/dev/sr0 /mount_cdrom iso9660 defaults 0 0" >> /etc/fstab
echo "正在新建挂载目录.."
sleep 2
mkdir /mount_cdrom
echo "光盘重新加载.."
sleep 2
mount -a
echo "光盘重新加载成功!!"
fi
#安装dhcp
echo "准备安装dhcp.."
ls /usr/share/doc/dhcp*/dhcpd.conf.example > /dev/null 2>&1
if [ $? -eq 0 ] ; then
echo "DHCP已安装!!"
else
echo "正在安装DHCP,请稍后.."
rm -f /var/run/yum.pid
yum -y install dhcp
fi
#配置dhcp
echo "正在配置DHCP配置文件.."
sleep 2
\cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf #反斜杠可以不提示是否覆盖文件
sed -i '36 a\subnet 192.168.5.0 netmask 255.255.255.0 {\n range 192.168.5.160 192.168.5.170;\n next-server 192.168.5.7;\n filename "pxelinux.0";\n}\n' /etc/dhcp/dhcpd.conf
echo "正在重启DHCP.."
systemctl restart dhcpd
#安装xinetd和tftp-server
rpm -qa | grep xinetd
if [ $? -eq 0 ] ; then
echo "xinetd已经安装!!"
else
echo "xinetd正在安装.."
yum -y install xinetd
echo "xinetd已经安装!!"
fi
rpm -qa | grep tftp-server
if [ $? -eq 0 ] ; then
echo "tftp已经安装!!"
else
echo "tftp正在安装.."
yum -y install tftp-server
echo "tftp已经安装!!"
fi
#替换xinetd的tftp配置
sed -i '14d' /etc/xinetd.d/tftp #删除14行
sed -i '13 a\ disable = no' /etc/xinetd.d/tftp #在13行后增加新的14行
#新系统提供pxelinux.0文件
rpm -qa | grep syslinux > /dev/null 2>&1
if [ $? -eq 0 ] ; then
echo 'syslinux已经安装!!'
else
echo '正在安装syslinux..'
yum -y install syslinux
echo 'syslinux安装成功!!'
fi
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
#复制系统安装所必须的引导文件
echo '正在复制系统安装所需的引导文件..'
sleep 2
cp /mount_cdrom/images/pxeboot/vmlinuz /var/lib/tftpboot/
cp /mount_cdrom/images/pxeboot/initrd.img /var/lib/tftpboot/
cp /mount_cdrom/isolinux/vesamenu.c32 /var/lib/tftpboot/
cp /mount_cdrom/isolinux/boot.* /var/lib/tftpboot/
if [ $? -eq 0 ] ; then
echo '复制成功!!'
fi
#为引导程序制作一个配置文件
echo '正在为引导程序制作配置文件..'
sleep 2
if [ -e /var/lib/tftpboot/pxelinux.cfg ] ; then
echo "pxelinux.cfg已存在,无需制作!!"
else
mkdir /var/lib/tftpboot/pxelinux.cfg
fi
\cp /mount_cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
sed -i '1d' /var/lib/tftpboot/pxelinux.cfg/default
sed -i '1 i\default linux' /var/lib/tftpboot/pxelinux.cfg/default
sed -i '64d' /var/lib/tftpboot/pxelinux.cfg/default
sed -i '63 a\ append initrd=initrd.img inst.stage2=ftp://192.168.5.7/centos ks=ftp://192.168.5.7/centos/ks.cfg quiet' /var/lib/tftpboot/pxelinux.cfg/default
if [ $? -eq 0 ] ; then
echo '引导程序配置文件制作完成!!'
fi
#安装ftp
rpm -qa | grep vsftpd
if [ $? -eq 0 ] ; then
echo 'vsftpd已经安装!!'
else
echo '正在安装vsftpd'
yum -y install vsftpd
echo 'vsftpd安装成功!!'
fi
#复制完整操作系统到tftp配置文件指定的路径
mkdir /var/ftp/centos
echo '正在复制完整操作系统,请稍后几分钟..'
cp -r /mount_cdrom/* /var/ftp/centos/
echo '完整操作系统复制成功!!'
#为新系统制作ks文件
echo '正在制作ks文件..'
slepp 2
cp /root/anaconda-ks.cfg /var/ftp/centos/ks.cfg
chmod +r /var/ftp/centos/ks.cfg
sed -i '22d' /var/ftp/centos/ks.cfg
sed -i '21 a\url --url="ftp://192.168.5.7/centos"' /var/ftp/centos/ks.cfg
sed -i '68 a\reboot\neula --agreed' /var/ftp/centos/ks.cfg
echo 'ks文件制作成功!!'
#重启服务,关闭防火墙,关闭使用syslinux
echo '正在重启服务,关闭防火墙'
systemctl restart tftp
systemctl restart xinetd
systemctl restart vsftpd
systemctl restart dhcpd
systemctl stop firewalld
setenforce 0
echo '重启服务成功,关闭防火墙成功!!'
#结束
yum -y install sl > /dev/null 2>&1 #一个小火车程序
echo '.......................'
echo '.......................'
echo 'PXE-KS操作系统无人值守程序部署成功!!'
echo '.......................'
echo '.......................'
sl