Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3396865
  • 博文数量: 631
  • 博客积分: 10716
  • 博客等级: 上将
  • 技术积分: 8397
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-01 22:35
文章分类

全部博文(631)

文章存档

2020年(2)

2019年(22)

2018年(4)

2017年(37)

2016年(22)

2015年(1)

2013年(12)

2012年(20)

2011年(19)

2010年(20)

2009年(282)

2008年(190)

分类:

2009-07-06 15:53:00

AIX 操作系统可以安装包括 rpm 及 installp 格式的软件包。其中 installp 是 AIX 系统特有的软件包格式,它提供了强大的管理能力,但是,同时它也包含了很多容易混淆的概念(如 fileset, package, lpp 等等),许多有经验的系统管理员仍经常不能正确地理解它们的含义及相互关系。本文通过探讨一些 AIX installp 软件包的基本概念及内部机理,使管理员对 AIX installp 软件包有较深入的理解,并能在实践中灵活的运用 installp 的强大功能。
另外,本文的最后部分总结了一些在日常管理 AIX installp 软件包中经常遇到的问题并给出了解决方案,留给 AIX 系统管理员参考使用。
fileset
在 AIX 5L 操作系统的文件打包结构中,把文件分成了许多 fileset 。每个 fileset 包含的是一组逻辑上相关的文件。例如:与 TCP/IP 客户端功能相关的文件都打包在 bos.net.tcp.client fileset 中。fileset 是最小的可独立安装实体,每个 fileset 都是可以单独安装、升级、卸载的。Fileset 的版本号由四个域组成,分别是:Version, Release, Maintenance level 和 Fix level 组成,称作 VRMF。(例如: bos.rte 5.3.0.0 表示 version 域为 5, release 域为 3, Maintenance level 域为 0 , Fix level 域为 0)。
package
多个相关的 fileset 可以被打包到一起,形成一个安装镜像或者一个 BFF(Backup Format File),也被称为 package 。通常,一个 package 里可以包含一个或者多个 fileset。
LPP(Licensed Program Product)
LPP 就像他的英文定义一样,对于用户来说 LPP 是用户可以用来购买的产品。它可以是一系列的 package 或者只是一个单独的 package。一般情况下,用户可以选择不一次购买整个 LPP 而只是购买其中的几个 package。


由图 1 可以清楚的看到,例子中的每个 package 都只包含有一个 fileset,而 CSM LPP 包含 csm.core, csm.deploy 及 csm.server 3 个 package.



图 2 是一个更加复杂的软件包关系图。可以看到每个 package 中都包含了大量的 fileset,而一个 LPP 中又包含了大量的 package。这也是 AIX 中最普遍的情况。
VRMF
VRMF 是系统版本号(Version)、发行版本号 (Release)、改进版本号 (Modification level) 和修正版本号 (Fix level) 的首字母的集合。这四个数字组合再一起,表示了软件包的版本。下面我们分别对这四个版本号进行详细的解释 .
系统版本号(Version)——一个两位的数字用来表示产品的发布版本。例如:AIX5L,其中的 5 就是操作系统的版本号。
发行版号(Release)——发行版号也是由一个两位数字表示,它代表了软件的发行版本。例如 :AIX5.3,其中的 3 就是发行版号,我们在这里省略了十位的 0,将 03 简写为 3.
改进版号(Modification level)——是由一个四位数字组成,表示最新的改进版级别。一般情况下,每过一段时间,软件发布者会将大量的更新打包成一个安装镜像并发布,此时改进版本级别会被改变。
修正版本号(fix level)——是由一个四位数字组成,表示最新的 fileset 修正版本。软件每经过一次修正,其修正版本号都会增加一次,直到改进版本号升高,修正版本号将被重置为 0。
usr 部分、root 部分和 share 部分
AIX 为了实现在客户机 / 服务器环境下安装的灵活性将安装包划分为 usr 部分 (usr part)、root 部分 (root part) 和 share 部分 (share part)。
a)usr 部分 : 这个部分包括了 lpp_name 和 liblpp.a 两个控制文件以及软件包中可以被多个同构硬件共享的文件。在一个标准的 AIX 系统中,这些文件被放置在 /usr 目录树下。
b)root 部分这个部分包含了 liblpp.a 归档文件以及产品中不能被多个机器共享的部分。换句话说,每个机器必须有它自己的一个独立拷贝,这个部分和每台机器的配置相关联。在一个标准的 AIX 系统中,这些文件被放置在根(/)目录树下。如果一个 fileset 包含一个 root 部分那它也必须包含一个 usr 部分。
./usr/lpp/PackageName/liblpp.a 这是一个归档文件,它包括了安装或升级软件的 root 部分时所需要的控制文件。
c)share 部分 : 这个部分包括了软件包中可以被多个异构硬件共享的文件。一般这个部分包括软件包中的非可执行文件,例如:文档和数据文件。在一个标准的 AIX 系统中,这些文件被放置在 /usr/share 目录树下。share 部分必须和 usr/root 部分分开打包,即包括 share 部分的 fileset 里不能包含 usr/root 部分,并且包含 share 部分的 fileset 不能和包含 usr/root 部分的 fileset 同名。




在图 3 中,我们可以看到,一个典型的 AIX 软件包中包含 usr 部分和 root 部分。每个部分中又包含着控制文件和安装文件。下面我们将对图 3 中的内容做详细的介绍。
上一节我们已经提到安装包的 usr 部分包含两个安装控制文件:lpp_name 和 liblpp.a 以及所有在安装和升级 usr 部分时将被安装的文件。下面我们分别对两个控制文件做一个简单的介绍:
  • ./lpp_name
这个文件提供了软件包安装和升级的信息 .
  • ./usr/lpp/PackageName/liblpp.a
这是一个库文件,它包括了安装或升级软件的 usr 部分时所需要的所有控制文件。
安装包的 root 部分包含 ./usr/lpp/PackageName/inst_root/liblpp.a 库文件以及所有在安装和升级 root 部分时将被安装的文件。
  • ./usr/lpp/PackageName/inst_root/liblpp.a
这也是一个库文件,它包括了安装或升级软件的 root part 时所需要的所有控制文件。
如果软件产品中包含 share 部分,share 部分必须独立于 usr 和 root 部分被单独的打包。这个部分和 usr 部分非常相似也包换 ./lpp_name 和 liblpp.a 以及所有在安装和升级 share 部分时将被安装的文件。



图 4 显示了 installp 对包进行操作中,所牵涉的资源和文件。下面,我们将对 installp 操作包的流程做详细的介绍。请大家参考图 4 进行理解。
installp 对包提供了如下四种主要的操作:
  • Apply
  • Commit
  • Reject
  • Remove
下面我们分别对 Apply/Reject/Remove 的流程做详细的介绍:
installp 处理 Apply 操作的流程:
a. 检查所需的 filesets 是否在安装媒介上存在。
b. 检查所需的 filesets 的版本,以确定他们是否已经被安装在系统上。
c. 解包 liblpp.a 文件,将其中的控制文件按照包的类型拷贝到相应目录。(usr 部分拷贝到 /usr/lpp/Package_Name,share 部分拷贝到 /usr/share/lpp/Package_Name,root 部分拷贝到 /usr/lpp/Package_Name/inst_root/liblpp.a)
d. 检查磁盘空间。
e. 检查所依赖的包是否已经安装或者在即将安装的软件包列表上。
f. 检查 license 。
h. 执行安装(拷贝文件,运行安装脚本)并生成 status 文件。
g. 如果 status 文件显示 apply 操作成功,更新 ODM 数据库中的 SWVPD 信息,否则清除并显示所有失败的文件。
installp 处理 Reject 操作的流程
  1. 检查软件包之间的依赖关系,保证所有被依赖的包都已被 Reject 。
  2. 如果 ./lpp.reject 存在则执行 ./lpp.reject,否则执行系统缺省的 /usr/lib/instl/reject 脚本,进行和 Apply 反向的 Reject 操作
  3. 更新 SWVPD 数据
installp 处理 Remove 操作的流程
a. 检查包之间的依赖关系,保证所有被依赖的包也都被 Remove 。
b. 如果 ./lpp.deinstall 存在则执行 ./lpp.deinstall ,否则执行系统缺省的 /usr/lib/instl/deinstall 脚本。
c. 删除属于此 fileset 的文件。
d. 从 SWVPD 中删除相关信息。
e. 删除软件 license 许可。
如何安装软件
由第 3 章我们知道软件包在被安装后,可以处于 applied 和 committed 两种状态。applied 状态会在 /usr/lpp/PackageName 目录保留软件包的前一个版本。当软件包的新版本出现问题时,用户可以方便的回滚到前一个稳定版本。而 committed 状态则会删除软件所有以前的版本,用户不再可以进行回滚操作。下面,我们就分别介绍如何将软件包安装为 applied 状态和 committed 状态。
在 AIX 中,用户可以通过命令行和 SMIT 来进行软件包的安装。由于篇幅关系,我们在这里只介绍命令行方式。
在命令行模式下,软件包安装通过 installp 命令来完成,下面列出了将软件包安装成 applied 模式的 installp 命令语法:
installp -a [ -eLogFile ] [ -V Number ] [ -dDevice ] [ -b ] [ -S ] [ -B ] [ -D ] [ -I ] 
[ -p ] [ -Q ] [ -q ] [ -v ] [ -X ] [ -F | -g ] [ -O { [ r ] [ s ] [ u ] } ] 
[ -tSaveDirectory ] [ -w ] [ -zBlockSize ] { FilesetName [ Level ]...| -f ListFile | all}

例如:要安装放置在 /usr/sys/inst.images 目录中的 bos.net 软件包中的所有 filesets,在安装中使用 checksum 检查,并使软件包处于 applied 状态。使用下面这个命令:
installp -avX -d/usr/sys/inst.images bos.net

将软件安装为 commited 状态,请使用下边的语法:
installp -ac [ -N ] [ -eLogFile ] [ -V Number ] [ -dDevice ] [ -b ] [ -S ] [ -B ] [ -D ]
 [ -I ] [ -p ] [ -Q ] [ -q ] [ -v ] [ -X ] [ -F | -g ] [ -O { [ r ] [ s ] [ u ] } ] 
 [ -tSaveDirectory ] [ -w ]
[ -zBlockSize ] { FilesetName [ Level ]... | -f ListFile | all }

例如:要模拟安装放置在 /usr/sys/inst.images 目录中的 bos.net 软件包中的所有 filesets,在安装前进行磁盘容量检查,并使软件包处于 committed 状态。使用下面这个命令:
installp -acpX -d/usr/sys/inst.images bos.net

installp 命令的输出记录可以在 /var/adm/sw/installp.summary 文件中找到
如何 commit applied 软件包
commit 一个处于 applied 状态的软件包,也是使用 installp 命令来完成的。语法如下:
installp -c [ -eLogFile ] [ -VNumber ] [ -b ] [ -g ] [ -p ] [ -v ] [ -X ] 
[ -O { [ r ] [ s ] [ u ] } ] [ -w ] { FilesetName [ Level ]... | -f ListFile | all }

例如:commit 所有的软件包更新
installp -cgX all

如何 reject applied 软件包
reject 一个处于 applied 状态的软件包,是使用 installp 命令来完成的。语法如下:
installp -r [ -eLogFile ] [ -VNumber ] [ -b ] [ -g ] [ -p ] [ -v ] [ -X ]
 [ -O { [ r ] [ s ] [ u ] } ] [ -w ] { FilesetName [ Level ]... | -f ListFile }

例如:reject 所有写在 ./reject.list 文件中的 applied 状态的软件包
installp -rBfX ./reject.list

如何卸载软件包
卸载软件包,也是使用 installp 命令来完成的。语法如下:
installp -u [ -eLogFile ] [ -VNumber ] [ -b ] [ -g ] [ -p ] [ -v ] [ -X ] 
[ -O { [ r ] [ s ] [ u ] } ] [ -w ] { FilesetName [ Level ]... | -f ListFile }

例如:模拟卸载 bos.net.ipsec.rte 和所以他依赖的包
installp -ugp -V2 bos.net.ipsec.rte

这个命令将显示所有将被卸载的文件列表,但是并不会真的删除它们。
安装失败后如何清理环境
如果一个软件包安装失败,installp 将不能够再次安装这个软件包,直到用户删除了在失败点之前的成功安装。要清理失败的环境可以使用下面的命令:
installp -C [ -b ] [ -eLogFile ]

问 1:如何得到目前的 system level ?
答:使用 oslevel 命令,例如:
-bash-2.05b# oslevel -s
5300-01-00-0000
5300—VR
01---TL
00---SP
0000—SPdate

注:TL(Technical Level)指 AIX 操作系统的技术版本(以前称为 ML, Maintenance Level),包括硬件、软件的新功能和传统的补丁。SP( Service Pack) 是服务补丁版本,包括一些不能等到下一个 TL 推出的关键的补丁及非常有限的新硬件驱动。如果想了解具体有关信息,请参照《IBM AIX Operating System Service Strategy Details and Best
Practices》()。
问 2:在将系统到新的 TL 后,如果 oslevel 命令仍然报告是老的 TL,怎么办?
答:首先使用 oslevel –s 命令查看当前的 TL,例如:
bash-2.05b# oslevel -s 
5300-01-00-0000

接下来,使用 oslevel –rl 命令查看哪些 fileset 版本低于新的 TL,需要升级
bash-2.05b# oslevel -rl 5300-03
Fileset Actual Level Recommended ML
-----------------------------------------------------------------------------
X11.adt.ext 5.3.0.0 5.3.0.30 
X11.adt.include 5.3.0.0 5.3.0.30 
X11.base.lib 5.3.0.10 5.3.0.30 
X11.base.smt 5.3.0.10 5.3.0.30 
X11.compat.lib.X11R5 5.3.0.10 5.3.0.30 

接下来使用 installp 命令升级 oslevel 列出的 fileset 就可以了。
3: 列出一个 fileset 中的所有文件
答:使用 lslpp 命令,例如:
bash-2.05b# lslpp -f bos.rte 
 Fileset File
 ----------------------------------------------------------------------------
Path: /usr/lib/objrepos
 bos.rte 5.3.7.0 /
 /usr/aix
 /usr/lpp
 /usr/lpp/bos
 /usr/lpp/bos/inst_root
…
Path: /etc/objrepos
 bos.rte 5.3.7.0 /usr
 /lib -> /usr/lib
 /dev
 /etc
…

4: 如何列出一个文件属于哪个 fileset ?
答:使用 lslpp 命令,例如:
bash-2.05b# lslpp -w /opt/csm/pm/CSMDefs.pm 
 File Fileset Type
 ----------------------------------------------------------------------------
/opt/csm/pm/CSMDefs.pm csm.core File

问 5:如何列出一个 fileset 中没有被安装的文件?
答:使用 restore -qTvf 命令,例如:
bash-2.05b# restore -qTvf U805874.csm.hpsnm.bff
New volume on U805874.csm.hpsnm.bff:
 Cluster 51200 bytes (100 blocks).
 Volume number 1
 Date of backup: Tue Oct 11 13:01:35 2005
 Files backed up by name
 User BUILD
 0 ./
 1113 ./lpp_name
 0 ./usr
 0 ./usr/lpp
 0 ./usr/lpp/csm.hpsnm/csm.hpsnm/1.4.1.12
 16682 ./usr/lpp/csm.hpsnm/csm.hpsnm/1.4.1.12/liblpp.a
 0 ./usr/lpp/csm.hpsnm/csm.hpsnm/1.4.1.12/inst_root
 1178 ./usr/lpp/csm.hpsnm/csm.hpsnm/1.4.1.12/inst_root/liblpp.a
…
 6812032 ./usr/websm/codebase/pluginjars/hsc.jar
 total size: 78826891
files archived: 54

问 6:如何从一个 fileset 中直接得到文件?
答:使用 restore -qxvdf 命令,例如:
bash-2.05b# ls -al csm.core 
-rw-r--r-- 1 root system 2744320 Feb 11 17:02 csm.core
-bash-2.05b# restore -qxvdf csm.core 
New volume on csm.core:
 Cluster 51200 bytes (100 blocks).
 Volume number 1
 Date of backup: Thu Sep 7 08:04:51 2006
 Files backed up by name
 User BUILD
x 0 ./
x 3804 ./lpp_name
x 0 ./usr
x 0 ./usr/lpp
…
x 774 ./opt/csm/samples/mkres/IBM.Sensor/MySensor.pm
 total size: 3868461
files restored: 166
-bash-2.05b# du -m opt/
0.03 opt//csm/install/defs
0.71 opt//csm/install/pkgdefs
0.76 opt//csm/install
0.03 opt//csm/pm/Rpm/Child
0.10 opt//csm/pm/Rpm
1.38 opt//csm/pm
0.05 opt//csm/lib
0.00 opt//csm/samples/mkres/IBM.Association
0.00 opt//csm/samples/mkres/IBM.Condition
0.02 opt//csm/codebase
0.00 opt//csm/man/cat1
0.00 opt//csm/man/cat5
0.04 opt//csm/man/man1
0.01 opt//csm/man/man5
0.05 opt//csm/man
3.83 opt//

7. 如何列出一个 archive 文件中的内容
答:使用 ar –t 命令,例如:
bash-2.05a# ar -v -t /usr/lib/libcfg.a
rwxr-x--- 300/300 122917 Oct 5 02:58 2007 shr.o

8. 如何从一个 archive 中得到文件
答:使用 ar –x 命令,例如
bash-2.05a# ar -v -x /usr/lib/libcfg.a
x - shr.o
bash-2.05a# ls shr.o
shr.o

AIX 对软件包的管理功能非常强大,lpp 结构的软件包使用起来也非常灵活。但是,和其他 UNIX 上的软件包使用上还是有很大的不同之处,由于篇幅所限,本文所涉及的内容非常有限,作为 AIX 系统管理员,只有在日常的工作做多总结,才能做到随心所欲对 AIX 软件包进行管理
阅读(1468) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~