系统相关
首页 > 系统相关> > Linux (二十七) PXE 自动装机工具脚本编写

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.重启

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

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

 

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

标签:--,echo,read,&&,Linux,var,tftp,二十七,PXE
来源: https://blog.csdn.net/qq_18343913/article/details/117405219