zoukankan      html  css  js  c++  java
  • Kickstart无人值守安装

    1.批量装机软件介绍

     

    1.PXE Client向DHCP发送请求
    PXE Client从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向本网络中的DHCP服务器索取IP。

    2.DHCP服务器提供信息
    DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

    3.PXE客户端请求下载启动文件
    客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

    4.Boot Server响应客户端请求并传送文件
    当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM由TFTP通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

    5.请求下载自动应答文件
    客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

    kickstart介绍:

    Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装

    2.实战演练:

    系统环境准备

    [root@m01 ~]# cat /etc/redhat-release 
    CentOS release 6.8 (Final)
    [root@m01 ~]# uname -r
    2.6.32-642.el6.x86_64
    [root@m01 ~]# getenforce 
    Disabled
    [root@m01 ~]# /etc/init.d/iptables status
    iptables:未运行防火墙。
    [root@m01 ~]# ifconfig eth0 |awk -F "[ :]+" 'NR==2 {print $4}'
    10.0.0.61
    [root@m01 ~]# hostname 
    m01
    

    注意:

    虚拟机网卡采用NAT模式,不要使用桥接模式,因为稍后我们会搭建DHCP服务器,在同一局域网多个DHCP服务会有冲突。
    VMware的NAT模式的dhcp服务也关闭,避免干扰。

    3.DHCP服务安装配置

    [root@m01 ~]# yum -y install dhcp
    [root@m01 ~]# rpm -qa dhcp
    dhcp-4.1.1-53.P1.el6.centos.x86_64
    [root@m01 ~]# rpm -ql dhcp|egrep "dhcpd.conf"
    /etc/dhcp/dhcpd.conf        #配置文件
    [root@m01 ~]# vim /etc/dhcp/dhcpd.conf 
    subnet 172.16.1.0 netmask 255.255.255.0 {
             range 172.16.1.100 172.16.1.200;
             option subnet-mask 255.255.255.0;
             default-lease-time 21600;
             max-lease-time 43200;
             next-server 172.16.1.61;
             filename "/pxelinux.0";
     }
    range 172.16.1.100 172.16.1.200;        # 可分配的起始IP-结束IP
    option subnet-mask 255.255.255.0;    # 设定netmask
    default-lease-time 21600;            # 设置默认的IP租用期限
    max-lease-time 43200;                # 设置最大的IP租用期限
    next-server 172.16.1.61;                # 告知客户端TFTP服务器的ip
    filename "/pxelinux.0";              # 告知客户端从TFTP根目录下载pxelinux.0文件
    
    [root@m01 ~]# /etc/init.d/dhcpd start
    [root@m01 ~]# netstat -lntup |grep dhcp
    udp        0      0 0.0.0.0:67                  0.0.0.0:*                               11063/dhcpd

    注意事项:kickstart系统不能开机自启动,完成后服务都要关闭,防止未来重启服务器自动重装系统

    4.安装TFTP服务

    4.1TFTP简介

    TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。

    [root@m01 ~]# yum -y install tftp-server
    [root@m01 ~]# vim /etc/xinetd.d/tftp
    # default: off
    # description: The tftp server serves files using the trivial file transfer 
    #       protocol.  The tftp protocol is often used to boot diskless 
    #       workstations, download configuration files to network-aware printers, 
    #       and to start the installation process for some operating systems.
    service tftp
    {
            socket_type             = dgram
            protocol                = udp
            wait                    = yes
            user                    = root
            server                  = /usr/sbin/in.tftpd
            server_args             = -s /var/lib/tftpboot
            disable                 = no      #由原来的yes改为no
            per_source              = 11
            cps                     = 100 2
            flags                   = IPv4
    }
    
    [root@m01 ~]# /etc/init.d/xinetd restart
    [root@m01 ~]# netstat -tunlp|grep 69
    udp        0      0 0.0.0.0:69                  0.0.0.0:*                               1305/xinetd

    5.配置HTTP服务

    可以用Apache或Nginx提供HTTP服务。Python的命令web服务不行,会有报错。

    [root@m01 ~]# yum -y install httpd
    [root@m01 ~]# sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf
    
    [root@m01 ~]# /etc/init.d/httpd start
    [root@m01 ~]# mkdir -p /var/www/html/CentOS6.8/
    [root@m01 ~]# mount /dev/cdrom /var/www/html/CentOS6.8
    [root@m01 ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda3       8.8G  7.3G  1.1G  87% /
    tmpfs           491M     0  491M   0% /dev/shm
    /dev/sda1       190M   33M  147M  19% /boot
    /dev/sr0        3.7G  3.7G     0 100% /var/www/html/CentOS6.8
    
    
    # 不管怎么弄,只要把安装光盘内容能通过web发布即可。因为是演示,如果复制镜像就有点浪费时间。但生产环境就一定要复制了,光盘读取速度有限
    
    浏览器访问http://10.0.0.61/CentOS6.8 检验是否正确

     6.配置支持PXE的启动程序

    6.1PXE引导配置(bootstrap)

    syslinux是一个功能强大的引导加载程序,而且兼容各种介质

    syslinux是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。如果没有找到pxelinux.0这个文件,可以安装以下。

    [root@m01 ~]# yum -y install syslinux
    [root@m01 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
    [root@m01 ~]# cp -a /var/www/html/CentOS6.8/isolinux/* /var/lib/tftpboot/
    [root@m01 ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg
    [root@m01 ~]# cp /var/www/html/CentOS6.8/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

    7.创建ks.cfg文件

    [root@m01 pxelinux.cfg]# cat /var/www/html/ks_config/CentOS-6.8-ks.cfg
    # Kickstart Configurator for CentOS 6.7 by yao zhang
    install
    url --url="http://172.16.1.61/CentOS6.8/"
    text
    lang en_US.UTF-8
    keyboard us
    zerombr
    bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
    network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS6
    timezone --utc Asia/Shanghai
    authconfig --enableshadow --passalgo=sha512
    rootpw  --iscrypted $6$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/
    clearpart --all --initlabel
    part /boot --fstype=ext4 --asprimary --size=200
    part swap --size=1024
    part / --fstype=ext4 --grow --asprimary --size=200
    firstboot --disable
    selinux --disabled
    firewall --disabled
    logging --level=info
    reboot
    
    %packages
    @base
    @compat-libraries
    @debugging
    @development
    tree
    nmap
    sysstat
    lrzsz
    dos2unix
    telnet
    
    %post
    wget -O /tmp/optimization.sh http://172.16.1.61/ks_config/optimization.sh &>/dev/null
    /bin/sh /tmp/optimization.sh
    %end
    
    2.optimization.sh脚本文件
    [root@m01 ~]# cat /var/www/html/ks_config/optimization.sh 
    #!/bin/bash
    . /etc/init.d/functions
    
    Ip=172.16.1.61
    Port=80
    ConfigDir=ks_config
    
    # Judge Http server is ok?
    PortNum=`nmap $Ip  -p $Port 2>/dev/null|grep open|wc -l`
    [ $PortNum -lt 1 ] && {
    echo "Http server is bad!"
    exit 1
    }
    
    # Defined result function
    function Msg(){
            if [ $? -eq 0 ];then
              action "$1" /bin/true
            else
              action "$1" /bin/false
            fi
    }
    
    # Defined IP function
    function ConfigIP(){
        Suffix=`ifconfig eth1|awk -F "[ .]+" 'NR==2 {print $6}'`
        cat >/etc/sysconfig/network-scripts/ifcfg-eth0 <<-END
        DEVICE=eth0
        TYPE=Ethernet
        ONBOOT=yes
        NM_CONTROLLED=yes
        BOOTPROTO=none
        IPADDR=10.0.0.$Suffix
        PREFIX=24
        GATEWAY=10.0.0.254
        DNS1=10.0.0.254
        DEFROUTE=yes
        IPV4_FAILURE_FATAL=yes
        IPV6INIT=no
        NAME="System eth0"
        END
        Msg "config eth0"
            cat >/etc/sysconfig/network-scripts/ifcfg-eth1 <<-END
        DEVICE=eth1
        TYPE=Ethernet
        ONBOOT=yes
        NM_CONTROLLED=yes
        BOOTPROTO=none
        IPADDR=172.16.1.$Suffix
        PREFIX=24
        DEFROUTE=yes
        IPV4_FAILURE_FATAL=yes
        IPV6INIT=no
        NAME="System eth1"
        END
            Msg "config eth1"
    }
    
    # Defined Yum source Functions
    function yum(){
        YumDir=/etc/yum.repos.d
        [ -f "$YumDir/CentOS-Base.repo" ] && cp $YumDir/CentOS-Base.repo{,.ori} 
        wget -O $YumDir/CentOS-Base.repo http://$Ip:$Port/$ConfigDir/CentOS-Base.repo &>/dev/null &&
        wget -O $YumDir/epel.repo http://$Ip:$Port/$ConfigDir/epel.repo &>/dev/null &&
        Msg "YUM source"
    }
    
    
    # Defined add Ordinary users Functions
    function AddUser(){
        useradd oldboy &>/dev/null &&
        echo "123456"|passwd --stdin oldboy &>/dev/null &&
        sed  -i '98a oldboy    ALL=(ALL)       NOPASSWD:ALL'  /etc/sudoers &&
        visudo -c &>/dev/null
        Msg "AddUser oldboy"
    }
    
    # Defined Hide the system version number Functions
    function HideVersion(){
        [ -f "/etc/issue" ] && >/etc/issue
            Msg "Hide issue"
        [ -f "/etc/issue.net" ] && > /etc/issue.net
            Msg "Hide issue.net"
    }
    
    
    # Defined SSHD config Functions
    function sshd(){
        SshdDir=/etc/ssh
        [ -f "$SshdDir/sshd_config" ] && /bin/mv $SshdDir/sshd_config{,.ori}
        wget -O $SshdDir/sshd_config http://$Ip:$Port/$ConfigDir/sshd_config &>/dev/null &&
        chmod 600 $SshdDir/sshd_config
            Msg "sshd config"
    }
    
    # Defined OPEN FILES Functions
    function openfiles(){
        [ -f "/etc/security/limits.conf" ] && {
        echo '*  -  nofile  65535' >> /etc/security/limits.conf
            Msg "open files"
        }
    }
    
    # Defined Kernel parameters Functions
    function kernel(){
            KernelDir=/etc
            [ -f "$KernelDir/sysctl.conf" ] && /bin/mv $KernelDir/sysctl.conf{,.ori}
        wget -O $KernelDir/sysctl.conf http://$Ip:$Port/$ConfigDir/sysctl.conf &>/dev/null
            Msg "Kernel config"
    }
    
    # Defined hosts file Functions
    function hosts(){
            HostsDir=/etc
            [ -f "$HostsDir/hosts" ] && /bin/mv $HostsDir/hosts{,.ori}
            wget -O $HostsDir/hosts http://$Ip:$Port/$ConfigDir/hosts &>/dev/null
            Msg "Hosts config"
    }
    
    # Defined System Startup Services Functions
    function boot(){
        for oldboy in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|rsyslog|sshd"`
          do 
           chkconfig $oldboy off
        done
        Msg "BOOT config"
    }
    
    # Defined Time Synchronization Functions
    function Time(){
        echo "#time sync by zhangyao at $(date +%F)" >>/var/spool/cron/root
        echo '*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root
            Msg "Time Synchronization"
    }
    
    # Defined main Functions
    function main(){
        ConfigIP
        yum
        AddUser
        HideVersion
        sshd
        openfiles
        kernel
        hosts
        boot
        Time        
    }
    
    main
    
    3.default配置
    
    cat>/var/lib/tftpboot/pxelinux.cfg/default<<EOF
    default ks
    prompt 0
    label ks
      kernel vmlinuz
      append initrd=initrd.img ks=http://172.16.1.61/ks_config/CentOS-6.8-ks.cfg ksdevice=eth1
    EOF

     tar包连接地址:http://pan.baidu.com/s/1dF07eTj

  • 相关阅读:
    ubuntu远程windows桌面
    spring boot 给返回值加状态 BaseData
    spring boot 拦截异常 统一处理
    IntelliJ IDEA spring boot 远程Ddbug调试
    IntelliJ IDEA 常用插件
    spring boot 请求地址带有.json 兼容处理
    spring boot 接口返回值去掉为null的字段
    spring boot 集成disconf
    Spring boot 自定义拦截器
    Linux下安装MySQL
  • 原文地址:https://www.cnblogs.com/xiejincheng/p/7011357.html
Copyright © 2011-2022 走看看