JavaScript is required to for searching.
跳过导航链接
退出打印视图
应用程序包开发者指南     Oracle Solaris 10 1/13 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  设计软件包

2.  生成软件包

3.  增强软件包的功能(任务)

4.  验证和转换软件包

5.  软件包创建案例研究

6.  创建软件包的高级技术

指定基目录

缺省管理文件

适应不确定性

使用 BASEDIR 参数

使用参数化基目录

示例-使用参数化基目录

pkginfo 文件

pkgmap 文件

管理基目录

适应重定位

遍历基目录

使用 BASEDIR 参数

pkginfo 文件

pkgmap 文件

示例-遍历 BASEDIR 的分析脚本

request 脚本

checkinstall 脚本

使用相对参数化路径

pkginfo 文件

pkgmap 文件

示例-遍历相对参数化路径的 request 脚本

在异构环境中支持重定位

传统方法

可重定位软件包

示例-传统的可重定位软件包

pkginfo 文件

pkgmap 文件

绝对软件包

示例-传统绝对软件包

pkgmap 文件

复合软件包

示例-传统解决方案

pkginfo 文件

pkgmap 文件

超越传统

复合软件包另一特性

使绝对路径名看起来像可重定位对象

示例-修改文件

说明

实现

示例

示例-创建新文件

说明

实现

示例

示例 -复合软件包

pkginfo 文件

pkgmap 文件

使软件包可远程安装

示例-安装到客户机系统

示例-安装到服务器或独立系统

示例-挂载共享文件系统

修补软件包

checkinstall 脚本

preinstall 脚本

类操作脚本

postinstall 脚本

patch_checkinstall 脚本

patch_postinstall 脚本

升级软件包

request 脚本

postinstall 脚本

创建类归档软件包

归档软件包目录的结构

支持类归档软件包的关键字

faspac 实用程序

词汇表

索引

升级软件包

升级软件包的过程与覆写软件包的过程极为不同。尽管有一些特殊工具支持对作为 Oracle Solaris OS 的一部分而交付的标准软件包进行升级,但可以将非捆绑软件包设计为支持其自己的升级-前面的多个示例描述了一些具有前瞻性并且可在管理员指导下控制精确的安装方法的软件包。您还可以设计 request 脚本以支持软件包的直接升级。如果管理员选择安装一个软件包以便完全替换另一个软件包,并且不留下残余的过时文件,软件包脚本可以执行此任务。

此示例中的 request 脚本和 postinstall 脚本提供了一个简单的可升级软件包。request 脚本与管理员通信,然后在 /tmp 目录中设置一个简单的文件以删除旧的软件包实例。(虽然 request 脚本创建了一个被禁止的文件,但这不会有什么问题,因为每个人都有权访问 /tmp。)

然后, postinstall 脚本执行 /tmp 中的 shell 脚本,该脚本对旧软件包执行必要的 pkgrm 命令,然后删除它自身。

此示例演示基本升级。该示例少于 50 行代码,其中包括一些相当长的消息。可以对其进行扩展以回退升级,或者根据设计者的要求对软件包进行其他重要转换。

升级选项的用户界面设计必须完全确保管理员充分了解升级过程,并且已经主动请求升级而不是并行安装。只要用户界面能够清楚地说明操作,执行诸如升级这样的复杂操作就不会出现什么错误。

request 脚本

# request script
control an upgrade installation
 
PATH=/usr/sadm/bin:$PATH
UPGR_SCRIPT=/tmp/upgr.$PKGINST
 
UPGRADE_MSG="Do you want to upgrade the installed version ?"
 
UPGRADE_HLP="If upgrade is desired, the existing version of the \
    package will be replaced by this version. If it is not \
    desired, this new version will be installed into a different \
    base directory and both versions will be usable."
 
UPGRADE_NOTICE="Conflict approval questions may be displayed. The \
    listed files are the ones that will be upgraded. Please \
    answer \"y\" to these questions if they are presented."
 
pkginfo -v 1.0 -q SUNWstuf.\*
 
if [ $? -eq 0 ]; then
      # See if upgrade is desired here
      response=`ckyorn -p "$UPGRADE_MSG" -h "$UPGRADE_HLP"`
      if [ $response = "y" ]; then
            OldPkg=`pkginfo -v 1.0 -x SUNWstuf.\* | nawk ' \
            /SUNW/{print $1} '`
            # Initiate upgrade
            echo "PATH=/usr/sadm/bin:$PATH" > $UPGR_SCRIPT
            echo "sleep 3" >> $UPGR_SCRIPT
            echo "echo Now removing old instance of $PKG" >> \
            $UPGR_SCRIPT
            if [ ${PKG_INSTALL_ROOT} ]; then
                  echo "pkgrm -n -R $PKG_INSTALL_ROOT $OldPkg" >> \
                  $UPGR_SCRIPT
            else
                  echo "pkgrm -n $OldPkg" >> $UPGR_SCRIPT
            fi
            echo "rm $UPGR_SCRIPT" >> $UPGR_SCRIPT
            echo "exit $?" >> $UPGR_SCRIPT
 
            # Get the original package's base directory
            OldBD=`pkgparam $OldPkg BASEDIR`
            echo "BASEDIR=$OldBD" > $1
            puttext -l 5 "$UPGRADE_NOTICE"
       else
             if [ -f $UPGR_SCRIPT ]; then
                   rm -r $UPGR_SCRIPT
             fi
       fi
fi
 
exit 0

postinstall 脚本

# postinstall
to execute a simple upgrade
 
PATH=/usr/sadm/bin:$PATH
UPGR_SCRIPT=/tmp/upgr.$PKGINST
 
if [ -f $UPGR_SCRIPT ]; then
      sh $UPGR_SCRIPT &
fi
 
exit 0