我在解决Solaris 11的打包方式时遇到了很多麻烦。我知道有一种yum
类型的打包方法,但我希望有一种rpm -i
和rpm -U
方法,允许交付包然后安装或升级。
现在我已经找到了制作包的方法,即pkgmk
和pkgtrans
。鉴于此,我可以创建一个“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。
答案 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=