linux之PXE+kickstart实现无人值守安装

                                 PXE方式安装linux系统


1、PXE简介:

    PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。

说白了,就是当公司批量采购一些服务器时,要批量安装相同的操作系统(如linux)时,一种更加便捷的安装方式。无需去每一台服务器上插拔光驱或者系统光盘,而是将安装光盘中的文件放到一台类似文件服务器中,来实现系统的安装。但是,单单采用PXE方式安装,必须手动执行安装配置过程,它并不能实现全自动化安装;


kickstart简介:

     由红帽推出,给用户提供了一种自动化安装红帽企业Linux的方法。   

许多系统管理员宁愿使用自动化的安装方法来安装红帽企业 Linux.为了满足这种需要,红帽创建了kickstart安装方法.使用kickstart,系统管理员可以创建一个文件,这个文件包含了在正常安装过程中所遇到的问题的答案
    Kickstart文件可以存放于单一的服务器上,在安装过程中被独立的机器所读取.这个安装方法可以支持使用单一kickstart文件在多台机器上安装红帽企业Linux,这对于网络和系统管理员来说是个理想的选择。

    说白了,将正常安装过程中的配置选择过程结果放入脚本中,在执行安装时,就无需再手动选择配置参数了,而是直接读取这个kickstart脚本文件,去实现自动化安装。需要结合PXE的方法来实现无人值守安装;      

    kickstart文件的获取:

方式1:复制模板/root/anaconda-ks.cfg,而后使用vim编辑修改一下;

方式2:使用system-config-kickstart(需要安装)来生成,建议也使用/root/anaconda-ks.cfg作为模板来进行(简单些);

该命令通过xshell使用后,会在windows上看到linux的操作窗口界面,进行点击配置即可(必须xshell);

或者,在linux的图形界面下,输入上面命令,也能打开;

也可以读进来一个配好的配置文件进行修改;

ksvalidator:检测手动创建的ks文件是否有语法错误;

格式:ksvalidator + ks.xx.cfg文件;(没有报错就没有问题了)

centos5和centos6的ks文件是不一样的,使用检测也会各自报错。语法不完全兼容

方式3

Red Hat提供了一个样例文件。在Red Hat Linux 文档光盘中 RH-DOCS 目录里的 sample.ks 文件。你可以基于该样例来创建你自己的配置kickstart文件



技术分享

2、配置环境:

    准备两台虚拟机,一台安装http、dhcp、tftp服务。另一台用来测试pxe安装;

    操作系统:centos 6.5 x86_64;

    虚拟机网卡一定要能支持基于网络启动;

    关闭selinux、关闭防火墙;


3、无人值守自动化执行安装原理:

技术分享


4、服务部署:

    1、安装dhcp服务:

        作用:提供给客户端ip地址,及告诉客户端如何获得系统安装树的路径;

    2、安装tftp:

        作用:存放系统引导文件。提供kickstart自动化脚本;

    3、安装http服务:

        作用:提供安装树(类似系统光盘);

        


5、安装配置步骤:

    环境准备:

     1、 首先,我们在PXE服务端上添加两个网卡,一个是管理,一个是给DHCP服务使用;

        技术分享


    2、闭linux防火墙和N额头workManager服务:

 技术分享    

    3、关闭selinux

    [root@localhost ~]# vim /etc/selinux/config

                        SELINUX=disabled


    4、给eth1提供配置文件,并启用eth0和eth1两个网卡:

    [root@localhost ~]# ifconfig eth1
          eth1      Link encap:Ethernet  HWaddr 00:0C:29:B2:B7:30      (先看看识别出的mac是多少)
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:7308 (7.1 KiB)

    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1

                    DEVICE=eth1
                    HWADDR=00:0C:29:B2:B7:30
                    TYPE=Ethernet
                    UUID=5f4cb50c-7024-46b3-afc1-d49a1a1d992c
                    ONBOOT=yes
                    NM_CONTROLLED=yes
                    BOOTPROTO=static
                    IPADDR=1.1.1.1
                    NETMASK=255.255.255.0

                                        :这里的配置是我从eth0那边复制过来的,改成了eth1和mac地址;


    5、安装服务:

    [root@localhost ~]# yum -y install dhcp*

    [root@localhost ~]# yum -y install tftp*

    [root@localhost ~]# yum -y install httpd

    [root@localhost ~]# yum -y install xinetd


    6、服务配置:

        配置dhcp:

        [root@localhost ~]# cp /usr/share/doc/dhcp*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
        cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y       
        [root@localhost ~]# vim /etc/dhcp/dhcpd.conf 

                      subnet 1.1.1.0 netmask 255.255.255.0 {
                        range 1.1.1.2 1.1.1.10;
                        option routers 1.1.1.1;
                        next-server 1.1.1.1;         :指定tftp服务器的ip地址;
                        filename "pxelinux.0";       :指定系统安装文件名;
                        }

        [root@localhost ~]# service dhcpd start
            正在启动 dhcpd:                                           [确定]


        配置tftp:

        [root@localhost ~]# mkdir /test
        [root@localhost ~]# mount /dev/cdrom /test
        mount: block device /dev/sr0 is write-protected, mounting read-only
        [root@localhost ~]# cp /test/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
        [root@localhost ~]# cp /test/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
        [root@localhost ~]# yum -y install syslinux

        [root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
        [root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
        [root@localhost ~]# cp /test/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
        [root@localhost ~]#        :将系统光盘中的文件复制到tftp中,作为安装时的引导文件;


        [root@localhost ~]# vim /etc/xinetd.d/tftp

                            disable                 = no

        [root@localhost ~]# chkconfig tftp on

        [root@localhost ~]# service xinetd restart

        [root@localhost ~]# chkconfig --list

                        tftp:              启用            :启用tftp,有超级守护进程负责监督;


        配置http:

        [root@localhost ~]# mkdir /var/www/html/centos6
        [root@localhost ~]# mount --bind /test/ /var/www/html/centos6/
        [root@localhost ~]# service httpd restart

              :在http服务的根文件路径下创建安装树(也就是复制光盘文件到目录下),保证安装树可被访问;

        技术分享


    7、开始PXE客户端测试:

        保证测试机网卡第一启动项是基于网络的:

        技术分享


      查看dhcp日志,发现ip已经下发给PXE客户端了:     

技术分享

        

        客户端已经进入安装界面了:

技术分享



        指定安装方法,也就是指定安装树的位置:因为安装树我们放到了http根目录里面,所以选“URL”;

技术分享


        启用基于ipv4的网络,关闭ipv6:

技术分享


        指定安装数的路径,很重要:

技术分享



        指定正确之后,开始下载引导文件,接着就会进入熟悉的安装界面了:

技术分享


        ok,接下去,手动配置安装即可:

技术分享


       ok,这里基于PXE引导安装linux系统完成了,接下去,完成无人值守的安装方式:PXE+kickstart


    接下来一定要基于上面的配置环境进行:

1、制作kickstart文件;

    这里,我们基于linux图像化界面使用system-config-kickstart去修改anaconda-ks.cfg的方式获得kickstart文件;

    (注意:每一次我们安装完系统之后,都会在root家目录下面生成一个基于kickstart的anaconda-ks.cfg配置文件,可以借助这个文件来做修改,再给别的机器使用;

    [root@localhost ~]# yum -y install system-config-kickstart   :安装kickstart脚本生成命令;

    [root@localhost ~]# system-config-kickstart                 :执行命令,进入图形界面进行参数配置;


    1、利用该工具,去打开位于/root下面的anaconda-ks.cfg做参数修改,更加方便些,也可以自己重新配置:

技术分享

技术分享


    修改基本配置:技术分享


    修改安装方法:指定安装树的目录位置,位于http://1.1.1.1/centos6/下面(重要);

技术分享


    修改引导装载选项:

 技术分享


    修改分区信息:为新系统做好分区,可以依自己定义;

技术分享


    修改网络配置:这里有了,就无需修改了;

技术分享




    保存配置到/root目录下面,然后退出即可:技术分享


    2、根据生成的ks.cfg文件,做修改:

    [root@localhost ~]# pwd
    /root
    [root@localhost ~]# ll
    总用量 104
    -rw-------. 1 root root  1595 3月  26 19:33 anaconda-ks.cfg
    -rw-r--r--. 1 root root 45537 3月  26 19:33 install.log
    -rw-r--r--. 1 root root 10033 3月  26 19:28 install.log.syslog
    -rw-r--r--  1 root root  1594 4月   4 08:03 ks.cfg
    drwxr-xr-x  2 root root  4096 4月   4 07:45 公共的
    drwxr-xr-x  2 root root  4096 4月   4 07:45 模板
    drwxr-xr-x  2 root root  4096 4月   4 07:45 视频
    drwxr-xr-x  2 root root  4096 4月   4 07:45 图片
    drwxr-xr-x  2 root root  4096 4月   4 07:45 文档
    drwxr-xr-x  2 root root  4096 4月   4 07:45 下载
    drwxr-xr-x  2 root root  4096 4月   4 07:45 音乐
    drwxr-xr-x  2 root root  4096 4月   4 07:45 桌面
    [root@localhost ~]# vim ks.cfg

          repo --name="CentOS" --baseurl=http://1.1.1.1/centos6 --cost=100  :这里要改成安装树的位置;

                                            :注意:这里一定要改成安装树的位置,不然自动装包时找不到;

    [root@localhost ~]# cp ks.cfg /var/www/html/
    [root@localhost ~]#            :最后,将ks.cfg复制到httpd根目录下,注意要有读的权限,测试访问一下;


    3、修改引导文件,使PXE支持kickstart:

    [root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default

                        label linux
                        menu label ^Install or upgrade an existing system
                        menu default
                        kernel vmlinuz
                        append initrd=initrd.img ks=http://1.1.1.1/ks.cfg    :添加ks.cfg路径位置;


    4、重启服务:

    [root@localhost ~]# service httpd restart

    [root@localhost ~]# service dhcpd restart

    [root@localhost ~]# service xinetd restart


    5、客户端进行测试:

        当客户端拿到dhcp下发的ip地址后则进入了安装界面,此时倒计时60秒进入安装,无需任何操作;

        技术分享

        

        根据dncp指示,找到tftp,加载系统引导文件;

        技术分享


        加载安装镜像:

   技术分享



    初始化安装了:

技术分享


    开始装包了:共计1105个包;

 技术分享


    包装完了之后,系统会自动重启,然后即可远程登陆了;技术分享

    ok,pxe+kickstart 搭建就这样完成了;


结束!







本文出自 “linux运维集锦” 博客,请务必保留此出处http://5200linux.blog.51cto.com/6012970/1628178

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。