- 论坛徽章:
- 1
|
作者:silverwolf
SCO UNIX 下Custom发布软件的制作方法(含CCS的使用)
很早以前写好的帖子,根据“SCO UNIX高级宝典”修改而成,用完后丢在公司的论坛上,现重新发布出来。中间半角空格被我用全角替换,估计直接粘贴无法使用,有用到的替换一下。
问题:
很多软件产品完工之后,都会做成一个软件包,以便于用户用custom工具进行安装。哪位能详细描述一下,做软件包的过程?
答:
SCO OPENSERVER 下custom发布软件的制作方法
在SCO OPENSERVER5.0.x下,软件都用cutsom管理用户通过该工具,可以很好地进行软件的安装、升级、删除;开发商通过该工具,可以很好地管理好开发的发布软件的版本。利用SCO OPENSERVER下的一个工具--Custom Distribution Master ToolKit,本文提供了custom发布软件的制作方法。
CDMT生成的发布软件,根据其介质可为软盘、磁带或光盘版。其中光盘发布软件的生成比较困难,这是由于SCO OPENSERVER支持的光盘刻录机比较少,往往只好借助于windows或linux下的刻录工具。然而,现在软件大都通过光盘来安装,因此,光盘发布软件的制作显得尤为重要。下面将具体介绍CDMT生成发布软件的具体过程,包括软盘、磁带和光盘。
一、确定你的产品结构
SCO OPENSERVER下,custom按照如下层次组织系统上安装的软件:
如产品SCO OpenServer 5.0.x被分成很多组件,如Xclient和Wserver,每一个组件又分成多个包,如man等。
为了说明方便,我们所举的例中名称都取为一个,并且只有一个组件和一个包,名字全部为test。
二、确定每个文件的属性
属性有shared(/opt)和non-shared(/var/opt)之分,其中shared的文件为只读,non-shared的文件为可读可写。本处为说明方便,所举的例子中的文件全部为shared。
To specify the shared and non-shared files when you create the distribution tree, put the shared files in the SHARED directory, and the non-shared files in CLIENT. Another way to accomplish this is to define the shared and non-shared files in the CDMT input files. Set the distTreeRootSHARED attribute to the directory containing the shared files and distTreeRootCLIENT to the directory containing the non-shared files. Set these attributes in the COMP record in *.cmpnt, or PKG record in *.pkg. See cdmtInput(CDMT) for details.
For example, if you want custom(ADM) to place a non-shared file in the /var/opt/K/SCO/WServer/1.0.0/lib directory, either put the distribution file in the distTreeRoot/CLIENT/lib directory or set the COMP record distTreeRootCLIENT attribute to the directory containing the non-shared files.
三、构件软件的目录结构
所安装的test软件的目录结构为:
/usr/test/.profile
database/
dblog/
bin/
tmp/
四、设置CDMT的环境
设置生成该Distribution的根目录CDMT_DIR环境变量,在命令行下键入:
#CDMT_DIR=/usr/test ;export CDMT_DIR
五、生成CDMT命令所需的输入文件
包括三个文件,分别是:
$CDMT_DIR/input/test.prd
$CDMT_DIR/input/test.cmpnt
$CDMT_DIR/input/test.pkg上述三个文件可以用vi生成,也可以用如下两条命令生成后用vi修改。
在$CDMT_DIR目录下:
find . -print>/tmp/test.files
cdmtConvert /tmp/test.files
在input目录下,生成了四个文件,其中一个是为生成cdmt.config文件的。
转到$CDMT_DIR目录下,执行命令:
#vi $CDMT_DIR/cdmt.config
在该文件下输入:
CONFIG:
archiveMedia=CD
CD_MEDIA:
distCode=“CDDist”
再把input目录下的test.config文件中的内容拷贝到cdmt.config中。
以上的config文件是为生成光盘介质,生成其它介质的config也类似,可以参考随机手册。
六、生成SSO树
在CDMT_DIR宏已设定的条件下,在任何目录下(当然,一般都在$CDMT_DIR/下)先后执行以下三个命令:
1?cdmtParse,该命令软件存储对象(SSO)数据库,它读取CDMT的input文件,并把生成的SSO放在$CDMT-DIR/sso下。
2?cdmtCompress,该命令构件SSO的目录,并压缩它。
3?cdmtArchive,该命令生成可custom安装的格式。
七、从硬盘上移到指定介质上
1?若是FLOPPY,可以用以下命令
cdmtArchive -media FLOPPY -copy
默认状态下,系统用cpio拷贝到软盘上,cpio有个缺点,不检查写得是否正确;用tar也一样。往往在多张软盘tar到硬盘上时,发现最后一张盘有问题,而不得不从头来。
2?若是TAPE,可以用以下命令
cdmtArchive -media TAPE -copy
默认状态下,在磁带上生成一个文件系统。此步完成即完成整个制作过程。
3?若是CD介质,比较复杂
(1)#cd /usr/test/sso #ls可在其下看见 /opt目录
(2)用mkisofs工具生成ISO9660的文件系统
mkisofs可从internet上downlad下来,编译后可以使用
mkisofs -r -T -o cd_image.iso
其中,表示对当前目录操作,不可改为opt。
此时,在/usr/test目录下,生成文件cd_image.iso,该文件即是用来刻录的镜像文件。
(3)把cd_image.iso移到windows操作系统下,在该操作系统下进行刻录。可以用ftp方式(windows和openserver不在同一计算机中),也可以用mount方式(windows和openserver在同一计算机中)。用windows下的刻录软件刻录该软件。
BTW:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cdmtConvert 转换一个文件列表成为CDMT输入文件(*.prd, *.cmpnt and *.pkg)。
cdmtConvert [-f] [-inputDir directory] [-defaultPerms] [-version version] [-exportMacro macroName]packageCode*.files
-f 在删除以前的目录和文件时,不提示用户
-inputDir 指明存放转换后的文件的目录
-defaultPerms 忽略实际文件的权限,使用*.cmpnt中的缺省定义
-version 定义版本号
-exportMacro 定义一个宏名
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cdmtParse 命令从CDMT输入文件(*.prd, *.cmpnt and *.pkg)中产生SSO数据库的文件。
cdmtParse [-f] [-config filename] [-inputDir directory] [-prd *.prd files] [-cmpnt *.cmpnt files] [*.prd files]
一般情况下,cdmtParse命令是读入$CDMT_DIR/input目录下所有的*.prd文件,*.prd文件中引用了*.cmpnt和*.pkg文件。
-f 在删除以前的目录和文件时,不提示用户
-inputDir 指明输入文件*.prd的目录
-config 指明一个配置文件,而不用cdmt.config
-prd *.prd files 指明只处理指定的prd文件。
-cmpnt *.cmpnt files 指明只处理指定的*.cmpnt文件
*.prd files 只读入指定的prd文件
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cdmtCompress 把所有SSO文件转换成分布程序文件形式,再压缩这些文件(如果指定要压缩的话)
cdmtCompress [-config filename] [-cmpnt *.cmpnt files]
-config filename 指明一个配置文件,而不用cdmt.config
-cmpnt *.cmpnt files 只拷贝和压缩在cmpnt文件中指定的组件文件
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cdmtArchive 命令产生能够用custom安装的程序
cdmtArchive [-f] [-config filename] [-media media_type] [-copy]
缺省情况下,cdmtArchive命令从cdmt.config文件读入配置信息;生成的安装文件缺省的放在$CDMT_DIR/archives/TAPE目录下。
-f 在删除以前的目录和文件时,不提示用户
-config 指明一个配置文件,而不用cdmt.config
-copy 拷贝档案到介质
-f copy 与-copy一样,只是不提示。
-media media_type 指定要拷贝的介质,可以是:TAPE, CD和FLOPPY
cdmtArchive命令产生出以下的文件:
VOL.volumeIndex.archiveIndex CPIO文档,volumeIndex是介质的卷标,archiveIndex是文档号
VOL.volumeIndex.archiveIndex.files 每个文档里面的文件列表,用来产生实际的文档。
VOL.volumeIndex.archiveIndex.sum 一个用命令sum -r产生出来的档案的sum值列表。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cdmt.config -- specify default CDMT configuration
在这个文件里面,可以定义以下的选项:
MACROS 定义宏
格式:
MACROS:
macroname = macrovalue
COMPONENT_ORDER 指明应用程序组件在发布中顺序
格式:
COMPONENT_ORDER:
integer = componentID|componentCode
integer = componentID|componentCode
integer = componentID|componentCode
EXAMPLE:
COMPONENT_ORDER:
1 = SCO:cdmt::1.0.1
2 = SCO:WServer::4.0
3 = SCO:XClients::1.0
This example specifies that the CDMT component appears first, WServer appears second, and XClients appears third on the media.
CONFIG 指明安装文件的一般配置信息
格式:
CONFIG:
inputDir= pathname(default $CDMT_DIR/inputDir)
ssoDir = pathname(default $CDMT_DIR/sso)
removalPrompt = TRUE | FALSE (default TRUE)
removeFiles = TRUE | FALSE (default TRUE)
compress = TRUE | FALSE (default TRUE)
archiveMedia = TAPE | CD | FLOPPY (default TAPE)
FLOPPY_MEDIA 指明如果用软盘作为工具时的一些配置信息
格式:
FLOPPY_MEDIA:
device = media device name (default /dev/rfd0135ds18)
volumeSize = volume size in KB (default 1440)
archivesDir = directory where cdmtArchive creates archives (default $CDMT_DIR/archives/FLOPPY)
archiveFormat = format of the archive (default CPIO)
freeSpace = amount of space to leave on filesystem (default 0)
distCode = distribution code (default ``protoFloppyDist'')
distVersion = distribution version (default ``1.0'')
paperLabel = volume media label (default ``Floppy Volume %d'')
TAPE_MEDIA 指明如果用磁带作为工具时的一些配置信息
格式:
TAPE_MEDIA:
device = media device name (default /dev/nrct0)
volumeSize = volume size in KB (default 9000000000)
archivesDir = directory where cdmtArchive creates archives (default $CDMT_DIR/archives/TAPE)
distCode = distribution code (default ``protoTapeDist'')
distVersion = distribution version (default ``1.0'')
paperLabel = volume media label (default ``Tape Volume %d'')
CD_MEDIA 指明如果用光盘作为工具时的一些配置信息
格式:
CD_MEDIA:
distCode = distribution code (default ``protoCDDist'')
distVersion = distribution version (default ``1.0'')
paperLabel = volume media label (default ``CD Volume %d'')
在以上的定义的一些属性的意义:
archivesDir 指定cdmtArchive命令产生的文件的存放目录,缺省放在$CDMT_DIR/archives/TAPE或者$CDMT_DIR/archives/FLOPPY
archiveFormat 对于软盘,指定其文档格式为CPIO或者FILESYS;如果指定为FILESYS,则cdmtArchive 命令在软盘上创建一个文件系统,并把文档拷贝到上面,CUSTOM可以识别两种格式。缺省CPIO.
freeSpace 指明在介质上保留的空间。对于软盘文件系统格式(FILESYS),预留空间可以后来拷贝文件到这个空间里面;缺省是零。
inputDir 指定包含有CDMT文件的目录,cdmtParse命令在这个目录中搜索*.prd,*.cmpnt和*.pkg文件,缺省$CDMT_DIR/input
ssoDir 指明cdmtParse命令产生的组件文件*.sso映象文件的存放目录。缺省是$CDMT_DIR/sso。
archiveMedia 指明cdmtArchive命令要产生文档的存放介质类型,缺省是TAPE。
removeFiles 指明命令cdmtParse时,是否移除原来的SSO文件和SSO数据库中的记录。如果不需要移除,则cdmtCompress命令要比较新产生的SSO文件与原来在目录下的SSO文件的修改时间,如果当前SSO文件新,则拷贝该文件。缺省是TRUE
removalPrompt 在删除一个文件或者是目录时,是否提示,缺省是TRUE
compress 是否压缩SSO文件,缺省是TRUE
distCode 指定一个唯一的分布码.
distVersion 指明发布软件的版本号,非产品的版本号。
paperLabel 对每一个介质产生一个卷标,缺省是"Volume %d"
macroName 指定一个宏名的替代值
integer 指定一个组件的ID号
device 指定档案文件的介质名称,缺省对于软盘,是/dev/rfd0135ds18;对于磁带,是/dev/nrct0
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mkisofs
选项 功能
-o 指定 ISO 映像的输出文件名
-J 生成 Joliet 命名记录;对于将在 Windows 环境下使用的光盘有帮助
-R 生成 Rock Ridge (RR) 命名记录来保留文件名长度和大小写,特别用于 UNIX/Linux 环境
-A 设立一个应用程序 ID - 一个将会被写入到映像卷头的文本字串,它对于判定光盘上的应用程序有帮助
-V 设立一个文件卷 ID - 当映像被刻录后,光盘被挂载到 Solaris 和 Windows 环境后被指派给它的一个名称
-v 设置执行时的详细反馈,对于在映像被制作时查看 它的状态有帮助。
-x 不包括任何紧跟在这个选项之后的目录; 这个选项可以被重复使用(譬如, ... -x /home/joe/trash -x /home/joe/delete ...)
-r 使用长文件名,并开放全部文件的读取权限。
-T 建立文件名的转换表,适用于不支持长文件名的系统上。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Example 12-1 Example product description file (WServer.prd)
PROD:SCO:testProd:
description ="Widget Server"
# $WServer_VER is a CDMT macro defined in the cdmt.config file.
version =$WServer_VER
packages =SCO:WServer
# $WServer_DIR is defined in cdmt.config.
cmpntFiles =$WServer_DIR/input/WServer.cmpnt
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Example 12-2 Example component description file (WServer.cmpnt)
COMP:SCO:WServer:
description = "Widget Server"
# $WServer_VER is a CDMT macro defined in the cdmt.config file.
version = $WServer_VER
subpackages = WSERVER,EXAMPLES
# $WServer_DIR is defined in cdmt.config.
distTreeRoot = $WServer_DIR
# distTreeRootSHARED specifies where the shared files are located
distTreeRootSHARED = $WServer_DIR
# distTreeRootCLIENT specifies where the non-shared files are located
distTreeRootCLIENT = $WServer_DIR
pkgFiles = $WServer_DIR/input/WServer.pkg
FILE_DEFAULT:
perms = 444
owner = bin
group = bin
DIR_DEFAULT:
perms = 755
owner = bin
group = bin
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Example 12-3 Example package description file (WServer.pkg)
(This example describes only a few of the packages in the WServer component.)
PKG:Control:
description = "WServer component definition files"
# $WServer_DIR is defined in cdmt.config.
distTreeRoot = $WServer_DIR
# distTreeRootSHARED specifies where the shared files are located
distTreeRootSHARED = $WServer_DIR
# distTreeRootCLIENT specifies where the non-shared files are located
distTreeRootCLIENT = $WServer_DIR
DIR:WSERVER:SHARED:./cntl:
perms = 0755
owner = bin
group = bin
FILE:WSERVER:SHARED:./cntl/ccs:
perms = 0755
owner = bin
group = bin
PKG:WSERVER:
description = "Widget Server"
distTreeRoot = $WServer_DIR
distTreeRootSHARED = $WServer_DIR
distTreeRootCLIENT = $WServer_DIR
DIR:WSERVER:SHARED:./bin:
perms = 0755
owner = bin
group = bin
FILE:WSERVER:SHARED:./bin/xm_wserver:
perms = 0755
owner = bin
group = bin
exportPath = /bin/xm_wserver
DIR:WSERVER:CLIENT:./usr:
perms = 0755
owner = bin
group = bin
DIR:WSERVER:CLIENT:./usr/lib:
perms = 0755
owner = bin
group = bin
DIR:WSERVER:CLIENT:./usr/lib/X11:
perms = 0755
owner = bin
group = bin
DIR:WSERVER:CLIENT:./usr/lib/X11/app-defaults:
perms = 0755
owner = bin
group = bin
FILE:WSERVER:CLIENT:./usr/lib/X11/app-defaults/WServer:
perms = 0444
owner = bin
group = bin
exportPath = ./lib/X11/app-defaults/WServer
.
.
.
PS: CDMT的高级功能 (CCS 组件控制脚本)
The Component Control Script (ccs) located in SSOroot/cntl/ccs, defines how custom(ADM) installs the component. For each component that you prepare for installation, create a ccs.
The ccs takes three arguments:
$1 step to perform
The step name contains three items:
+ the name of the phase to perform (such as LOAD)
+ the prefix UN (if the step is a reverse operation)
+ the prefix PRE_ or POST_, indicating which step to perform
For example, use PRE_LOAD to indicate the pre-load step during an installation; POST_UNATTACH indicates the post-attach step during a removal.
$2 keyword_list
The keyword specifies how the ccs behaves (during
installation only):
UPGRADE
Upgrades an older version of an SSO-based component to the new version of an SSO-based component.
OLD_CUSTOM_UPGRADE
Upgrades a non-SSO component to an SSO component. See ``Creating software upgrades'' in Developer's Topics.
$3
package_list
The package_list is a space-separated list of the fully-qualified package names in the component. Package names are in the form: vendorCode:componentCode:packageCode. See ``Component identifiers'' in Developer's Topics. To use the simpler packageCode, use the getPackageCode function in the ccsSetup(CDMT) library.
1. 说明:在CDMT_DIR根目录下建立/cntl/ccs文件,文件格式可参考模板,一般只要修订do_postexport函数
2. 设置CDMT的环境
#CDMT_DIR=/usr/test ;export CDMT_DIR
3. 生成.cmpnt, .prd, .pkg ,.config文件
find . -print>/tmp/test.files
cdmtConvert /tmp/test.files
4. 打开$CDMT_DIR/input/目录下的.pkg文件, 修改/cntl/ccs文件的用户,属组为bin:bin,访问权限为744
5. 拷贝.config到$CDMT_DIR目录,重命名为cdmt.config(偷懒步骤)
6. 余下步骤同上
PS:
如果出现如下警告:
Warning: distribution vendor not set
Warning: distribution code not set
Warning: distribution version not set
请定义cdmt.config中介质相关参数(以软盘为例)
CONFIG:
archiveMedia=FLOPPY
FLOPPY_MEDIA:
distVendor=foo
distCode=distribution code (default ``protoFloppyDist'')
distVersion=distribution version (default ``1.0'')
以下是CCS的内容
#!/ibin/sh
# %Z% %M% %I% %E% %Q%
#
# Copyright (C) 2001 The Santa Cruz Operation, Inc.
# All Rights Reserved.
# The information in this file is provided for the exclusive use of
# the licensees of The Santa Cruz Operation, Inc. Such users have the
# right to use, modify, and incorporate this code into other products
# for purposes authorized by the license agreement provided they include
# this notice and the associated copyright notice with any such product.
# The information in this file is provided "AS IS" without warranty.
#
#******************************************************************************
# Generic CCS script -- CHANGE THIS!!!
#-----------------------------------------------------------------------------
# COMMENTS/DESCRIPTION
#-----------------------------------------------------------------------------
#
# input:
# $1 is the name of the step
# $2 is the keyword list (e.g., INSTALL, UPGRADE, REMOVE)
# $3 is the package list
#============================================================================
#====================================================================== INT ===
# cleanup --
#
# cleanup exits the package script with the passed argument
#
#------------------------------------------------------------------------------
cleanup()
{
exit $1
}
#====================================================================== INT ===
# do_save --
#
# do_save uses ccsUpgradeTool to save the RTS config files
#
#------------------------------------------------------------------------------
do_save()
{
return # don't do anything here for now
}
#=================CUSTOM INSTALLATION STEP FUNCTIONS=================== INT ===
#
#====================================================================== INT ===
# do_preload --
#
# If the keyword "UPGRADE" is specified, but the old version being
# upgraded is not an SSO component, special action may be required
# at this point. See guidelines 4.6.2 "How to Handle In-Place Upgrade".
#
# Note that only the files in the "SharedControl" package of the
# component have been loaded onto the target at this point.
#
#------------------------------------------------------------------------------
do_preload()
{
# calls do_save to save config files for upgrade
#
do_save
}
#====================================================================== INT ===
# do_postload --
#
# No work is defined
#
#------------------------------------------------------------------------------
do_postload()
{
do_save
# no work currently defined for here
}
#====================================================================== INT ===
# do_preattach --
#
# In this step, the ccs should make any necessary version-compatibility
# checks. If, for some reason it is not valid to install the component
# on the given client -- perhaps an inappropriate version of the
# operating system is installed, for instance -- the ccs shoudl return
# an exit code of $FAIL, causing teh installation to fail.
#
# If the keyword "UPGRADE" is specified, but the old version being
# upgraded is not an SSO component, special action is required at this
# point. See guidelines 4.6.2 "How to Handle In-Place Upgrade".
#
#------------------------------------------------------------------------------
do_preattach()
{
#
#
#
# perform necessary version-compatibility checks. perform a
# cleanup $FAIL
# if something is not right after loggin the reasons.
#
# calls do_save to save config files for network client upgrade
#
do_save
}
#====================================================================== INT ===
# do_postattach --
#
# If the keyword "UPGRADE" is specified, this is the step in which the
# ccs should merge the old configuration data into the appropriate files.
#
# If the old version being upgraded was not an SSO component, the old
# configuration data will have been saved in the CCS_PERSISTENT_STORAGE by
# an earlier script phase.
#
# After the saved data has been restored, any "query" parameters that
# necessitate further self-configuration should be applied. Only files
# wholly owned by this component -- i.e., those in the /var/opt area
# -- can be modified.
#
#------------------------------------------------------------------------------
do_postattach()
{
case "$upgrade" in
nonSSOupgrade)
# preserve any needed data from a 3.2v4 installation
;;
SSOupgrade)
# preserve any needed data from an OSr5 installation
;;
esac
}
#====================================================================== INT ===
# do_preregister --
#
# Here is where ScoAdmin OSAs that need to be available to other
# components during those component's "configure" phase should be
# installed. This implies some stringent restrictions on the
# implementation of such OSA's: they must operate completely within
# the boundries of their own component provided tools and data,
# possibly relying as well on tools available in /ibin.
#
#------------------------------------------------------------------------------
do_preregister()
{
:
# No work defined yet
}
#====================================================================== INT ===
# do_postregister --
#
# No work is defined
#
#------------------------------------------------------------------------------
do_postregister()
{
:
# No work defined yet
}
#====================================================================== INT ===
# do_preconfigure --
#
# The component should configure itself into any system service of which
# it is a consumer. For instance, calls to "idinstall" should be made
# here to add a drive into (or, in the case of a removal, to pull a
# driver out of) the link kit.
#
#------------------------------------------------------------------------------
do_preconfigure()
{
:
#
#
#
# This is where things that need to register with OSA's should call
# those OSAs.
}
#====================================================================== INT ===
# do_postconfigure --
#
# Any remaining configuration that relied on steps taken in the pre-
# configurure and system steps should be completed here
#
#------------------------------------------------------------------------------
do_postconfigure()
{
:
#
#
#
# Continue anything started in do_preconfigure that needs finishing
# up.
#
}
#====================================================================== INT ===
# do_preexport --
#
# No work defined here
#
#------------------------------------------------------------------------------
do_preexport()
{
:
# no work defined yet
}
#====================================================================== INT ===
# do_postexport --
#
# In the final phase, all the remaining public interfaces are exported
# to the system's public name space.
#
#------------------------------------------------------------------------------
do_postexport()
{
:
# ln -s /opt/K/SCO/manager/1.0/bin/monitor /usr/bin/monitor
}
#=================CUSTOM REMOVAL STEP FUNCTIONS-----=================== INT ===
#
#====================================================================== INT ===
# do_preunexport --
#
# In the first phase, all the extra public interfaces are unexported
# from the system's public name space.
#
#------------------------------------------------------------------------------
do_preunexport()
{
:
#
#
#
# This is the place that would be filled by all the other misc
# functions performed by the removal script that were not covered by
# the previous steps. Things like flushing buffers and the like.
}
#====================================================================== INT ===
# do_postunexport --
#
# No work defined here
#
#------------------------------------------------------------------------------
do_postunexport()
{
:
# no work defined yet
}
#====================================================================== INT ===
# do_preunconfigure --
#
# The component should unconfigure itself from any system service it is
# a consumer of, using calls to the appropriate service interface. For
# instance, kernel drivers should be removed by a call to the "idinstall"
# utility.
#
#------------------------------------------------------------------------------
do_preunconfigure()
{
:
#
#
#
# This is where things that needed to register with OSA's should
# remove themselves from those OSAs.
}
#====================================================================== INT ===
# do_postunconfigure --
#
# No work is defined
#
#------------------------------------------------------------------------------
do_postunconfigure()
{
:
# No work defined yet
}
#====================================================================== INT ===
# do_preunregister --
#
# For components which provide system services, any work which is
# necessary prior to the removal of those services should be completed
# in this step. Depending on the service, it may be appropriate to
# inform all service consumers of the service's removal, using a
# provider-defined interface. See the guidlines 3.4 "Responsibilies
# involved with providing a system service."
#
#------------------------------------------------------------------------------
do_preunregister()
{
:
#
#
#
# This is where OSAs should call classconf & osaconf to remove
# themselves from the osa registration database
#
}
#====================================================================== INT ===
# do_postunregister --
#
# No work is defined
#
#------------------------------------------------------------------------------
do_postunregister()
{
:
# No work defined yet
}
#====================================================================== INT ===
# do_preunattach --
#
# No work is defined
#
#------------------------------------------------------------------------------
do_preunattach()
{
:
# No work defined yet
}
#====================================================================== INT ===
# do_postunattach --
#
# No work is defined
#
#------------------------------------------------------------------------------
do_postunattach()
{
:
# No work defined yet
}
#====================================================================== INT ===
# do_preunload --
#
# No work is defined
#
#------------------------------------------------------------------------------
do_preunload()
{
:
# No work defined yet
}
#====================================================================== INT ===
# do_postunload --
#
# No work is defined
#
#------------------------------------------------------------------------------
do_postunload()
{
:
# No work defined yet
}
#====================================================================== INT ===
# main --
#
# Based on step specified, perform actions of the general form:
# Global initialization
# Loop to call each package script for package-specific actions
# Global cleanup
#
# NOTE: Currently, a number of steps exist for which no action needs to
# be specified in this product. This will probably be true for most
# products in the near future.
#------------------------------------------------------------------------------
# NOTE: Do not "cd" around the place as the SSO_CLIENT_ROOT and related
# variables are of relative path and your use of them will be damaged
# if you change your location.
# set a trap so if the user dels out, a WARN exit value is passed
# to the calling program
trap 'cleanup $WARN' 1 2 3 15
# Process the arguments to this script and perform action
# for the step being executed currently
pkg_step=$1
pkg_keywords=$2
pkg_list=$3
# Source in the standard functions library
. ccsSetup.sh
# determine action to perform, default is install
upgrade=
removal=
for word in $pkg_keywords
do
case "$word" in
OLD_CUSTOM_UPGRADE) upgrade=nonSSOupgrade
;;
UPGRADE) upgrade=SSOupgrade
;;
esac
done
# This first case details in which order an "installation" takes place in:
case "$pkg_step" in
PRE_LOAD)
do_preload
;;
POST_LOAD)
do_postload
;;
PRE_ATTACH)
do_preattach
;;
POST_ATTACH)
do_postattach
;;
PRE_REGISTER)
do_preregister
;;
POST_REGISTER)
do_postregister
;;
PRE_CONFIGURE)
do_preconfigure
;;
POST_CONFIGURE)
do_postconfigure
;;
PRE_EXPORT)
do_preexport
;;
POST_EXPORT)
do_postexport
;;
esac
# This first case details in which order an "removal" takes place in:
case "$pkg_step" in
PRE_UNEXPORT)
do_preunexport
;;
POST_UNEXPORT)
do_postunexport
;;
PRE_UNCONFIGURE)
do_preunconfigure
;;
POST_UNCONFIGURE)
do_postunconfigure
;;
PRE_UNREGISTER)
do_preunregister
;;
POST_UNREGISTER)
do_postunregister
;;
PRE_UNATTACH)
do_preunattach
;;
POST_UNATTACH)
do_postunattach
;;
PRE_UNLOAD)
do_preunload
;;
POST_UNLOAD)
do_postunload
;;
esac
cleanup $OK
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31/showart_509556.html |
|