Unix/Linux 系统自动化管理 系统更新篇(3)
- UID
- 1066743
|
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;
}
|
|
|
|
|
|
|