问题摘要:从 Solaris 9 上的 Sun Cluster 版本 3.1 动态升级到 Solaris 10 上的版本 3.2 后,无法在群集软件中正确使用区域。原因是没有为 Sun Cluster 软件包创建相应的 pspool 数据。因此无法正确传播那些必须传播到非全局区域的软件包(如 SUNWsczu)。
解决方法:使用 scinstall -R 命令升级 Sun Cluster 软件包后,在将群集引导至群集模式之前,运行以下脚本两次:
一次是为了 Sun Cluster 框架软件包
一次是为了 Sun Cluster 数据服务软件包
可通过以下方法之一来准备和运行此脚本:
为 Sun Cluster 框架软件包设置变量,并运行脚本。然后修改数据服务软件包的 PATHNAME 变量,并重新运行脚本。
创建两个脚本,一个脚本中为框架软件包设置了变量,另一个脚本中为数据服务软件包设置了变量。然后运行这两个脚本。
成为超级用户。
创建具有以下内容的脚本。
#!/bin/ksh typeset PLATFORM=${PLATFORM:-`uname -p`} typeset PATHNAME=${PATHNAME:-/cdrom/cdrom0/Solaris_${PLATFORM}/Product/sun_cluster/Solaris_10/Packages} typeset BASEDIR=${BASEDIR:-/} cd $PATHNAME for i in * do if pkginfo -R ${BASEDIR} $i >/dev/null 2>&1 then mkdir -p ${BASEDIR}/var/sadm/pkg/$i/save/pspool pkgadd -d . -R ${BASEDIR} -s ${BASEDIR}/var/sadm/pkg/$i/save/pspool $i fi done
设置变量 PLATFORM、PATHNAME 和 BASEDIR。
将这些变量设置为环境变量,或者在脚本中直接修改其值。
平台的名称。例如,它可以是 sparc 或 x86。默认情况下,PLATFORM 变量被设置为 uname -p 命令的输出。
从中安装 Sun Cluster 框架软件包或数据服务软件包的设备的路径。此值对应于 pkgadd 命令中的 -d 选项。
例如,对于 Sun Cluster 框架软件包,此值的形式如下:
/cdrom/cdrom0/Solaris_${PLATFORM}/Product/sun_cluster/Solaris_10/Packages |
对于数据服务软件包,此值的形式如下:
/cdrom/cdrom0/Solaris_${PLATFORM}/Product/sun_cluster_agents/Solaris_10/Packages |
用作根路径的目录完整路径名,对应于 pkgadd 命令中的 -R 选项。要进行动态升级,请将此值设置为 scinstall 命令中的 -R 选项使用的根路径。默认情况下,BASEDIR 变量被设置为根 (/) 文件系统。
运行脚本,针对 Sun Cluster 框架软件包运行一次,针对数据服务软件包运行一次。
运行脚本后,应在命令提示符中看到针对每个软件包的以下消息:
Transferring pkgname package instance |
如果某个软件包的 pspool 目录已存在,或者针对同一组软件包运行了两次脚本,则命令提示符中将显示以下错误:
Transferring pkgname package instance pkgadd: ERROR: unable to complete package transfer - identical version of pkgname already exists on destination device |
这是一条无害的消息,可以安全地将其忽略。
为框架软件包和数据服务软件包运行了脚本后,将节点引导至群集模式下。