一键自动化部署PXE集成环境!快!准!狠!省事!!!

#!/bin/bash

#创建脚本运行时存放日志的目录
mkdir /dev/PxeLogs/
#挂载软件仓库所需要的文件目录
mount /dev/cdrom /media/cdrom




#DHCP服务
#1.安装软件包
echo -e "正在安装软件包...."
yum install -y httpd dhcp* tftp* &> /dev/PxeLogs/yum.log
if [ $? -eq 0 ]
then
    echo -e "软件安装完毕!!\n\n"
else
    echo -e "安装失败!!\n\n"
    cat '/dev/logs/yum.log'
fi

#2.关闭防火墙和更改SELinux为宽容模式
systemctl stop firewalld.service > /dev/PxeLogs/firewall.log
if [ $? -eq 0 ]
then
    echo -e "防火墙关闭成功!!\n\n"
else
    echo -e "防火墙关闭失败!!\n\n"
    cat '/dev/PxeLogs/firewall.log'
fi

setenforce 0 > /dev/PxeLogs/SELinux.log
if [ $? -eq 0 ]
then
    echo -e "SELinux宽容模式设置完成!!\n\n"
else
    echo -e "SELinux宽容模式设置失败!!\n\n"
    cat '/dev/PxeLogs/SELinux.log'
fi

#3.配置DHCP服务器
echo "正在获取本地IP地址和网关...."
#(1)获取本机IP地址和网关
ifconfig | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" > /dev/PxeLogs/ip.log
IP=$(ps -ef | awk 'NR==1' /dev/PxeLogs/ip.log)
GatWay=$(ps -ef | awk 'NR==3' /dev/PxeLogs/ip.log)
echo "本地IP地址为:$IP"
echo "本地网关为:$GatWay"
echo -e "\n\n"

#(2)获取本地的网段和可分配IP地址范围
echo "正在计算可用网段...."
function Network(){
#!/bin/bash
set -eu
# 1.ip掩码拆分并进行健壮性判断
E_NOARGS=65
if [ -z "$1" ];then
    echo "Usage:`basename $0` ip/mask"
    exit $E_NOARGS
fi
IP_MASK=$1
IP=`echo $IP_MASK |sed -En 's/^(.*)\/([0-9]{1,2})/\1/p'`
NET_MASK=`echo $IP_MASK |sed -En 's/^(.*)\/([0-9]{1,2})/\2/p'`
if [[ ! $IP =~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]];then
   echo  "Ip address $IP is invalid . Useage: ip/mask" 
   exit 2
elif [ $NET_MASK -gt 32 -o $NET_MASK -lt 0 ];then
   echo "netmask should be in 0-32,your input netmask is $NET_MASK; Useage: ip/mask"
   exit 3
elif [ $NET_MASK -eq 32 ];then
    echo "主机位是32位,可用地址为$IP"
    exit 4
fi

# 2.求出ip第几段前几位作运算
IP_SUB1=`echo $IP |cut -d. -f1`
IP_SUB2=`echo $IP |cut -d. -f2`
IP_SUB3=`echo $IP |cut -d. -f3`
IP_INDEX=`echo $[$NET_MASK/8+1]`
IP_SUB=`echo $IP |cut -d. -f$IP_INDEX`
IP_SUB_BINARY=`echo "obase=2;$IP_SUB" |bc |xargs printf "%08d"`
IP_SUB_NET_BIT=$[$NET_MASK%8]
IP_SUB_HOST_BIT=$[8-$NET_MASK%8]

# 3.网络位不变,主机位全为0
AVAILABLE_MIN_IP=$(echo $IP_SUB_BINARY|head -c${IP_SUB_NET_BIT} |xargs printf "ibase=2;%s`echo 00000000 |head -c${IP_SUB_HOST_BIT}`\n"|bc)
AVAILABLE_MAX_IP=$(echo $IP_SUB_BINARY|head -c${IP_SUB_NET_BIT} |xargs printf "ibase=2;%s`echo 11111111 |head -c${IP_SUB_HOST_BIT}`\n"|bc)

# 4.输出可用地址范围
case $IP_INDEX in
1)
    #网络号
    echo "${AVAILABLE_MIN_IP}.0.0.0"
    #可用最小IP地址 
    echo "${AVAILABLE_MIN_IP}.0.0.1"
    #可用最大IP地址 
    echo "${AVAILABLE_MAX_IP}.255.255.254"
    ;;
2)
    #网络号
    echo "${IP_SUB1}.${AVAILABLE_MIN_IP}.0.0"
    #可用最小IP地址 
    echo "${IP_SUB1}.${AVAILABLE_MIN_IP}.0.1"
    #可用最大IP地址 
    echo "${IP_SUB1}.${AVAILABLE_MAX_IP}.255.254"
    ;;
3)
    echo "${IP_SUB1}.${IP_SUB2}.${AVAILABLE_MIN_IP}.0"
    echo "${IP_SUB1}.${IP_SUB2}.${AVAILABLE_MIN_IP}.1"
    echo "${IP_SUB1}.${IP_SUB2}.${AVAILABLE_MAX_IP}.254"
    ;;
4)
    echo "${IP_SUB1}.${IP_SUB2}.${IP_SUB3}.${AVAILABLE_MIN_IP}"
    echo "${IP_SUB1}.${IP_SUB2}.${IP_SUB3}.$[${AVAILABLE_MIN_IP}+1]"
    echo "${IP_SUB1}.${IP_SUB2}.${IP_SUB3}.$[${AVAILABLE_MAX_IP}-1]"
    ;;
*)
    echo "Calculator Error Exception!"
esac
}

#调用函数,计算出网络号和可用网段的范围
Network $IP/24 > /dev/PxeLogs/Network.log
SubNet=$(ps -ef | awk 'NR==1' /dev/PxeLogs/Network.log)
MinIP=$(ps -ef | awk 'NR==2' /dev/PxeLogs/Network.log)
MaxIP=$(ps -ef | awk 'NR==3' /dev/PxeLogs/Network.log)
echo "可用网段为:$SubNet"
echo "最小可用IP地址为:$MinIP"
echo "最大可用IP地址为:$MaxIP"
echo -e "\n\n"

#(3)编写DHCP配置文件
echo "正在编写DHCP配置文件...."
echo "filename \"pxelinux.0\";
next-server $IP;
subnet $SubNet netmask 255.255.255.0 {
    option routers $GatWay;
	option subnet-mask 255.255.255.0;
	option domain-name-servers 114.114.114.114;
	range dynamic-bootp $MinIP $MaxIP;
	default-lease-time 60;
	max-lease-time 60;
}" > /etc/dhcp/dhcpd.conf
if [ $? -eq 0 ]
then
    echo -e "DHCP配置文件编写成功!!\n\n"
else
    echo -e "DHCP配置文件编写失败!!\n\n"
fi

#(4)启动DHCP服务并自启动
echo "正在启动DHCP服务...."
systemctl enable --now dhcpd > /dev/PxeLogs/dhcp.log
if [ $? -eq 0 ]
then
    echo -e "DHCP服务启动成功!!\n\n"
else
    echo -e "DHCP服务启动失败!!\n\n"
    cat '/dev/PxeLogs/dhcp.log'
fi




#TFTP服务
echo -e "正在配置TFTP服务....\n\n"
#1.创建pxelinux.cfg目录
mkdir /var/lib/tftpboot/pxelinux.cfg

#拷贝文件
echo -e "正在拷贝配置文件....\n\n"
function tftp(){
cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/
cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/
cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /usr/share/syslinux/ldlinux.c32 /var/lib/tftpboot/
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
cp /usr/share/syslinux/libutil.c32 /var/lib/tftpboot/
cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/
cp /usr/share/syslinux/libcom32.c32 /var/lib/tftpboot/
}
tftp
if [ $? -eq 0 ]
then
    echo -e "配置文件拷贝成功!!\n\n"
else
    echo -e "配置文件拷贝失败!!\n\n"
fi

#设置开机自启动
systemctl enable --now tftp.socket
echo -e "TFTP服务启动成功!!\n\n"




#ISO镜像
echo "正在尝试挂载镜像光盘...."
#1.复制响应文件,并编辑相对应参数
cp anaconda-ks.cfg /var/www/html/ks.cfg
chmod 777 /var/www/html/ks.cfg
mkdir /var/www/html/pub
mount /dev/sr0 /var/www/html/pub/
if [ $? -eq 0 ]
then
    echo -e "载镜像光盘成功!!\n\n"
else
    echo -e "载镜像光盘失败!!\n\n"
fi

#2.编辑响应文件
echo "正在编辑响应文件...."
#删除repo --name="AppStream" --baseurl=file:///run/install/sources/mount-0000-cdrom/AppStream
#删除cdrom ---- 本地安装
sed -i '/repo --name/d' /var/www/html/ks.cfg
sed -i '/cdrom/d' /var/www/html/ks.cfg
#安装界面设置,最小化
sed -i '/.*@^graphical-server-environment*/c\@^minimal-environment' /var/www/html/ks.cfg
#配置网络仓库
sed -i '$a\url --url="http://'$IP'/pub"' /var/www/html/ks.cfg
#重启
sed -i '$a\reboot' /var/www/html/ks.cfg
if [ $? -eq 0 ]
then
    echo -e "响应文件编辑成功!!\n\n"
else
    echo -e "响应文件编辑失败!!\n\n"
fi

#3.编辑/var/lib/tftpboot/pxelinux.cfg/default文件
echo "正在编辑default文件...."
sed -i '/.*vesamenu.c32*/c\default linux' /var/lib/tftpboot/pxelinux.cfg/default
sed -i '/.*append initrd=initrd.img*/c\append initrd=initrd.img inst.ks=http://'$IP'/ks.cfg' /var/lib/tftpboot/pxelinux.cfg/default
if [ $? -eq 0 ]
then
    echo -e "default文件编辑成功!!\n\n"
else
    echo -e "default文件编辑失败!!\n\n"
fi

#4.重启http服务
echo "正在尝试重启http服务器...."
systemctl restart httpd
if [ $? -eq 0 ]
then
    echo -e "http服务器重启成功!!\n\n"
else
    echo -e "http服务器重启成功!!\n\n"
fi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值