2014-02-26 69 views
0

我在包装Solaris 11的过程中遇到了很多麻烦。我知道有一个yum类型的打包方法,但我希望有一个rpm -irpm -U方法,允许将包交付,然后安装或升级。Solaris软件包升级

现在我已经查明了如何制作包装,即pkgmkpkgtrans。鉴于这种我可以创建一个可以安装这样的“foo_1.0.pkg”文件:

pkgadd -d foo_1.0.pkg

但我无法弄清楚如何将此包“foo_2.0.pkg”升级:

[email protected] # 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

首先,您没有使用Solaris 11打包(IPS),而是使用旧版SVR4打包。

对于后者,您无法升级自定义软件包。然后,唯一的方法就是去掉旧包装并安装新包装,这正是rpm -U在发动机罩下所做的。

pkgrm foo 
pkgadd -d foo_2.0.pkg foo 
+0

是的,你是对的我应该使用IPS。我并不清楚,但我需要同时支持Solaris 10和11,而且我只想为这两个进程提供一个进程,因此我坚持使用传统进程。关于'rpm -U'做一个“删除然后添加”我不认为这是真的,但相反,我认为它覆盖。我的应用程序使用内存数据库将其状态写入应用程序目录,所以在升级时我们要覆盖所以我们保持状态。如果你需要'pkgrm'然后''pkgadd'',这显然会变得尴尬。如果没有“更新”概念,那么我想我们需要一个手动过程来恢复“状态”。 – mlathe

+0

你说得对,'rpm -U'首先安装新版本,然后删除过时的文件(如果有的话)。无论如何,如果状态文件不是由程序包交付,而是由应用程序稍后创建的,我相信状态文件将由'pkgrm'命令保存。 – jlliagre

+0

啊......你说得对。我的postremove脚本执行安装目录的“rm -rf”。我会确认它会像你所说的那样离开“国家”。有一个问题,是否有一个共同的流程来处理剩余的“状态”文件(这将包括日志,临时文件,数据库等)。 postremove脚本应该告诉用户还有剩余的文件吗?脚本应该是交互式的,并询问文件是否应该被删除?最佳做法是什么? – mlathe

0

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

已安装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= 
1

$ UPDATE

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

相关问题