zoukankan      html  css  js  c++  java
  • kickstart批量装机脚本

    #!/bin/bash

    #安装必备的软件
    yum -y install dhcp tftp-server tftp xinetd syslinux vsftpd
    yum -y install *kickstart*

    #配置kickstart服务器端的DHCP服务
    >/etc/dhcpd.conf
    #############################################################
    cat> /etc/dhcpd.conf<<EOF
    ddns-update-style interim;
    ignore client-updates;
    next-server 10.1.2.53;
    filename "pxelinux.0";

    subnet 10.1.2.0 netmask 255.255.255.0 {
            option routers                  10.1.2.1;
            option subnet-mask              255.255.255.0;

            option time-offset              -18000; # Eastern Standard Time
            range dynamic-bootp 10.1.2.100 10.1.2.200;
            default-lease-time 21600;
            max-lease-time 43200;
    }

    EOF
    #####################################################

    #修改网卡配置文件并启动DHCP
    sed -i 's/^.*IPADDR.*$/IPADDR=10.1.2.53/g' /etc/sysconfig/network-scripts/ifcfg-eth1
    sed -i 's/^.*BOOTPROTO.*$/BOOTPROTO=static/g' /etc/sysconfig/network-scripts/ifcfg-eth1
    service network restart
    service dhcpd restart
    #修改tftp配置文件并重启xinetd服务
    sed -i 's/^.*disable.*$/disable = no/g' /etc/xinetd.d/tftp
    rsync -av /usr/lib/syslinux/pxelinux.0 /tftpboot/
    service xinetd restart

    #创建必要的目录
    mkdir /var/ftp/disk 
    mkdir /var/ftp/kickstart

    #挂载安装光盘
    mount /dev/cdrom /var/ftp/disk
    service vsftpd restart
    #拷贝光盘中网卡启动文件到tftpboot目录下
    rsync -av /var/ftp/disk/images/pxeboot/ /tftpboot/
    mkdir -p /tftpboot/pxelinux.cfg

    修改网卡启动文件
    #####################################################
    cat> /tftpboot/pxelinux.cfg/default<<EOF

    default linux
    prompt 1
    timeout 30

    label linux
      kernel vmlinuz
      append initrd=initrd.img ks=ftp://10.1.2.53/kickstart/ks.cfg
      
    EOF
    #####################################################
    #修改kickstart配置文件,这个文件的内容可以参照root目录下的anaconda-ks.cfg文件内容

    cat>/var/ftp/kickstart/ks.cfg<<EOF
    install
    text
    #nfs --server=10.1.2.53 --dir=/var/ftp/pub/
    url --url ftp://10.1.2.53/disk
    #key --skip
    #key 000000e90007fc00
    key 2515dd4e215225dd
    #lang en_US.UTF-8
    lang zh_CN.UTF-8
    keyboard us
    network --device eth0 --bootproto dhcp --onboot=on
    rootpw 123456
    authconfig --enableshadow --enablemd5
    firewall --disabled
    selinux --disabled
    timezone Asia/Shanghai
    bootloader --location=mbr --driveorder=sda --append="rhgb quiet clock=pit"
    zerombr
    clearpart --all --drives=sda --initlabel
    autopart
    #part / --fstype ext3 --size=1 --grow
    #part /var --fstype ext3 --size=2000
    #part swap --size=1000
    poweroff

    %packages
    @base
    @core
    @editors
    @text-internet
    @web-server
    @graphical-internet
    @base-x
    @chinese-support
    @gnome-desktop
    libgfortran43
    dejagnu
    python-docs
    gcc43
    expect
    pexpect
    unifdef
    kexec-tools
    fipscheck
    device-mapper-multipath
    gtk+
    xorg-x11-utils
    xorg-x11-server-Xnest
    xorg-x11-server-Xvfb
    libsane-hpaio
    perl-libxml-perl
    perl-XML-SAX
    perl-LDAP
    perl-Convert-ASN1
    perl-DateManip
    perl-XML-Twig
    perl-XML-Grove
    perl-XML-Dumper
    python-imaging
    perl-Crypt-SSLeay
    perl-Mozilla-LDAP
    perl-Archive-Zip
    perl-TimeDate
    perl-XML-NamespaceSupport

    %post
    /usr/sbin/useradd admin
    /bin/echo 888888 | sr/bin/passwd admin --stdin
    /bin/touch /home/admin/HelloWorld

    /sbin/chkconfig auditd off
    /sbin/chkconfig autofs off
    /sbin/chkconfig avahi-daemon off
    /sbin/chkconfig bluetooth off
    /sbin/chkconfig cups off
    /sbin/chkconfig firstboot off
    /sbin/chkconfig gpm off
    /sbin/chkconfig haldaemon off
    /sbin/chkconfig hidd off
    /sbin/chkconfig ip6tables off
    /sbin/chkconfig kudzu off
    /sbin/chkconfig mcstrans off
    /sbin/chkconfig netfs off
    /sbin/chkconfig nfslock off
    /sbin/chkconfig pcscd off
    /sbin/chkconfig portmap off
    /sbin/chkconfig restorecond off
    /sbin/chkconfig rhnsd off
    /sbin/chkconfig rpcgssd off
    /sbin/chkconfig rpcidmapd off
    /sbin/chkconfig smartd off
    /sbin/chkconfig yum-updatesd off

    EOF
    #####################################################

    Kickstart/Anaconda实现自动化安装原理探究

    系统安装一般流程

      首先了解系统安装一般流程:

     

     .  Anaconda简介

    简介:
         Anaconda是Red Hat、CentOS、Fedora等Linux的安装管理程序。它可以提供文本、图形等安装管理方式,并支持Kickstart等脚本提供自动安装的功能。此外,其还支持许多启动参数,熟悉这些参数可为安装带来很多方便。该程序是把位于光盘或其他源上的数据包,根据设置安装到主机上的一个程序;为实现该定制安装,其提供一个定制界面,可以实现交互式界面供用户选择配置(如选择语言,键盘,时区等信息);
    Anaconda支持的管理模式:
        Kickstart提供的自动化安装
        对一个RedHat实施upgrade
        Rescuse模式对不能启动的系统进行故障排除;
         要进入安装步骤,需要先有一个引导程序引导启动一个特殊的Linux安装环境系统;引导有多种方式:
        1.  基于网络方式的小型引导镜像,需要提供小型的引导镜像;
        2.  U盘引导,通过可引导存储介质中的小型引导镜像启动安装过程;
        3.  基于PXE的网络安装方式,要提供PXE的完整安装环境;
        4.  其他bootloder引导(如GRUB)
    可用的安装方式:
        本地CDROM
        磁盘驱动器
        NFS映像
        FTP
        HTTP
        通过网络方式安装时:
        不论通过FTP、HTTP还是NFS方式共享安装,可以将安装光盘先拷贝到网络服务器上保存为iso镜像,然后loop挂载到共享目录或网页目录(当然,拷贝镜像中的所有文件到指定位置或直接挂载到共享目录也可),而通过NFS方式时,可以直接将光盘的iso文件放到共享目录即可,安装程序挂载共享目录后可以自动识别镜像;
       注:复制安装光盘,并保存为一个 iso 映像文件的方法:
       对于 DVD/CD:
       # dd if=/dev/cdrom  of=/location/of/disk/space/RHEL.iso  bs=32k
            注意拷贝时bs块大小设置为32k,我实验时设为1M,虽然减小了文件体积,但是安装读镜像时会报错。

     三、 Kickstart简介:

    简介
         kickstart是一个利用Anconda工具实现服务器自动化安装的方法;通过生成的kickstart配置文件ks.cfg,服务器安装可以实现从裸机到全功能服务的的非交互式(无人值守式)安装配置;
    ks.cfg是一个简单的文本文件,文件包含Anconda在安装系统及安装后配置服务时所需要获取的一些必要配置信息(如键盘设置,语言设置,分区设置等);Anconda直接从该文件中读取必要的配置,只要该文件信息配置正确无误且满足所有系统需求,就不再需要同用户进行交互获取信息,从而实现安装的自动化;但是配置中如果忽略任何必需的项目,安装程序会提示用户输入相关的项目的选择,就象用户在典型的安装过程中所遇到的一样。一旦用户进行了选择,安装会以非交互的方式(unattended)继续。
    使用kickstart优势:
        1.  流线化自动化的安装;
        2.  快速大量的裸机部署;
        3.  强制建立的一致性(软件包,分区,配置,监控,安全性)
        4.  减少人为的部署失误
    使用Kickstart方法安装的过程:
        1.  创建一个kickstart文件
        2.  创建有kickstart文件的引导介质或者使这个文件在网络上可用;
        3.  筹备一个安装树
        4.  开始ks安装:anconda自身启动 -->选取ks安装模式--> 从ks文件读取配置 --> 最后安装
    创建kickstart配置文件的方式:
       1.  文本编辑器编辑生成:vim
       2. 用图形化界面配置:system-config-kickstat(需要安装system-config-kickstart.noarch包)
      注:图形化界面配置时,磁盘选项无法创建配置LVM(逻辑卷);
          文件生成后,推荐使用ksvalidator命令检查配置文件语法及完整性错误;
           [root@bogon ~]# ksvalidator ks.cfg 
            not enough arguments for format string
    图形化界面配置示例:



     引导并指定安装方式:

      系统引导界面:


      系统引导后,会显示boot:命令提示符;如上,界面上会有各种模式操作提示;
      注:用户交互的文本安装方式中不能进行LVM的自定义配置,只能查看、接受默认设置;

      boot:命令行里有用的几个项:
      lowres
        :强制GUI安装时分辨率调低为640*480
      noipv6
         :安装过程不支持ipv6网络
      noprobe
        :不去自动检测硬件,而是提示用户;
      dd=
        :通过网络加载设备驱动
      ks=
         :指定kickstart文件的放置位置;
    另外还有ipnetmaskgatewaydnsvnc等选项;
       用ks选项被指定时kickstart文件位置时,Anaconda进入Kickstart安装模式;
    安装时获取kickstart文件的方式:
    1 bootlinux ks

        ks命令单独使用时,系统会尝试通过dhcp服务器配置网卡,并且从DHCP会话中获取kickstart配置文件的位置;
        在dhcp服务器dhcp配置文件中有kickstart文件位置说明,next-server关键字指向共享文件的NFS主机,用filename关键字指向主机上的文件路径;如果没有filename关键字,则尝试在next-server关键字指向主机的/kickstart文件夹中找kickstart文件;
        下面是dhcp.conf文件中kickstart配置字段示例:

    1. # The following lines are examples of kickstart directives. 
    2.         filename "/data/ks/ks.cfg"; 
    3.         next-server 192.168.1.10; 
    4. # 注:上面部分需要写在subnet子段中;

    2 bootlinux ks=url
         基于网络的文件服务器(网络服务器),获取配置文件,支持HTTP、FTP、NFS方式获取文件;例:
        ks=ftp://192.168.0.254/pub/kistart/ks.cfg
        ks=http:// 192.168.0.254/pub/kistart/ks.cfg
        ks=nfs:ip_addr:/path/to/ks.cfg
    3 bootlinux ks=hd:device/path/to/your/kickstart_file
         基于本地的安装方式,需要依次指定设备名,路径,文件名等;例如:    
       文件在光盘中:ks=cdrom:/ks.cfg
       文件在软盘中:    ks=floppy:/filedirectory/ks.cfg
       文件在硬盘中:ks=hd:/sdb1/myfile/ks.cfg
       文件也可被打包进initrd根文件系统中:ks=file:/ks.cfg
    kickstart文件结构介绍:
      1.  命令部分:配置系统的属性及安装中的各种必要设置信息
      2.  %packages部分:设定需要安装的软件包及包组,Anaconda会自动解决依赖关系
      3.  脚本部分:用于定制系统,分为%pre部分在安装前运行,%post在安装后运行
        %pre 部分脚本作为一个bash shell脚本执行,在Kickstart文件解析后执行;
        %post 解析器默认为bash,可以自定义,缺省为chroot状态,也可指定非chroot状态;

    .  Kickstart文件中的主要项目及参数介绍:

        每个项目都由关键字来识别;关键字可跟一个或多个参数;如果某选项后面跟随了一个等号(=),它后面就必须指定一个值。

    install   (可选)
        明确指定系统次次进行的是全新安装系统;是默认项;
    cdrom  (可选)
        以本地CD-ROM为源安装系统;
    harddrive  (可选)
        以硬盘分区中包含的镜像为源(安装树)安装新系统;当以该种方式安装系统时,即使指定clearpart --all项,源所在分区也不会被重新抹去;
        --partition=    指定分区
        --dir=        指定包含镜像的目录
        例:
        harddrive  --partition=/dev/sdb2  --dir=/data/iso
    nfs   (可选)
        指定从NFS服务器上获取安装树;
        --server=    指定NFS服务器,主机名称或IP
        --dir=        包含安装树的目录
        --opts=        可以指定挂载NFS的目录时的挂载选项
        例:
        nfs  --server=192.168.1.254  --dir=/data/iso
    url   (可选)
        指定通过FTP或HTTP从网络获取安装树;
        --url    指定资源位置
        例:
        url  --url  ftp://<username>:<password>@install.example.com/iso
        url  --url  http://install.example.com/iso
    bootloader (必需)
        设定boot loader安装选项;
        --append=        可以指定内核参数
        --driveorder=    设定设备BIOS中的开机设备启动顺序
        --location=        设定引导记录的位置; mbr:默认值;partition:将boot loader安装于包含kernel的分区超级快中;none:不安装boot loder。
        示例:
        bootloader  --location=mbr  --append=“rhgb quiet” --driveorder=sda,sdb
      clearpart (可选)
        在建立新分区前清空系统上原有的分区表,默认不删除分区;
        --all      擦除系统上原有所有分区;
        --drives    删除指定驱动器上的分区
        --initlabel    初始化磁盘卷标为系统架构的默认卷标
        --linux        擦除所有的linux分区
        --none(default)不移除任何分区
       例:
       clearpart  --drives=hda,hdb --all  --initlabel
    zerombr  (可选)
        清除mbr信息,会同时清空系统用原有分区表
    drivedisk (可选)
        如果使用特殊存储方式时,需要指定驱动程序盘位置以便加载存储驱动;
       1.  将驱动盘拷贝到本地硬盘某分区根目录:
         drivedisk <partition> [ --type=<fstype> ]
       2.  也可以指定一个网络位置加载驱动程序盘
         drivedisk  --source=ftp://path/to/drive.img
         drivedisk  --source=http://path/to/drive.img
         drivedisk  --source=nfs:host://path/to/drive.img
    firewall (可选)
        配置系统防火墙选项;
        firewall –enable|--disable  [ --trust ] <device> [ --port= ]
        --enable        拒绝外部发起的任何主动连接;
        --disable        不配置任何iptables防御规则;
        --trust        指定完全信任网卡设备;
        --port        使用port:protocol格式指定可以通过防火墙的服务;
        示例:
        firewall --enable --trust eth0  --trust eth1  --port=80:tcp
    selinux (可选)
        设置系统selinux状态;默认为启用并处于enforcing模式;
        selinux [ --disabled|–enforcing|--premissive ]
    reboot (可选)
        在系统成功安装完成后默认自动重启系统(kickstart方法时);在收到你敢装系统完成后,会提示按任意键进行重启;
        在本文件中没有明确指明其他方法时就默认完成方式为reboot;
        使用 reboot 选项可能会导致安装的死循环,这依赖于安装介质和方法。需要特别注意;
    halt  (可选)
        在系统成功安装完成后关机;默认为reboot;
        其他选项还有shutdown、poweroff,需要使用请自行参考官方文档。
    graphical (可选)
        默认值,在图形模式下进行kickstart方式安装;
    text (可选)
        以文本方式进行kickstart安装;默认为图形界面
    key  (可选)
        设置一个安装码(installration number),用于获取redhat官方的支持服务;
        --skip    跳过key设置,不进行设置;如果不设置可能跳转到交互模式让用户选取动作;
    keyboard (必需)
        设置键盘类型;一般设置为us;
    lang (必需)
        设置安装过程使用的语言及系统的缺省语言;文本模式安装时可能不支持某些语言(中、韩...),所以可能仍以默认的英文方式安装;默认en_us,装中文时,需要后期%packages部分装上中文支持组件;
        例:
        lang en_US
    timezone (可选)
        设置系统的时区;
        timezone  [ --utc ]  <timezone>
        例:
        timezone  --utc  Asia/Shanghai
    auth/authconfig  (必需)
        设置系统的认证方式;默认为加密但不隐藏(shadow);
        --enablemd5    使用MD5加密方式
        --useshadow或—enableshadow    使用隐藏密码;
        --enablenis=     使用NIS认证方式
        --nisdomain=    NIS域
        --nisserver=       NIS服务器
        还可以设置LDAP、SMB及Kerberos 5认证方式,详细请参考官方文档;
        例:
        authconfig  --useshadow  --enablemd5
    rootpw (必需)
        设置系统root账号的密码;
        rootpw [ --iscrypted ]  <passwd>
        --iscrypted    表示设置的密码为加密过的串;
        例:
        rootpw  pa4word
        rootpw --iscrypted  $1$RPYyxobb$/LtxMNLJC7euEARg2Vu2s1
    network (可选)
        配置网络信息;在网络安装(NFS/HTTP/FTP)时必须指定;
        --bootproto=dhcp|bootp|static    指定ip获取方式,默认为dhcp/bootp;
        --device=    设置安装时激活来进行系统安装的网卡设备;该参数只在kickstart文件为本地文件时有效;若kickstart配置文件在网络上,安装程序会先初始化网卡然后去寻找kickstart文件;
        --ip=    ip设置
        --gateway=   网关
        --nameserver=  DNS设置
        --nodns         不设置DNS
        --netmask=   掩码
        --hostname= 设置安装后主机名称
        --onboot=    设置是否在系统启动时激活网卡
        --class=        设置DHCP的class值
        --noipv4        禁用该设备的ipv4功能
        --noipv6        禁用该设备的ipv6功能
        如将网络模式设置为静态模式,则必须在一行内写上ip,netmask、dns、gateway等信息;
        例:
        network –bootproto=static –ip=1.1.1.1 --metmask=255.0.0.0 --gateway=1.1.1.254 --nameserver=1.1.1.2
        netmask --bootproto=dhcp  --device=eth0

     

    KICKSTART无人值守安装的脚本

    #!/bin/sh
    KICK_SRV="80.1.1.199"
    DHCP_SUB="80.1.1.0"
    DHCP_MASK="255.255.255.0"
    DHCP_RANGE="80.1.1.100 80.1.1.200"
    CDROM_PATH=/media
    NETINSTALL_PATH=/netinstall
    KS_CFG=ks.cfg

    umount /dev/hdc;mount /dev/cdrom /media
    yum clean all;yum list;yum -y install dhcp
    cat > /etc/dhcpd.conf << EOF1

    ddns-update-style interim;
    ignore client-updates;
    next-server ${KICK_SRV};
    filename "pxelinux.0";

    subnet ${DHCP_SUB} netmask ${DHCP_MASK} {

    # --- default gateway
            option routers                  192.168.0.1;
            option subnet-mask              255.255.255.0;

    #       option nis-domain               "domain.org";
    #       option domain-name              "domain.org";
    #       option domain-name-servers      192.168.1.1;

            option time-offset              -18000; # Eastern Standard Time
    #       option ntp-servers              192.168.1.1;
    #       option netbios-name-servers     192.168.1.1;
    # --- Selects point-to-point node (default is hybrid). Don't change this unless
    # -- you understand Netbios very well
    #       option netbios-node-type 2;

            range dynamic-bootp ${DHCP_RANGE};
            default-lease-time 21600;
            max-lease-time 43200;

            # we want the nameserver to appear at a fixed address
            host ns {
                    next-server marvin.redhat.com;
                    hardware ethernet 12:34:56:78:AB:CD;
                    fixed-address 207.175.42.254;
            }
    }

    EOF1

    cat > /etc/xinetd.d/tftp <<EOF2

    service tftp
    {
            socket_type             = dgram
            protocol                = udp
            wait                    = yes
            user                    = root
            server                  = /usr/sbin/in.tftpd
            server_args             = -s /tftpboot
            disable                 = no
            per_source              = 11
            cps                     = 100 2
            flags                   = IPv4
    }

    EOF2

    function Tftp_operate {
    rsync -av ${CDROM_PATH}/images/pxeboot/initrd.img /tftpboot/
    rsync -av ${CDROM_PATH}/images/pxeboot/vmlinuz /tftpboot/
    rsync -av /usr/lib/syslinux/pxelinux.0 /tftpboot/
    mkdir -p /tftpboot/pxelinux.cfg;touch /tftpboot/pxelinux.cfg/default;
    mkdir -p ${NETINSTALL_PATH}
    }

    Tftp_operate

    cat > /tftpboot/pxelinux.cfg/default << EOF3

    default linux
    prompt 0
    timeout 30
    label linux
    kernel vmlinuz
    append ks=nfs:${KICK_SRV}:${NETINSTALL_PATH}/${KS_CFG} initrd=initrd.img

    EOF3

    cat > /etc/exports << EOF4
    ${NETINSTALL_PATH}                     *(ro,async)
    ${CDROM_PATH}                         *(ro,async)
    EOF4

    exportfs -rv

    cat > ${NETINSTALL_PATH}/${KS_CFG} <<EOF5

    install
    text
    nfs --server=${KICK_SRV} --dir=${CDROM_PATH}
    key --skip
    lang en_US.UTF-8
    keyboard us
    network --device eth0 --bootproto dhcp --onboot=on
    rootpw 123
    reboot
    firewall --disabled
    authconfig --enableshadow --enablemd5
    selinux --disabled
    timezone --utc Asia/Shanghai
    bootloader --location=mbr --driveorder=sda --append="rhgb quiet"
    # The following is the partition information you requested
    # Note that any partitions you deleted are not expressed
    # here so unless you clear all partitions first, this is
    # not guaranteed to work
    clearpart --all --drives=sda --initlabel
    part /boot --fstype ext3 --size=100
    part /home --fstype ext3 --size=1000
    part swap --size=2048
    part / --fstype ext3 --size=5000

    %packages
    @office
    @editors
    @text-internet
    @gnome-desktop
    @dialup
    @core
    @base
    @games
    @java
    @legacy-software-support
    @base-x
    @graphics
    @printing
    @sound-and-video
    @admin-tools
    @graphical-internet
    emacs
    kexec-tools
    device-mapper-multipath
    xorg-x11-utils
    xorg-x11-server-Xnest
    libsane-hpaio
    -sysreport

    EOF5

    function StartServer {
    /etc/init.d/dhcpd restart
    /etc/init.d/xinetd restart
    /etc/init.d/portmap restart
    /etc/init.d/nfs restart
    }

    StartServer

    #脚本

  • 相关阅读:
    odbc 连接字符串
    25个国外优秀电子商务网站设计案例
    用css 添加手状样式,鼠标移上去变小手,变小手
    js如何获得FCKeditor控件的值
    导致Asp.Net站点重启的10个原因
    分享45款高质量的免费(X)HTML/CSS模板
    20110627 VisualSVN安装与配置(Delphi72010/VS2010)
    iBatis把一个表的sqlmap配置的多个xml中。
    ASP.NET State Service
    存储过程分页
  • 原文地址:https://www.cnblogs.com/L-H-R-X-hehe/p/3786088.html
Copyright © 2011-2022 走看看