查看: 1026|回复: 6

[其他] shell脚本 centos7一键部署pxe服务脚本

  [复制链接]
发表于 2020-1-11 11:55 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

一键部署centos7 pxe无人值守自动批量安装系统脚本脚本作用: 在centos7上 一键自动部署pxe服务,支持uefi、legacy启动方式引导自动安装系统

pxe介绍:一个在机房可以批量自动安装操作系统的服务

使用脚本前置条件:
1.确保yum可用,可以yum安装dhcp、tftp、xinetd、vsftpd、syslinux、tcpdump等基本服务
2.将iso镜像挂载到/mnt目录下 mount /dev/sr0 /mnt


脚本效果: 脚本会自动安装服务,以部署服务机器的应答文件为模板,即批量安装系统的服务器分区信息、root密码、时区均和服务端相同
测试案例: vmware centos7.7测试ok
                  华为服务器5288 v3 实战批量安装128台
                  hp服务器(型号忘了) 实战批量安装96台
                   浪潮服务器 实战批量安装47台
  1. #/bin/bash
  2. #############################

  3. echo "##############################################"
  4. echo "##      一键部署pxe脚本 使用注意事项       ###"
  5. echo "##        1:确保本地yum源设置ok           ###"
  6. echo "##        2:将镜像挂载到/mnt目录下        ###"
  7. echo "##        3:所有服务器业务网ip相通        ###"
  8. echo "##        4:会自动使用root目录下的        ###"
  9. echo "##        anaconda-ks.cfg应答文件,        ###"
  10. echo "##        其他服务器会按照本机模板批量安装 ###"
  11. echo "##        5:仅在bc7.6、centos7.7测试过    ###"
  12. echo "##############################################"
  13. echo ''

  14. #############设置dhcp服务端
  15. read  -p '请输入本机业务网IP:'  ip
  16. if [ $(echo $ip |awk -F. '{print NF}') -ne 4 ];then
  17.         echo "输入ip错误,请重新输入"
  18.         exit 0
  19. fi
  20. subnet=${ip%%$(echo $ip |awk -F. '{print $4}')}"0"
  21. range1=${ip%%$(echo $ip |awk -F. '{print $4}')}"10"
  22. range2=${ip%%$(echo $ip |awk -F. '{print $4}')}"254"


  23. ######################  设置pxe部署方式: bios启动  usef启动   
  24. <<COMMENT
  25. n=1
  26. cfg='pxelinux.0'
  27. while [ $n -eq 1 ]
  28. do
  29.     read -p "请输入pxe部署启动方式 1.uefi 2.bios 请选择1或者2:" start
  30.     if [ $start -eq 1 ];then
  31.         cfg="bootx64.efi"      
  32.         n=0
  33.     elif [ $start -eq 2 ];then
  34.         cfg='pxelinux.0'
  35.         n=0
  36.     else
  37.         echo  "输入错误"
  38.     fi
  39.      
  40. done
  41. COMMENT








  42. ###########安装pxe需要的基础服务
  43. yum install -y dhcp xinetd tftp-server syslinux vsftpd tcpdump >/dev/null
  44. echo "-----------------检查是否安装完成----------------"
  45. for i in {'dhcp','xinetd','tftp-server','vsftpd','syslinux','tcpdump'}
  46. do
  47.         rpm -q $i>/dev/null
  48.         if [ $? -eq 0 ];then
  49.                 echo -e "      $i    \033[32m 安装成功 \033[0m    "
  50.         else
  51.                 echo -e "      $i   \033[31m 未安装 \033[0m    "
  52.         fi
  53. done
  54. echo "-------------------全部安装完成-----------------"
  55. echo ''
  56. #echo "-------------------开始设置dhcp服务-------------"
  57. cat>/etc/dhcp/dhcpd.conf<<EOF
  58. log-facility local7;
  59. allow booting;
  60. allow bootp;
  61. option space pxelinux;
  62. option pxelinux.magic code 208 = string;
  63. option pxelinux.configfile code 209 = text;
  64. option pxelinux.pathprefix code 210 = text;
  65. option pxelinux.reboottime code 211 = unsigned integer 32;
  66. option architecture-type code 93 = unsigned integer 16;
  67. subnet $subnet netmask 255.255.255.0 {
  68.   range $range1 $range2;
  69.   option routers $ip;
  70.   next-server $ip;
  71.   if option architecture-type = 00:07 or
  72.      option architecture-type = 00:09 {
  73.        filename "bootx64.efi";
  74.        }
  75.   else {
  76.        filename "pxelinux.0";
  77.        }
  78.          
  79. }
  80. EOF
  81. ##判断dhcp服务起来没有#############
  82. systemctl restart dhcpd>/dev/null
  83. systemctl status dhcpd>/dev/null
  84. if [ $? -eq 0 ];then
  85.         echo -e "  dhcp服务    \033[32m 启动成功 \033[0m    "
  86. else
  87.         echo -e "  dhcp服务    \033[31m 启动失败 \033[0m    "
  88. fi

  89. #####设置xinetd服务#################
  90. sed -i 's/^.*disable.*$/disable=no/g'   /etc/xinetd.d/tftp
  91. grep 'disable=no' /etc/xinetd.d/tftp>/dev/null
  92. if [ $? -eq 0 ];then
  93.         echo -e "  xintd服务   \033[32m 设置成功 \033[0m    "
  94. else
  95.         echo -e "  xinetd服务    \033[31m 设置失败 \033[0m    "
  96. fi
  97. systemctl restart xinetd>/dev/null
  98. systemctl status xinetd>/dev/null
  99. if [ $? -eq 0 ];then
  100.         echo -e "xinetd服务    \033[32m 启动成功 \033[0m    "
  101. else
  102.         echo -e "xinetd服务    \033[31m 启动失败 \033[0m    "
  103. fi



  104. ###############设置syslinux服务###########
  105. cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot
  106. cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot
  107. cp /mnt/isolinux/{vesamenu.c32,boot.msg} /var/lib/tftpboot
  108. cp /mnt/EFI/BOOT/BOOTX64.EFI       /var/lib/tftpboot/bootx64.efi
  109. cp /mnt/EFI/BOOT/grub.cfg               /var/lib/tftpboot/grub.cfg  
  110. cp /mnt/EFI/BOOT/grubx64.efi       /var/lib/tftpboot/grubx64.efi
  111. mkdir -p /var/lib/tftpboot/pxelinux.cfg
  112. cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

  113. num=$(ls /var/lib/tftpboot |wc -l)
  114. if [ $num -gt 6 ];then
  115.         echo -e "\033[32m 引导文件已成功复制到tftp目录下 \033[0m    "
  116. else
  117.         echo -e "\033[31m 引导文件复制到tftp目录失败 \033[0m    "
  118. fi

  119. systemctl restart tftp>/dev/null
  120. systemctl status  tftp>/dev/null
  121. if [ $? -eq 0 ];then
  122.         echo -e "  tftp服务    \033[32m 启动成功 \033[0m    "
  123. else
  124.         echo -e "  tftp服务    \033[31m 启动失败 \033[0m    "
  125. fi

  126. #######bios启动  修改pxelinux.cfg文件 ################
  127. sed -i '1c default linux' /var/lib/tftpboot/pxelinux.cfg/default
  128. sed -i '2c timeout 5' /var/lib/tftpboot/pxelinux.cfg/default
  129. sed  -i "0,/^.*append.*$/s// append initrd=initrd.img inst.stage2=ftp:\/\/$ip ks=ftp:\/\/$ip\/pub\/ks.cfg quiet  /" /var/lib/tftpboot/pxelinux.cfg/default

  130. grep "$ip" /var/lib/tftpboot/pxelinux.cfg/default>/dev/null
  131. if [ $? -eq 0 ];then
  132.         echo -e "  bios引导文件   \033[32m 设置成功 \033[0m    "
  133. else
  134.         echo -e "  bios引导文件    \033[31m 设置失败 \033[0m    "
  135. fi




  136. #######uefi启动  修改grub.cfg文件
  137. sed  -i 's/default="1"/default="0"/g' /var/lib/tftpboot/grub.cfg
  138. sed  -i 's/timeout=60/timeout=5/g' /var/lib/tftpboot/grub.cfg
  139. sed  -i  "0,/^.*linuxefi.*$/s//   linuxefi  (tftp)\/vmlinuz inst.repo=ftp:\/\/$ip ks=ftp:\/\/$ip\/pub\/ks.cfg  ip=dhcp    /" /var/lib/tftpboot/grub.cfg
  140. sed  -i "0,/^.*initrdefi.*$/s//  initrdefi (tftp)\/initrd.img   /" /var/lib/tftpboot/grub.cfg

  141. grep '(tftp)/initrd.img ' /var/lib/tftpboot/grub.cfg>/dev/null
  142. if [ $? -eq 0 ];then
  143.         echo -e "  uefi引导文件   \033[32m 设置成功 \033[0m    "
  144. else
  145.         echo -e "  uefi引导文件    \033[31m 设置失败 \033[0m    "
  146. fi


  147. ############################复制镜像到ftp目录下##############################
  148. ftp_num=$(ls /var/ftp |wc -l)
  149. if [ $ftp_num -gt 4 ];then
  150.         echo -e "\033[32m 镜像文件已成功复制到ftp目录下 \033[0m    "
  151. else
  152.         nohup cp -r /mnt/* /var/ftp/>/dev/null 2>&1 &  
  153.         sleep 3
  154.         while :
  155.         do
  156.                 ps -ef |grep 'cp -r' |grep -v 'grep'>/dev/mull
  157.                 if [ $? -eq 0 ];then
  158.                         echo -ne '\r'
  159.                         echo -ne '--正                                      \r'
  160.                         #sleep 1
  161.                         echo -ne '----正在                                  \r'
  162.                         sleep 1
  163.                         echo -ne '------正在复                              \r'
  164.                         #sleep 1
  165.                         echo -ne '--------正在复制                          \r'
  166.                         sleep 1
  167.                         echo -ne '----------正在复制镜                      \r'
  168.                         #sleep 1
  169.                         echo -ne '------------正在复制镜像                  \r'
  170.                         sleep 1
  171.                         echo -ne '--------------正在复制镜像到              \r'
  172.                         #sleep 1
  173.                         echo -ne '----------------正在复制镜像到ftp录       \r'
  174.                         sleep 1
  175.                         echo -ne '------------------正在复制镜像到ftp目录   \r'
  176.                         sleep 1
  177.                         echo -ne '                                          \r'
  178.                 else
  179.                         break
  180.                 fi      
  181.         done      

  182.          



  183.         ftp_num=$(ls /var/ftp |wc -l)
  184.         if [ $ftp_num -gt 4 ];then
  185.                 echo -e "\033[32m 镜像文件已成功复制到ftp目录下 \033[0m    "
  186.         else
  187.                 echo -e "\033[31m 镜像文件复制到ftp目录失败 \033[0m    "
  188.         fi
  189. fi

  190. systemctl restart vsftpd>/dev/null
  191. systemctl status  vsftpd>/dev/null
  192. if [ $? -eq 0 ];then
  193.         echo -e "   ftp服务    \033[32m 启动成功 \033[0m    "
  194. else
  195.         echo -e "   ftp服务    \033[31m 启动失败 \033[0m    "
  196. fi



  197. #################################设置应答文件###################

  198. if [ ! -d "/var/ftp/pub" ]; then
  199.   mkdir -p /var/ftp/pub
  200. fi

  201. cp /root/anaconda-ks.cfg /var/ftp/pub/ks.cfg
  202. chmod +r /var/ftp/pub/ks.cfg
  203. sed -i "s/cdrom/url --url=ftp:\/\/$ip/g" /var/ftp/pub/ks.cfg
  204. sed -i "s/# System timezone/reboot/g" /var/ftp/pub/ks.cfg
  205. sed -i "s/--none/--all/g" /var/ftp/pub/ks.cfg
  206. sed -i "s/^graphical.*$/text/g" /var/ftp/pub/ks.cfg

  207. grep 'reboot' /var/ftp/pub/ks.cfg >/dev/null
  208. if [ $? -eq 0 ];then
  209.         echo -e "  应答文件    \033[32m 设置成功 \033[0m    "
  210. else
  211.         echo -e "  应答文件    \033[31m 设置失败 \033[0m    "
  212. fi


  213. ####################################检查所有服务是否启动成功#############################
  214. echo "-----------------检查所有服务是否启动----------------"
  215. for i in {'dhcpd','xinetd','tftp','vsftpd'}
  216. do
  217.         systemctl status $i>/dev/null
  218.         if [ $? -eq 0 ];then
  219.                 echo -e "      $i    \033[32m 启动成功 \033[0m    "
  220.         else
  221.                 echo -e "      $i   \033[31m  启动失败 \033[0m    "
  222.         fi
  223. done
  224. systemctl stop firewalld>/dev/null
  225. setenforce 0
  226. chmod -R  +r  /var
  227. echo -e "      防火墙    \033[32m 关闭成功 \033[0m "   
  228. echo "-------------------pxe服务端部署完成-----------------"
复制代码


如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2020-1-11 11:57 | 显示全部楼层
好的,非常感谢
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-1-11 12:07 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-1-11 12:07 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-1-11 12:08 | 显示全部楼层
6666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-1-11 12:44 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2020-1-11 18:27 | 显示全部楼层
6666666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖
关注公众号
返回顶部