免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1997 | 回复: 0
打印 上一主题 下一主题

独辟蹊径网络安装系列Redhat衍生版系列 [09年2月刊] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-06 11:19 |只看该作者 |倒序浏览

ChinaUnix网友:kns1024wh
      

    此文章是
Linux部署方式系列文章中的第三部分,回归到主流的Redhat衍生版体系以及描述对比PXE安装服务的实现及使用Kickstart在部署主机系统是的妙用。本文涉及的内容是对现有Redhat体系的网络安装方式的一个总结,重点是在讲述PXE安装服务器的核心内容实现方式并不限于Linux环境;结合Kickstart如何快速的实现安装主机的基本信息的配置,以及如何定制主要软件包,同样灵活应用Kickstarttftp可以具体指定那台主机安装那些配置好的参数,节省管理员的时间和精力,自动安装减少了人为出错的几率。好处自然是很多,这里就不过多描述了,下面开始本文的内容。主要针对目前的RHEL5.3版本以及Centos5.2版本为例。
  首先熟悉一下PXE网络安装服务器的架构。PXE安装分为两个阶段,第一个阶段是BOOTP阶段,此阶段完全由网卡自带的PXEROM芯片所决定,Linux主机将从tftpserver上获得PXELinux启动内核和initrd.img文件;第二个阶段是在PXELinux内核启动Linux主机网络安装进程阶段,Linux主机需要和安装服务器进行网络通信,需要通过DHCP服务获得IP地址,以便获得安装脚本和获得安装文件。从下图可以看到PXE网络安装服务器包含一个DHCPTFTP主要解决主机没有操作系统的BOOTP阶段获取必要的安装信息,就是通过加载vmlinuzinitrd.img进入Linux安装的引导过程。其次就是要准备一个安装的镜像服务器并通过nfsftphttp等协议将Redhat&Centos的安装源(安装目录树)发布供安装使用,同时简单的变动一下这个安装目录树同样可以成为一个本地的yum源。重要的一点就是要提通过KickstartScript配置文件实现安装的自动化。

图:PXE网络安装服务架构
  实际上为了保持这个架构的通用性,将分别讲述在Redhat&Centos中的实现方式以及在Windows环境中的实现方式。实际上借助一些简单的工具PXE网络安装往往可以成为一个便携的方式存在。
  在Redhat&Centos中安装tftpdhcp,通过yum完成,这个对与Centos5.2非常的便利,至于在redhat中的操作,可以看后文中描述的建议的yum源的实现。
                        yum                        -y install tftp-server  #完成tftp                        server的安装
                        yum                        -y install dhcp*       #完成dhcp                        server的安装
               
  实际上PXE安装中有疑问的部分就是配置一个tftp的目录、设置dhcptftp启动参数、建立Redhat&Centos的安装目录树。要清楚这些问题先要从tftp主目录/tftpboot下的目录和文件用途说起。
                        /tftpboot/pxelinux.0                          #文件
                        /tftpboot/*.msg                               #文件
                        /tftpboot/vmlinuz                             #文件
                        /tftpboot/initrd.img                          #文件
                        /tftpboot/pxelinux.cfg                        #目录
               

Redhat&Centos安装程序的内核vmlinuz/根文件系统文件initrd.imgPXE安装过程的第一步,正确引导后将看到boot.msg*.msg中的一个)提示信息,用户选择安装方式,pxelinux.0启动镜像文件在执行过程中,会读取配置文件以确定它应该载入什么Linux内核文件来运行。所有的配置文件都放在启动服务器的/tftpboot/pxelinux.cfg/目录下。
  明白了tftpboot目录下的文件和目录的作用就要弄清楚这些文件是从那里获取的,这些文件就在已经安装好的Redhat&Centos系统和安装光盘中。为了便于获取这些文件需要建立一个安装的目录树,具体操作也是很简单的mountDVD镜像,建议使用DVD镜像当然CD镜像也是可以的,然后可以通过如下的命令复制DVD镜像上的全部的内容到安装目录树中。
                        mkdir                        /InstallOs    #建立安装目录树文件夹                        InstallOs
                        mount                        -o loop /home/CentOS-5.2-i386-bin-DVD.iso /mnt                            #centosDVD镜像mount
                        cd                        /mnt  #进入镜像加载目录
                        tar                        cf - . |(cd  /InstallOs;tar xfp -)                         #DVD镜像文件全部复制到安装目录树文件夹InstallOs
               
  下面就从安装目录树文件夹和当前的系统中获取tftpboot目录中的文件和文件夹
                        cp                        /usr/lib/syslinux/pxelinux.0 /tftpboot/    #获取                        pxelinux.0文件
                        cp                        /InstallOs/isolinux/initrd.img /tftpboot      
cp                        /InstallOs/isolinux/vmlinuz /tftpboot
cp                        /InstallOs/isolinux/*.Msg /tftpboot

mkdir                        /tftpboot/pxelinux.cfg      #
建立pxelinux.cfg目录
cp                        /InstallOs/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/
mv                        /tftpboot/pxelinux.cfg/isolinux.cfg /tftpboot/pxelinux.cfg/default
                        
                        
               
  到此已经建立了一个基础的tftpboot目录机构和一个安装目录树。基础工作结束下面进入到tftpdhcp的服务参数设置过程。具体设置参考下列配置文件:

1dhcp配置文件cat/etc/dhcpd.conf中的蓝色部分是设置支持BOOTP的参数,注意其中的filename"pxelinux.0";如果缺少这个信息逻辑将无法获取到安装程序的内核vmlinuz/根文件系统文件initrd.img;红色的部分是dhcp客户端获取的ip子网的信息,注意保持设置的subnet信息的一致性。
                        #cat                        /etc/dhcpd.conf
                        ddns-update-style                        none;
                        ddns-updates                        off;
                        deny                        client-updates;
                        one-lease-per-client                        false;
                        allow                        bootp;
                        option                        T150 code 150 = string;
                        allow                        booting;
                        class                        "pxeclients"{
                                match                        if substring(option vendor-class-identifier,0,9) = "XEClient";
                                filename                        "pxelinux.0";
                                next-server                        172.16.1.9;
                        }
                        subnet                        172.16.0.0 netmask 255.255.0.0 {
                                option                        routers                  172.16.1.9;
                                option                        subnet-mask              255.255.0.0;
                                option                        nis-domain               "telecarenet.cn";
                                option                        domain-name              "lvs.local";
                                option                        domain-name-servers      172.16.1.9;
                                option                        time-offset              -18000; # Eastern Standard Time
                                range                        dynamic-bootp 172.16.1.160  172.16.1.230;
                                default-lease-time                        21600;
                                max-lease-time                        43200;
                                #                        we want the nameserver to appear at a fixed address
                                host                        diskless {
                                        next-server                        172.16.1.9;
                                        hardware                        ethernet 00:02:b3:ee:7b:74;
                                        fixed-address                        172.16.1.210;
                                        filename                        "pxelinux.0";
                                }
                        }
               
2tftp配置文件cat/etc/xinetd.d/tftp中的蓝色部分是需要注意的,实际上tftp是一个xinetd的超级守护进程。
                        #cat                        /etc/xinetd.d/tftp
                        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
                        }
               
        启动tftpdhcp服务
                        /etc/init.d/xinetd                        restart    #启动tftp服务
                        /etc/init.d/dhcpd                        restart    #启动dhcp服务
               
  下面要实现的是针对安装目录树的网络发布,简单的是使用nfs配置文件只有一行就可以了,在/etc/exports文件中增加/InstallOs  *(ro)这么一行就可以了。但为了这个安装目录树的通用性,要同时将/InstallOs文件夹作为httpdftp站点发布出去,方法是在默认安装的apachevsftp的根目录中建立一个软连接。
                        ln                        -s /InstallOs /var/www/html/InstallOS    #建立apache的软连接
                        ln                        -s /InstallOs /var/ftp/InstallOS                 #建立vsftp                           的软连接
               
  这样就可以提供nfs/ftp/http三种网络安装协议的选择。
附上一个安装目录树的扩展价值,使其成为yum
                        cd                        /InstallOS
                        rpm                        -ivh ./Server/createrepo-0.4.11-3.el5.noarch.rpm
                        createrepo                        .    #创建yum仓库                                                
                        在主机/etc/yum.repos.d/目中删除现有的文件建立一个新的yum配置文件如下
[InstallOs]
name=InstallOs
baseurl=http://
安装服务器的ip地址/InstallOS/
enabled=1
gpgcheck=0

                        执行                        yum                        clean all然后就可以使用安装目录树的yum源进行软件包的管理了
               
  上述在Linux中的实现同样可以在Windows主机中通过3comtftpd32工具和Server-u工具实现,重点是要构将tftpboot和安装目录树在Windows主机中构建一份,可以将上面已经构建的文件夹复制到Windows主机中。参见下图中的设置部分要将pxelinux.0填写到Boot File中。将Server-U建立的ftp通过Kickstart整合起来,或者通过linuxaskmethod安装参数选择。

图:tftpd32设置

ok,现在就可以进行pxe的网络引导安装,前提要设置主机使用网卡的pxe进行引导。不过现在的pxe安装服务器还不是很智能,与使用光盘手动安装一步一步的操作是一样的,创新之处就是不用更换光盘。

Kickstart的功能,其主要目的是为了减少安装过程中的人机交互,提高安装效率。使用这种方法,只需事先定义好一个配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
  在Redhat&Centos的系统中提供了system-config-kickstart工具进行脚本文件的配置,如果能够有一个已经设置好的网络、磁盘分区、安装那些软件包的Kickstart脚本文件该多好。实际上在root目录下有一个anaconda-ks.cfg文件就是当前系统安装的Kickstart文件。一般用户可以通过修改这个文件,实现多个相同配置的主机脚本化安装。对于一个Kickstart文件分为命令部分、软件包选择部分%packages、脚本部分(%pre预安装脚本和%post安装后脚本),对于Kickstart文件,命令部分的语言、安装方式、设备规格、键盘设置、引导装载程序配置这些是不能缺少的。anaconda-ks.cfg中蓝颜色不会是磁盘分区信息,此文件显示的是从CD介质进行安装,并在安装过程中设置了网络参数信息,并可以看到安装后的软件包组信息,具体是那装了那些rpm文件需要看root帐户的根文件夹下的install.log文件。
                        cat                        anaconda-ks.cfg
                        #                        Kickstart file automatically generated by anaconda.
                        #以下的内容是kickstart文件的命令部分主要设置安装方式、语言、键盘、                        引导装载程#序配置等不可缺少的信息
                        install
                        cdrom
                        lang                        en_US.UTF-8
                        keyboard                        us
                        xconfig                        --startxonboot
                        network                        --device eth0 --bootproto static --ip 192.168.1.59 --netmask                        255.255.255.0 --gateway 192.168.1.1 --nameserver 221.11.12.14                        --hostname tes
                        rootpw                        --iscrypted $1$aKhtFLuj$gn/LxPNxVXUekzLcgAnJz1
                        firewall                        --enabled --port=22:tcp
                        authconfig                        --enableshadow --enablemd5
                        selinux                        --enforcing
                        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                        --linux --drives=sda
                        #part                        /boot --fstype ext3 --size=100 --ondisk=sda
                        #part                        pv.2 --size=0 --grow --ondisk=sda
                        #volgroup                        VolGroup00 --pesize=32768 pv.2
                        #logvol                        swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=512                        --grow --maxsize=1024
                        #logvol                        / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024                        --grow
                        
                        %packages#此部分开始是系统安装的软件包的选择部分
                        @editors
                        @text-internet
                        @gnome-desktop
                        @dialup
                        @core
                        @base
                        @base-x
                        @graphics
                        @printing
                        @graphical-internet
                        device-mapper-multipath
                        xorg-x11-server-Xnest
                        libsane-hpaio
                        -sysreport
               
        关于Kickstart配置的具体选项可以参考Redhat提供的Installation_Guide文档,其中有详细的描述和介绍。
文档Redhat网站下载地址如下:
http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/zh-CN/pdfs/Installation_Guide.pdf

文档Centos网站下载地址如下:
http://www.centos.org/docs/5/html/5.2/pdf/Installation_Guide.pdf

  上述事例中的anaconda-ks.cfg文件中没有使用%post部分脚本,故此在安装完成的系统上出IP地址信息设置完成,任何服务器上的配置都需要一步一步的操作完成,这个方式对于一个群集站点的部署来说是很不理想的。通过使用%post安装后的脚本,可以通过默认的shell脚本语法实现文件的下载、软件包的编译等工作,从而是安装后的主机可以直接投入到使用中,减少准备时间。以下是一个%post脚本事例,通过此段代码可以完成在PXE安装阶段安装heartbeat-2.1.4,当然也可以从ftp上将heartbeat-2.1.4需要的配置文件下载到指定的目录下,以节省配置时间。只要有了脚本可以完成很多想象的的事情!至于能够作什么只有管理员们自己在工作中慢慢体会了。
                        %post
                        cd                        /usr/src/                         
                        wget                        ftp://172.16.1.19/libnet.tar.gz                         
                        wget                        ftp://172.16.1.19/heartbeat-2.1.4.tar.gz                         
                        tar                        -xvf libnet.tar.gz                         
                        cd                        libnet                         
                        ./configure;make;make                        install;cd ..                         
                        tar                        -xvf heartbeat-2.1.4.tar.gz                         
                        cd                        heartbeat-2.1.4                         
                        ./ConfigureMe                        configure;make;make install;
               
  安装过程究竟要安装那些软件包合适,不能完全通过已安装系统的anaconda-ks.cfg文件获得,Redhat&Centos提供的system-config-kickstart配置工具提供了一个便捷的选择选择方式,不过限于Redhat目前的商业的授权问题,可以通过Centos对应的版本进行软件包的选择,具体如下图所示:

图:system-config-kickstart加载

图:system-config-kickstart配置软件包
  以下是一个RHEL5.3&Centos5.2的可用的软件包组的清单,可以工具自己的需要选择。其中蓝色部分为当前版本能够提供的全部的软件包组名称。
                        #platform=x86,                        AMD64, or Intel EM64T
                        #                        System authorization information
                        auth                         --useshadow  --enablemd5                         
                        #                        System bootloader configuration
                        bootloader                        --location=mbr
                        #                        Partition clearing information
                        clearpart                        --none                          
                        #                        Use graphical install
                        graphical
                        #                        Firewall configuration
                        firewall                        --enabled                           
                        #                        Run the Setup Agent on first boot
                        firstboot                        --disable
                        #                        System keyboard
                        keyboard                        us
                        #                        System language
                        lang                        en_US
                        #                        Installation logging level
                        logging                        --level=info
                        #                        Use CDROM installation media
                        cdrom
                        #                        SELinux configuration
                        selinux                        --enforcing
                        #                        System timezone
                        timezone                         America/New_York
                        #                        Install OS instead of upgrade
                        install
                        # X                        Window System configuration information
                        xconfig                         --defaultdesktop=GNOME --depth=8 --resolution=640x480
                        
                        %packages
                        @server-cfg
                        @base-x
                        @gnome-desktop
                        @ftp-server
                        @legacy-software-development
                        @development-libs
                        @base
                        @x-software-development
                        @sound-and-video
                        @mail-server
                        @network-server
                        @gnome-software-development
                        @admin-tools
                        @kde-software-development
                        @printing
                        @web-server
                        @mysql
                        @openfabrics-enterprise-distribution
                        @development-tools
                        @chinese-support
                        @java-development
                        @legacy-network-server
                        @system-tools
                        @kde-desktop
                        @legacy-software-support
                        @sql-server
                        @virtualization
                        @graphical-internet
                        @cluster-storage
                        @text-internet
                        @ruby
                        @office
                        @games
                        @dialup
                        @smb-server
                        @authoring-and-publishing
                        @graphics
                        @clustering
                        @emacs
                        @java
                        @dns-server
                        @engineering-and-scientific
                        @editors
                        @news-server
               
  当然这个system-config-kickstart配置工具并不局限于软件包的选择,可以设置一个Kickstart文件的命令、软件包选择、脚本等全部的信息。
  结合anaconda-ks.cfg安装配置文件和system-config-kickstart配置工具可以定制出特定服务器的安装ks文件,不过不同功能的服务器众多的ks配置文件该如何对用起来呢?是特定的主机可以识别相应的ks配置文件而不出现错误呢?这个就要说说位于tftpboot文件夹下的pxelinux.cfg的作用,这个pxelinux.cfg文件夹就是根据主机的MAC地址对用的配置文件名称识别具体的主机,从而实现特定主机使用相应的ks配置文件完成PXE的安装及系统的配置。
  默认PXE配置写入/tftpboot/pxelinux.cfg/default中。当计算机在PXE期间接收到DHCP地址时,就用特定顺序搜索/tftpboot/pxelinux.cfg下的配置文件,第一个找到的文件被用作请求计算机的启动配置。搜索顺序的确定方法是:优先搜索以客户端机器的网卡地址命名配置文件(以'01'开头,用'-'dash)分隔,用小写字母表示 MAC地址),并把请求DHCP地址转换成816进制数字,通过扩展子网对配置目录搜索第一个匹配的文件名(每一次搜索后从右到左删除一位数字),最后使用default这个默认的配置文件。这个是标准的解释不过是不是很麻烦还要进行一个进制转换的操作,不过计算机底层只是别这个没有办法的呀。
  例如,网卡的MAC地址是88:99:AA:BB:CCDIP地址是192.0.2.91,客户会按照如下顺序尝试配置文件名,其中IP地址为192.0.2.91,转换为十六进制数是C000025B
                        /ftfpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd                                                
                        /ftfpboot/pxelinux.cfg/C000025B                                                
                        /ftfpboot/pxelinux.cfg/C000025                                                
                        /ftfpboot/pxelinux.cfg/C00002                                                
                        /ftfpboot/pxelinux.cfg/C0000                                                
                        /ftfpboot/pxelinux.cfg/C000                                                
                        /ftfpboot/pxelinux.cfg/C00                                                
                        /ftfpboot/pxelinux.cfg/C0                                                
                        /ftfpboot/pxelinux.cfg/C                                                
                        /ftfpboot/pxelinux.cfg/default                                                
               
  所以为了优先使每台安装的主机都匹配上ks文件就需要获取主机的MAC地址并定义好网卡地址命名配置文件。
网卡的MAC地址是88:99:AA:BB:CCD的网卡地址命名配置文件01-88-99-aa-bb-cc-dd
                        cat                        01-88-99-aa-bb-cc-dd                         
                        default                        linux                         
                        label                        linux                         
                          kernel                        vmlinuz                         
                          append                        ip=192.168.1.214 netmask=255.255.255.0                        gateway=192.168.1.100                         ks=http://192.168.1.100:/InstallOs/webserver1.cfg                        initrd=initrd.img                         
               
  其中红色部分的作用对于一些较新型号的兼容网卡是很有意义的可以避免无法获取IP地址而终止安装过程的问题。
  这样的主机安装和配置过程只需要一台PXElinux安装服务器就可以解决问题,安装之前需要获知的即使主机的MAC地址,这个应该很简单,商业的服务器的说明书中都是带有网卡MAC地址说明的,当然也是可以通过其他途径获得。而且这个PXE安装服务器可以便携使用到笔记本电脑的windows环境中,之需要将配置好的ks配置文件放置在使用Serve-Uftp的目录下就可以修改pxelinux.cfg中的文件配置完成定制操作。
  本文作为系列独辟蹊径网络安装的系列文章的第三篇,希望对Linux用户能够有所提示和启发,欢迎就相关问题进行交流。
作者简介:CU网友kns1024wh,目前从事Linux群集方面的具体工作,之前做过多年的IT技术支持、MCT讲师、及REDFLAG的技术合作,技术专长群集、unix主机、AD部署等,您可以通过电子邮件lvsheat@qq.com或者Chinaunix社区与他取得联系。

[ 本帖最后由 Send_linux 于 2009-3-23 09:25 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP