部署服务deploy.sh
#!/bin/bash
# author: zhouzhuo
# create time: 2020/5/21
#使用前请先确定网卡
IFCFG=ens33
#获得当前主机的IP地址
IP=`ifconfig $IFCFG | grep "inet " | awk -F " " '{print $2}'`
#获得当前主机的网络号
NETIP=`echo $IP |awk -F. '{print $1"."$2"."$3}'`
#获得当前主机的子网掩码
MASK=`ifconfig $IFCFG | grep "inet " | awk -F " " '{print $4}'`
function presystem()
{
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 &>/dev/null
mount -o loop /tmp/CentOS7.iso /mnt &>/dev/null
n=$(ls /mnt/$Date |wc -l)
if [ $n -eq 0 ]
then
echo "没有挂载光盘,请挂载光盘,退出脚本执行状态!"
exit
fi
#配置本地yum仓库
if [ -d /tmp/yumrepobk ]
then
mv /etc/yum.repos.d/*.repo /tmp/yumrepobk
else
mkdir /tmp/yumrepobk && mv /etc/yum.repos.d/*.repo /tmp/yumrepobk
fi
cat >>/etc/yum.repos.d/local.repo<<EOF
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
yum clean all &>/dev/null
}
function install_ftp()
{
if [ -d /etc/vsftpd ]
then
echo "正在复制镜像内容......."
if [ -d /var/ftp/public ]
then
cp -fr /mnt/* /var/ftp/public/
else
mkdir /var/ftp/public && cp -fr /mnt/* /var/ftp/public/
fi
echo "完成复制......."
#启动ftp服务
systemctl restart vsftpd &>/dev/null
else
echo "该系统没有安装ftp服务,正在安装,请稍等....."
yum install -y vsftpd &>/dev/null
if [ ! -d /etc/vsftpd ]
then
echo "安装ftp失败,退出脚本执行状态!"
exit
fi
#把光盘文件复制到ftp站点下
echo "正在复制镜像内容......."
if [ -d /var/ftp/public ]
then
cp -fr /mnt/* /var/ftp/public/
else
mkdir /var/ftp/public && cp -fr /mnt/* /var/ftp/public/
fi
echo "完成复制......."
systemctl start vsftpd &>/dev/null
fi
#搭建tftp站点
if [ -f /etc/xinetd.d/tftp ]
then
tftp_status=$(grep disable /etc/xinetd.d/tftp |awk -F= '{print $2}')
sed -i "s/$tftp_status/no/" /etc/xinetd.d/tftp
systemctl restart xinetd &>/dev/null
else
echo "该系统没有安装tftp服务,正在安装,请稍等....."
yum install -y tftp-server &>/dev/null
if [ ! -f /etc/xinetd.d/tftp ]
then
echo "安装tftp失败,退出脚本执行状态!"
exit
fi
tftp_status=$(grep disable /etc/xinetd.d/tftp |awk -F= '{print $2}')
sed -i "s/$tftp_status/no/" /etc/xinetd.d/tftp
systemctl start tftp &>/dev/null
fi
}
#配置DHCP服务
function install_dhcp()
{
if [ -f /etc/dhcp/dhcpd.conf ]
then
cat >/etc/dhcp/dhcpd.conf<<EOF
subnet $NETIP.0 netmask $MASK {
range $NETIP.50 $NETIP.100;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers $IP;
default-lease-time 600;
max-lease-time 7200;
next-server $IP;
filename "pxelinux.0";
}
EOF
#启动dhcp服务
systemctl restart dhcpd &>/dev/null
else
echo "该系统没有安装dhcp服务,正在安装,请稍等....."
yum install -y dhcp &>/dev/null
if [ ! -f /etc/dhcp/dhcpd.conf ]
then
echo "安装dhcp失败,退出脚本执行状态!"
exit
fi
cat >/etc/dhcp/dhcpd.conf<<EOF
subnet $NETIP.0 netmask $MASK {
range $NETIP.50 $NETIP.100;
option domain-name-servers ns1.internal.example.org;
option domain-name "internal.example.org";
option routers $IP;
default-lease-time 600;
max-lease-time 7200;
next-server $IP;
filename "pxelinux.0";
}
EOF
#启动dhcp服务
systemctl start dhcpd &>/dev/null
fi
}
function config_ks()
{
cd /mnt/images/pxeboot
cp vmlinuz initrd.img /var/lib/tftpboot
#准备客户端主机无盘启动时所需的PXE引导程序(pxelinux.0)、启动菜单文件
#安装syslinux软件包(支持PXE功能)
yum -y install syslinux &>/dev/null
if [ ! -d /usr/share/syslinux ]
then
echo "没有安装成功syslinux,退出脚本执行状态!"
exit
fi
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
#建立启动菜单文件
if [ ! -d /var/lib/tftpboot/pxelinux.cfg ]
then
mkdir /var/lib/tftpboot/pxelinux.cfg
fi
cat >/var/lib/tftpboot/pxelinux.cfg/default<<EOF
default auto
prompt 0
label auto
kernel vmlinuz
append ks=ftp://$IP/public/ks.cfg initrd=initrd.img devfs=nomount ramdisk_size=8192
label linux text
kernel vmlinuz
append text initrd=initrd.img devfs=nomount ramdisk_size=8192
label linux rescue
kernel vmlinuz
append rescue initrd=initrd.img devfs=nomount ramdisk_size=8192
EOF
#修改default文件权限
chmod 644 /var/lib/tftpboot/pxelinux.cfg/default
#配置实现客户端无人值守安装系统
#安装system-config-kickstart软件包
echo "正在安装system-config-kickstart软件包"
yum -y install system-config-kickstart &>/dev/null
echo "安装system-config-kickstart软件包完成!"
#配置ks.cfg文件
cat >/var/ftp/public/ks.cfg<<EOF
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
url --url="ftp://$IP/public"
# Root password
rootpw 123
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# System keyboard
keyboard us
timezone Asia/Shanghai --isUtc --nontp
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --all --initlabel --drives=sda
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=sda --size=1024
part swap --fstype="xfs" --ondisk=sda --size=2048
part / --fstype="xfs" --grow --ondisk=sda --size=1
# Reboot after installation
reboot
# System language
lang en_US.UTF-8
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
%packages
@^minimal
@core
vim
kernel-devel
kernel-headers
cpp
gcc
gcc-c++
lrzsz
net-tools
bash-completion
kexec-tools
pam-devel
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
EOF
}
function check_svc()
{
systemctl restart dhcpd && systemctl restart tftp && systemctl restart vsftpd
dhcp_status=`systemctl status dhcpd | grep Active | awk -F ":" {'print $2'} | awk -F " " {'print $1'}`
tftp_status=`systemctl status tftp | grep Active | awk -F ":" {'print $2'} | awk -F " " {'print $1'}`
vsftp_status=`systemctl status tftp | grep Active | awk -F ":" {'print $2'} | awk -F " " {'print $1'}`
if [ $dhcp_status == active ]
then
echo "dhcp服务正常"
else
echo "dhcp服务异常,请检查dhcp配置"
fi
if [ $tftp_status == active ]
then
echo "tftp服务正常"
else
echo "tftp服务异常,请检查tftp配置"
fi
if [ $vsftp_status == active ]
then
echo "vsftp服务正常"
else
echo "vsftp服务异常,请检查vsftp配置"
fi
}
function showMenu()
{
clear
echo "========================================================"
echo "| 欢迎使用无人值守安装系统! |"
echo "| Welcome! |"
echo "========================================================"
echo "| 注意事项 |"
echo "| |"
echo "| 1.执行该脚本前,请确保/tmp/CentOS7.iso存在 |"
echo "| 2.本系统至少存在一个网卡可以与待安装系统连通 |"
echo "| |"
echo "| |"
echo "========================================================"
}
function main()
{
showMenu
read -p "请输入是否继续(yes/no):>" key
case $key in 'yes'| 'y')
presystem
install_ftp
install_dhcp
check_svc
config_ks
;;
'no'| 'n')
echo -e "Bye\n"
exit
;;
*)
main
esac
echo "pxe服务端部署完成!"
}
main
卸载:uninstall.sh
#!/bin/bash
# author: zhouzhuo
# create time: 2020/5/21
systemctl stop tftp
systemctl stop dhcpd
systemctl stop vsftpd
yum remove -y vsftpd tftp-server dhcp syslinux system-config-kickstart
mv /tmp/yumrepobk/*.repo /etc/yum.repos.d/
rm -fr /tmp/yumrepobk /var/ftp/public /var/lib/tftpboot/ /etc/vsftpd /etc/xinetd.d/ /etc/dhcp/