Linux (二十七) PXE 自动装机工具脚本编写
Posted 云来云去-起飞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.重启
出现以上界面算是已经完成一半了
出现这个界面已经证明完全完成。
以上为自己闲来无事时候编写的脚本,可能还有些缺陷,但功能实现没有任何问题,后期优化什么的,这边也会慢慢进行,后期和大家分享!!!!!
以上是关于Linux (二十七) PXE 自动装机工具脚本编写的主要内容,如果未能解决你的问题,请参考以下文章
超详细的Linux系统PXE自动部署装机与kickstart无人值守(实战干货)