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.主菜单

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

3.2.二级菜单

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

3.3.网络配置

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

3.4.自动化安装

3.4.1.下载服务

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

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

3.4.2.DHCP服务设置

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

3.4.3.FTP服务设置

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

3.4.4.ks.cfg

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

四、客户端验证

4.1.设置启动方式

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

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

4.2.重启

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

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

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

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

 

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

上一篇:mysql出现ERROR1698(28000):Access denied for user root@localhost错误解决方法【转】


下一篇:搭建PXE与DHCP实现无人值守自动化安装CentOS8系统