首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Unix/Linux 系统自动化管理 系统更新篇(3)

Unix/Linux 系统自动化管理 系统更新篇(3)

基于 yum在 RedHat/SuSE 系统上运行的自动化代码由三个文件组成:(1)updateSW.conf、(2)updateLinuxSW.pl、(3)updateSWorSys.pl。
其中 updateSW.conf 存在于管理站上,包含需要更新的软件包的配置信息。
updateAIXSW.pl 是一个可执行的 perl 代码,也运行于管理站上,主要创建 yum 配置文件,构建软件仓库,解析 updateSW.conf,以获取需要被升级与更新的软件包列表,然后针对每个节点启动一个进程,从管理站上远程拷贝 yum 配置文件、updateSWorSys.pl 到节点上,然后通过 ssh 远程登陆到节点上执行 updateSWorSys.pl,以实现远程自动化软件升级与更新的功能。
updateSWorSys.pl 是运行于各个节点上的可执行的 perl 代码,被 updateAIXSW.pl 远程调用,主要根据 yum 配置文件与软件更新列表完成本地节点的软件自动化升级与更新。
  • updateSW.conf                          该文件主要软件包更新配置信息,其文件内容格式如下:
    kernel
    SysVinit
    basesystem
    bash
    redhat-release
    chkconfig
    … .
    ethtool
    filesystem
    findutils
    gawk
    glib2
    …… .
  • updateLinuxSW.pl 文件                         命令格式:updateLinuxSW.pl – c updateSWConf – n nodeName1, nodeName2, … .
    该可执行文件主要包含在管理站上远程并发地启动多节点更新软件包或系统的代码,由下面几部分构成:
    (1)全局变量代码清单
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    !/usr/bin/perl
    use strict;

    # Some global variables declaration
    $::RETVAL;
    $::VERBOSE;
    $::distro_name = RedHatEL-Server
    $::repo_base_url = "http://172.20.3.27/data/RedHatEL-Server5.4-GA-x86_64/",
    $::repo_base_name = RedHatEL-Server5.4-GA-x86_64;
    $::NODE_RPM_LIST_FILE = "/var/opt/yum/rpmlist";
    $::NODE_YUM_TMPL_DIR = "/var/opt/yum/tmpl";
    $::NODE_YUM_CONF_DIR = "/var/opt/yum/config/";
    $::NODE_YUM_CONF_FILE = "/var/opt/yum/config/yum.conf";
    $::CREATEREPOCMD = "/usr/bin/createrepo";
    $:IRNAME = "/usr/bin/dirname";
    $::NODE_UPDATESWCMD_DIR = "/var/opt/bin/";
    $::NODEUPDATESWCMD = "/var/opt/bin/updateSWorSys.pl";




    (2)公共函数接口代码清单
    请将 updateScriptLib.perl 中的定义的的函数包含在 updateLinuxSW.pl 文件中
    (3)创建 yum 配置文件代码清单
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    sub createyumConf
    {
        my ($distro_name, $repo_base_url, $repo_base_name) = @_;
       
        my $yumconf_ref = {
          #  keyword                    vaule
         '#DistroVerPkg#' => $distro_name =~ /SLES/ ? 'sles-release' : 'redhat-release',
         '#BaseName#'=> "$repo_base_name",
         '#BaseUrl#'    => "file://$repo_base_url"
                            };
       
        if ( ! -d $::NODE_YUM_CONF_DIR )
        {
           mkpath($::NODE_YUM_CONF_DIR, $::VERBOSE, 0755);
        }
       
        # 根据具体的参数,创建 yum 配置文件
        substFile($::NODE_YUM_TMPL_DIR . "/yum.conf",
               "/var/opt/csm/yum/yum.conf",
                $yumconf_ref);
    }




    (4)创建 yum 软件仓库代码清单
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Sub createRepo
    {
        my $yumConfile = @_;
        my $retVal = 0;
       
        if ($yumConfile eq "")
        {
           print "pls specify the yum configuration file.\n";
           $retVal = 1;
           return $retVal;
        }
       
        my $yumconf = getConfig($yumConfile);
        delete $$yumconf{'main'};
        my %repoHash;
       
       # Filter yum config hash and extract dirlist
        foreach my $section (keys %$yumconf)    {
            foreach my $entry (keys %{ $$yumconf{$section} }  ) {
                if ($entry eq "baseurl")
                {
                    my $value = $$yumconf{$section}{$entry};
                    $value =~ s/file:\/\///g;
                   if ($value =~ /yumrepo/)
                   {
                        chomp($value = runCmd("$:IRNAME $value",-1) );
                        $repoHash{$value}{output} = "$value/yumrepo";
                    }
                    else
                    {
                        $repoHash{$value} = undef;
                     }
                }
            }
        }
       
        my $repo_out;
        foreach my $repo (keys %repoHash)
       {
            $repo_out = undef;
           $repo_out = $repoHash{$repo}{output} || $repo_out;
            $retVal || = createRepoDB($repo, $repo_out);
        }
         
        return $retVal;
    }




返回列表