Linux (二十七) PXE 自动装机工具脚本编写
作者:互联网
目录
一、功能简介
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