分类:
2008-09-05 13:19:47
Solaris 操作系统软件是以 SVR4
软件包的形式交付的。Solaris 操作系统由一组这样的软件包组成,每个软件包都包含若干个可执行文件、配置文件、元信息文件和脚本。这些软件包提供在系统上重复添加和删除软件的方法。
可以将软件产品定义为在安装后提供具有一定价值的服务的一组文件。用于在主机(将在该主机上访问软件产品)上分发和安装软件产品的方法称为打包。
以一组软件包的形式提供复杂软件(如 Solaris 操作系统)具有如下优点:
简而言之,打包提供诸多便利,包括产品完整性、产品验证和方便的安装/删除操作。
图 1
(单击放大)
上图中显示了一个 Solaris 软件包样例。
每个 Solaris 软件包都表示为与软件包同名的目录。软件包中包含许多文件和目录,其中只有 pkginfo
和 pkgmap
是必需的。而图中所示的所有其他项都是可选的。
pkginfo
和 pkgmap
文件是元信息文件。pkginfo
文件的作用类似于包装盒上的标签。它包含名称、标识符、生成日期、出现问题时的联系人等信息。
pkgmap
文件是打包列表,其中定义了软件包中的每个项并存储了各项的大小和 checksum
。大小和 checksum
有助于确定软件包是否被篡改。pkgmap
中的各项可按其 ftype
条目进行识别,如下所示。
ftype 条目
|
|
安装软件包时(使用 pkgadd
),首先将创建目录 (d)、设备 (c/b) 和符号链接 (s)。然后将 f、e 或 v 类型的文件复制到文件系统中。在安装所有其他文件后,将创建硬链接 (ftype
l)。安装元文件 (ftype
i) 用于指导软件的安装和删除,它不会安装到系统上。
Solaris 软件包通常包含 reloc
和 install
目录。reloc
目录包含要相对于基目录安装的所有文件,即它包含可重定位的文件。可选的 root
目录包含要相对于根目录安装的文件。还可能存在另一个名为 archive
的可选目录,该目录包含一些通用文件,这些文件的功能是由软件包开发者定义的。install
目录包含脚本和其他辅助文件。ftype
为 i 的所有文件(pkginfo
和 pkgmap
除外)都位于 install
中。
install
目录包含 copyright
文件、可选的 depend
文件以及诸如 checkinstall
、preinstall
、postinstall
、preremove
和 postremove
之类的脚本。此目录还可能包含一组称为类操作脚本的某些特殊脚本。所有元信息文件都是 Bourne shell 脚本。
checkinstall
脚本执行详细的系统分析并收集数据;它不更改文件系统上的任何内容。该脚本可能创建或修改环境变量以控制安装。如有必要,该脚本可以完全停止软件包安装。
preinstall
正好在实际文件安装开始之前运行。在诸如初始化 backout
软件包(稍后将由 postinstall
脚本构造)的原型和元文件之类的操作中,会涉及此脚本。
如果删除某个软件包(使用 pkgrm
),则 preremove
和 postremove
脚本(如果存在)将在删除该软件包之前和之后运行,以执行删除某些目录的内容等任务。
软件包中的所有对象都属于创建软件包期间定义的某个类。如果对象不属于任何类,则缺省情况下使用 none
类。可以使用参数 CLASSES
(在 pkginfo
文件中定义)列出要安装的所有类。安装将按 pkginfo
中列出的顺序进行。将始终先安装 none
类的对象。因此,如果 none
类存在于 pkginfo
中,则它始终是第一个类条目。如果 pkginfo
中未列出某个类,则即使在 pkgmap
中定义了该类的对象,也不会安装这些对象。
类操作脚本 (Class Action Script, CAS) 重定义向软件包添加对象或从中删除对象的方式。也就是说,CAS
可以允许将条目与现有文件合并或保存现有文件的副本,而不是仅仅将文件从软件包复制到相应的文件系统中。在删除软件包的过程中,类操作脚本的工作方式与此
相似。对于
,安装和删除的类操作脚本分别命名为 i.
和 r.
。ftype
为 e 和 v 的文件应具有类操作脚本。
depend
文件中列出了软件包与其他软件包之间可能具有的所有相关性。
如上所述,只有 pkginfo
和 pkgmap
是软件包中的必需文件。可以创建仅包含这两个文件的软件包。这样的软件包是完全可接受的,尽管它本身未提供任何重要功能。
Solaris 软件包还可以按软件包数据流格式交付。在此格式中,存在一个包含一个或多个软件包的文件。前面说明的目录格式具有一个包含软件包的目录,而此文件与其不同。软件包数据流更易于分发。可以使用 pkgtrans
从一种格式转换为另一种格式。
让我们看一个示例,以了解如何收集有关已安装软件包的信息。下面说明如何找出包含 truss
实用程序的软件包的名称:
# pkgchk -lp /usr/bin/truss
Pathname: /usr/bin/truss
Type: linked file
Source of link: ../../usr/lib/isaexec
Referenced by the following packages:
SUNWtoo
Current status: installed
以上命令的输出表明 truss
在软件包 SUNWtoo
中。现在看看有关此软件包的一些信息:
# pkginfo -l SUNWtoo
PKGINST: SUNWtoo
NAME : Programming Tools
CATEGORY: system
ARCH : sparc
VERSION: 11.10.0,REV=2005.01.21.15.53
BASEDIR: /
VENDOR: Sun Microsystems, Inc.
DESC: utilities for software development, including ld, ldd, od, and truss
PSTAMP: on10-patch20060622130233
INSTDATE: Sep 07 2006 14:10
HOTLINE: Please contact your local service provider
STATUS: completely installed
FILES: 66 installed pathnames
11 shared pathnames
3 linked files
15 directories
30 executables
1993 blocks used (approx)
在 中可以找到有关软件包的更多详细信息。
在 Sun Microsystems, Inc. 的 Solaris 维护工程部门工作。他负责提供一系列解决方案,具体涉及修补/打包、安装和 Solaris Zones 等方面。他拥有由印度理工学院(位于 Guwahati)颁发的计算机科学与工程理工硕士学位。