Linux (二十七) PXE 自动装机工具脚本编写

Posted 云来云去-起飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux (二十七) PXE 自动装机工具脚本编写相关的知识,希望对你有一定的参考价值。

目录

 

一、功能简介

1.1.网络功能

1.2.服务包下载

1.3.dhcp功能

1.4.vsftpd功能

1.5.tftp-server功能

1.6.system-config-kickstart功能

二、功能实现

2.1.网络配置

2.2.下载服务

2.3.DHCP配置

2.4.VSFTP配置

2.4.TFTP配置

2.5.卸载服务

2.6.主菜单

2.7.二级菜单

三、演示效果

3.1.主菜单

3.2.二级菜单

3.3.网络配置

3.4.自动化安装

3.4.1.下载服务

3.4.2.DHCP服务设置

3.4.3.FTP服务设置

3.4.4.ks.cfg

四、客户端验证

4.1.设置启动方式

4.2.重启


一、功能简介

1.1.网络功能

 可以配置NAT8和主机模式的网卡,主要区别,前者可以配置DNS,后者不需要配置DNS

1.2.服务包下载

  根据网络通信情况,判断是否可以进行下载服务包,其中下载包有tftp-server 、vsftpd 、syslinux、dhcp 、system-config-kickstart

1.3.dhcp功能

     配置dhcpd.conf配置文件,将需要分配的网段添加到服务中

     启动dhcpd 服务

1.4.vsftpd功能

      给客户端下载时候去连接ftp下载软件包

1.5.tftp-server功能

      将系统启动的引导文件、内核文件等放到tftp上

1.6.system-config-kickstart功能

      自动选择菜单自动安装。

二、功能实现

2.1.网络配置

#配置NAT8 的网卡配置,此处只做能连接外网的配置,至于主机模式,暂不考虑
ensPth="/etc/sysconfig/network-scripts/ifcfg-"
function netUpdate(){
	   read -p "请输入你要修改的网卡名称:" ensname
	   read -p "请输入IP地址:" ipname
	   read -p "请继续输入子网掩码:" maskname
	   read -p "请继续输入网关地址:" gname
	   
	   enso="${ensPth}${ensname}"
	   read -p  "1.修改主机模式网卡信息---------2.修改NAT模式网卡信息,请选择:" input
	   case $input in
	   	1)
	   	  printf "%s\\n" TYPE=Ethernet BOOTPROT=static DEFROUTE=yes NAME=$ensname DEVICE=$ensname IPADDR=$ipname NETMASK=$maskname GATEWAY=$gname > ${enso}
	   [ -f ${enso}  ] && echo "网卡文件创建完成" || echo "文件不存在"
	   systemctl restart network
	   ifconfig
	   	;;
	   	2)
	   	read -p "请继续输入DNS地址:"  dns1
	   	 printf "%s\\n" TYPE=Ethernet BOOTPROT=static DEFROUTE=yes NAME=$ensname DEVICE=$ensname IPADDR=$ipname NETMASK=$maskname GATEWAY=$gname DNS1=$dns1 > ${enso}
	   [ -f ${enso}  ] && echo "网卡文件创建完成" || echo "文件不存在"
	   systemctl restart network
	   ping www.baidu.com 
	   [ $? = 0  ] && echo "成功" || echo "网络配置存在问题"
	   	;;
	    q)
	     echo "退出工具"
	   return
	    ;;
	    *)
	      echo "输入错误,工具重启!!!"
	      netUpdate
	    ;;
	  esac 
	}

   2.2.下载服务

	#下载需要的服务包,dhcp地址解析服务,tftp 小文件传输服务,syslinux 引导文件服务,vsftpd 大文件传输服务 ,kickstart 自动菜单选择服务
	function downloadServer(){
		  ping www.baidu.com -c3
		  [ $? = 0  ] && yum -y install dhcp  tftp-server syslinux system-config-kickstart.noarch vsftpd || echo "网络配置存在问题" 
		}

2.3.DHCP配置

#DHCP配置	
	function dhcpP(){
		  read -p "请输入TFTP服务器IP地址:" inputip
		  read -p "请输入需要分配的网段:" inputD
		  read -p "请输入子网掩码:" inputX
		  read -p "请输入网关地址:" inputL
		  read -p "请输入需要ip范围【xxx.xxx.xxx.xxx   xx.xx.xxx.xx】:" code
		  [ -f /etc/dhcp/dhcpd.conf ] &&
	cp -a /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf	  
  sed  -i -e " 37i subnet ${inputD} netmask ${inputX} {\\n range  $code;\\n option routers ${inputL};\\n next-server ${inputip};\\nfilename \\"pxelinux.0\\";\\n }"  /etc/dhcp/dhcpd.conf || echo "文件不存在"
  systemctl restart dhcpd
  [ $? = 0 ] && echo -e "\\033[42;37m DHCP服务启动成功 \\033[0m" ||  systemctl status dhcpd
		}

2.4.VSFTP配置

 function vsftpd(){
	 	 systemctl start vsftpd
	 	 [ $? = 0 ] && mkdir -p /var/ftp/centos7   || echo "ftp不存在"
	 	 cp -a /mnt/*  /var/ftp/centos7/
   str1="install \\n keyboard 'us' \\n rootpw --plaintext root \\n url --url=\\"ftp://${ftpname}/centos7\\""
   str2=" \\n lang zh_CN \\n auth  --useshadow  --passalgo=sha512 \\n graphical \\n firstboot --disable \\n selinux --disabled \\n "
   str3=" firewall --disabled \\n network  --bootproto=dhcp --device=ens33 \\n reboot \\n timezone Asia/Shanghai "
   str4=" \\n bootloader --location=mbr \\n zerombr \\n clearpart --all \\n part / --fstype=\\"xfs\\" --size=20480 "
   str5=" \\n part /boot --fstype=\\"xfs\\" --grow --size=1 \\n %packages \\n @development \\n  @gnome-desktop \\n @remote-desktop-clients \\n vinagre \\n %end"
   echo -e ${str1}${str2}${str3}${str4}${str5} > /var/ftp/ks.cfg
	 [ -f  /var/ftp/ks.cfg ] && echo "ks.cfg 文件成完成!" || echo "文件生成失败,请查看!"
	 sed -i -e  "s/\\[base\\]/\\[development\\]/g"  /etc/yum.repos.d/CentOS-Base.repo
	 echo "yum配置文件修改完成!"
	 
	 	}

2.4.TFTP配置

	ftpname=""
	#tftp 设置
	function tftpS(){
		  read -p "请输入ftp服务地址:" ftpip
		  $ftpname=$ftpip
		  [ -f /etc/xinetd.d/tftp ] && sed  -i -e 's/disable                 = no/disable                 = yes/g'  /etc/xinetd.d/tftp || echo "tftp 文件不存在!"
		  systemctl restart tftp 
		  [ $? = 0  ] && [ -f /usr/share/syslinux/pxelinux.0 ] && cp -a /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/  || echo "tftp-server未启动成功或者pxelinux.0 不存在" 
		   cp -a /mnt/images/pxeboot/initrd.img  /var/lib/tftpboot/  
		   cp -a  /mnt/images/pxeboot/vmlinuz  /var/lib/tftpboot/ 
		  echo "查看文件是否存在"
		  ls  -l /var/lib/tftpboot/*
		  echo "开始创建default文件"
		  mkdir /var/lib/tftpboot/pxelinux.cfg
		  [ -d /var/lib/tftpboot/pxelinux.cfg ]  && echo -e "default auto \\n label auto \\n menu label Pxe Centos7 \\n kernel vmlinuz \\n append  initrd=initrd.img  ks=ftp://${ftpip}/ks.cfg method=ftp://${ftpip}/centos7" > /var/lib/tftpboot/pxelinux.cfg/default || echo "该文件不存在!!!" 
		  systemctl start tftp
		  [ $? = 0 ] && echo -e "\\033[42;37m tftp服务启动成功 \\033[0m" && netstat -anup | grep 69 ||  systemctl status tftp
		}	

2.5.卸载服务

 	function removeSer(){
	          yum remove  dhcp  tftp-server syslinux system-config-kickstart.noarch vsftpd
	 		  rm -rf /var/lib/tftpboot/*
	 		  rm -rf /var/ftp/centos7
	 		  echo "还原repo文件"
	 		  sed -i -e  "s/\\[development\\]/\\[base\\]/g"  /etc/yum.repos.d/CentOS-Base.repo
	 		  echo "配置文件修改完成!!"
	 		}

2.6.主菜单

function installx(){
	 		  printf "%-50s\\t%-50s\\n"  "" "******1.网络设置********" ""  "******2.自动化安装********" ""  "******3.选择性安装********"  ""  "******4.卸载服务********" ;echo ""
	 		  read -p "请选择操作,q退出工具:" sel
	 		  case $sel in 
	 		  	1)
	 		  	netUpdate
	 		  	;;
	 		  	2)
	 		  	downloadServer&&dhcpP&&tftpS&&vsftpd
	 		  	;;
	 		  	3)
	 		  	installPl
	 		  	;;
	 		  	4)
	 		  	removeSer
	 		  	echo "服务卸载完成"
	 		  	;;
	 		  	q)
	 		  return
	 		  	;;
	 		  	*)
	 		  	echo "输入错误,请重新输入"
	 		  	installx
	 		  	;;
	 		  esac
	 		  
	 		}

2.7.二级菜单

	function installPl(){
	 			printf "%-50s\\t%-50s\\n"  "" "******1.DHCP设置********" ""  "******2.TFTP设置********" ""  "******3.FTP设置********"  ;echo ""
	 			read -p "请选择操作,q退出到主页面:" sll
	 			case $sll in
	 				1)
	 				dhcpP
	 				;;
	 				2)
	 				tftpS
	 				;;
	 				3)
	 				vsftpd
	 				;;
	 				q)
	 			  installx
	 				;;
	 				*)
	 				echo "输入错误,请重新输入!"
	 				installPl
	 				;;
	 			esac
	 			}

三、演示效果

3.1.主菜单

3.2.二级菜单

3.3.网络配置

3.4.自动化安装

3.4.1.下载服务

3.4.2.DHCP服务设置

3.4.3.FTP服务设置

3.4.4.ks.cfg

四、客户端验证

4.1.设置启动方式

4.2.重启

出现以上界面算是已经完成一半了

出现这个界面已经证明完全完成。

 

以上为自己闲来无事时候编写的脚本,可能还有些缺陷,但功能实现没有任何问题,后期优化什么的,这边也会慢慢进行,后期和大家分享!!!!!

以上是关于Linux (二十七) PXE 自动装机工具脚本编写的主要内容,如果未能解决你的问题,请参考以下文章

linux下PXE无人值守环境自动安装脚本

超详细的Linux系统PXE自动部署装机与kickstart无人值守(实战干货)

linux初学者-pxe装机篇

yum仓库搭建与PXE全自动无人值守网络装机案例

#yyds干货盘点# linux实现pxe自动装机 理论方法

PXE网络装机之centos7(批量自动装机)