Solaris软件包升级

时间:2014-02-26 19:03:57

标签: solaris packaging

我在解决Solaris 11的打包方式时遇到了很多麻烦。我知道有一种yum类型的打包方法,但我希望有一种rpm -irpm -U方法,允许交付包然后安装或升级。

现在我已经找到了制作包的方法,即pkgmkpkgtrans。鉴于此,我可以创建一个“foo_1.0.pkg”文件,可以像这样安装:

pkgadd -d foo_1.0.pkg

但是我无法弄清楚如何使用“foo_2.0.pkg”升级此软件包:

root@hostname # pkgadd -d foo_2.0.pkg   

The following packages are available:
  1  foo     foo
             (x86) private_build

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: all

Processing package instance <foo> from </root/foo_2.0.pkg>

foo(x86) private_build

Current administration requires that a unique instance of the <foo>
package be created.  However, the maximum number of instances of the
package which may be supported at one time on the same system has
already been met.

No changes were made to the system.

我做错了什么?我似乎应该使用pkg update,但这似乎意味着我需要在回购中释放我的pkg。

3 个答案:

答案 0 :(得分:3)

首先,您没有使用Solaris 11打包(IPS),而是使用传统的SVR4打包。

使用后者,您无法升级自定义程序包。唯一的办法就是删除旧包并安装新包,这就是rpm -U无论如何都在做什么。

pkgrm foo
pkgadd -d foo_2.0.pkg foo

答案 1 :(得分:1)

$ UPDATE

在大多数安装环境下,此变量不存在。如果确实存在(值为yes),则表示系统上已安装具有相同名称,版本和体系结构的PKG,或者安装PKG将覆盖已安装的PKG。然后使用原始的BASEDIR。 因此,您可以在预安装或安装后脚本中使用此变量进行任何更新。

答案 2 :(得分:0)

我有同样的问题,但我能够通过将配置文件传递到cmd来解决它。当与&#34; echo |&#34;一起使用时,这在脚本中特别有用。因为它也绕过了确认提示。配置文件将覆盖位于文件中的默认安装属性:/ var / sadm / install / admin / default。关键是instance = overwrite行。我也改变了其他一些,以避免可能出现的任何其他提示。作为替代解决方案,您可以直接更改默认文件,而不必引用其他配置文件。

已安装myprog1.0(或2.0)的

运行以下命令。

echo | pkgadd -a /opt/myprog/install.conf -d myprog2.0

/opt/myprog/install.conf文件的内容:

mail=
instance=overwrite
partial=nocheck
runlevel=nocheck
idepend=nocheck
rdepend=nocheck
space=ask
setuid=ask
conflict=nocheck
action=nocheck
networktimeout=60
networkretries=3
authentication=quit
keystore=/var/sadm/security
proxy=