• Linux shell编写脚本部署pxe网络装机


    Linux shell编写脚本部署pxe网络装机

    人工安装配置,Linux PXE无人值守网络装机  https://www.cnblogs.com/yuzly/p/10582254.html

    脚本实现PXE无人值守网络装机

    1.运行脚本:

    2.查看dhcp配置文件,看脚本是否成功执行

    3.查看/var/lib/tftpboot目录下是否有如下文件

      

    4.虚拟机新建一个虚拟机,不加载光盘,取消dhcp自动获取,然后开启

      

    5.下图可以看到,正在加载位于远端的tftp站点的内核,引导程序等

      

    源码如下:

    #!/bin/bash
    #该脚本用于自动化部署pxe网络装机
    #作者:雨中落叶
    #博客:https://www.cnblogs.com/yuzly/
    #关闭防火墙,selinux安全机制
    service iptables stop &>/dev/null
    setenforce 0 &>/dev/null
    #获得当前主机的IP地址
    IP=$(ifconfig | head -2 | grep "inet addr" | awk  '{print $2}'|awk -F: '{print $2}')
    #获得当前主机的网络号
    NETIP=$(echo $IP |awk -F. '{print $1"."$2"."$3}')
    #获得当前主机的子网掩码
    MASK=$(ifconfig |head -2 | tail -1 |awk '{print $4}'|awk -F: '{print $2}')
    #挂载光盘
    mount /dev/sr0 /mnt &>/dev/null
    n=$(ls /mnt/$Date |wc -l)
    if [ $n -eq 0 ]
    then
      echo "没有挂载光盘,请挂载光盘,退出脚本执行状态!"
      exit
    fi
    #配置本地yum仓库
    rm -fr /etc/yum.repos.d/*
    cat >>/etc/yum.repos.d/yuzly.repo<<OK
    [yuzly]
    name=yuzly
    baseurl=file:///mnt
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
    OK
    yum clean all &>/dev/null
    
    #搭建ftp站点
    if [ -d /etc/vsftpd ]
    then
      #把光盘文件复制到ftp站点下
      mkdir /var/ftp/redhat6
      echo "正在复制光盘文件........"
      cp -rf /mnt/* /var/ftp/redhat6
      echo "完成复制......."
      #启动ftp服务
      service vsftpd restart &>/dev/null
    else
      echo "该系统没有安装ftp服务,正在安装,请稍等....."
      yum install -y vsftpd &>/dev/null
      if [ ! -d /etc/vaftpd ]
      then
        echo "安装ftp失败,退出脚本执行状态!"
        exit
      fi
      #把光盘文件复制到ftp站点下
      mkdir /var/ftp/redhat6
      echo "正在复制光盘文件........"
      cp -rf /mnt/* /var/ftp/redhat6
      echo "完成复制......."
      #启动ftp服务
      service vsftpd start &>/dev/null
    fi
    #搭建tftp站点
    if [ -f /etc/xinetd.d/tftp ]
    then
      #修改tftp配置文件,tftp默认是禁用,开启tftp功能
      tftp_status=$(grep disable /etc/xinetd.d/tftp |awk -F= '{print $2}')
      sed -i "s/$tftp_status/no/" /etc/xinetd.d/tftp
      #启动tftp服务
      service xinetd restart &>/dev/null
    else
      echo "该系统没有安装tftp服务,正在安装,请稍等....."
      yum install -y tftp-server &>/dev/null
      if [ ! -f /etc/xinetd.d/tftp ]
      then
        echo "安装tftp失败,退出脚本执行状态!"
        exit
      fi
      #修改tftp配置文件,tftp默认是禁用,开启tftp功能
      tftp_status=$(grep disable /etc/xinetd.d/tftp |awk -F= '{print $2}')
      sed -i "s/$tftp_status/no/" /etc/xinetd.d/tftp
      #启动tftp服务
      service xinetd start &>/dev/null
    fi
    #部署客户端主机无盘启动时所需的Linux内核、初始化镜像文件
    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
    #建立启动菜单文件
    mkdir /var/lib/tftpboot/pxelinux.cfg
    cat >>/var/lib/tftpboot/pxelinux.cfg/default<<OK
    default auto
    prompt  0
    label   auto
    kernel  vmlinuz
             append ks=ftp://$IP/redhat6/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
    OK
    #修改default文件权限
    chmod 644 /var/lib/tftpboot/pxelinux.cfg/default
    #配置DHCP服务
    if [ -f /etc/dhcp/dhcpd.conf ]
    then
    cat >/etc/dhcp/dhcpd.conf<<OK
    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";
    } 
    OK
    #启动dhcp服务
    service dhcpd restart &>/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<<OK
    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";
    } 
    OK
    #启动dhcp服务
    service dhcpd start &>/dev/null
    fi
    #配置实现客户端无人值守安装系统
    #安装system-config-kickstart软件包
    echo "正在安装system-config-kickstart软件包"
    yum -y install system-config-kickstart &>/dev/null
    echo "安装system-config-kickstart软件包完成!"
    #配置ks.cfg文件
    cat  >/var/ftp/redhat6/ks.cfg<<OK
    #platform=x86, AMD64, 或 Intel EM64T
    #version=DEVEL
    # Firewall configuration
    firewall --disabled
    # Install OS instead of upgrade
    install
    # Use network installation
    url --url="ftp://$IP/redhat6"
    # Root password
    rootpw --iscrypted $1$EdNye4v8$k9lKFbLL44WbEYorBFU/S1
    # System authorization information
    auth  --useshadow  --passalgo=sha512
    # Use graphical install
    graphical
    firstboot --disable
    # System keyboard
    keyboard us
    # System language
    lang zh_CN
    # SELinux configuration
    selinux --enforcing
    # Installation logging level
    logging --level=info
    OK
    echo "pxe服务端部署完成!"

    ----------------------------------------------------------------------------------------------------------------------------------

    人工安装配置,Linux PXE无人值守网络装机  https://www.cnblogs.com/yuzly/p/10582254.html

  • 相关阅读:
    用Less循环生成样式
    Angular Textarea 高度自动变化
    html文字溢出以省略号(...)替代
    mobiscroll之treelist使用
    安装Microsoft Visual C++ 2010 x64 Redistributable失败的解决方案
    获取input标签的所有属性
    checked
    js中的in-for循环
    checkbox批量选中,获取选中的项的值
    vue 订单列表 多个倒计时
  • 原文地址:https://www.cnblogs.com/yuzly/p/10585624.html
Copyright © 2020-2023  润新知