PXE自动化部署系统工具脚本集成(适用于RHL7/CentOS7系)

部署服务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/


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值