我在包装Solaris 11的过程中遇到了很多麻烦。我知道有一个yum
类型的打包方法,但我希望有一个rpm -i
和rpm -U
方法,允许将包交付,然后安装或升级。Solaris软件包升级
现在我已经查明了如何制作包装,即pkgmk
和pkgtrans
。鉴于这种我可以创建一个可以安装这样的“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。
是的,你是对的我应该使用IPS。我并不清楚,但我需要同时支持Solaris 10和11,而且我只想为这两个进程提供一个进程,因此我坚持使用传统进程。关于'rpm -U'做一个“删除然后添加”我不认为这是真的,但相反,我认为它覆盖。我的应用程序使用内存数据库将其状态写入应用程序目录,所以在升级时我们要覆盖所以我们保持状态。如果你需要'pkgrm'然后''pkgadd'',这显然会变得尴尬。如果没有“更新”概念,那么我想我们需要一个手动过程来恢复“状态”。 – mlathe
你说得对,'rpm -U'首先安装新版本,然后删除过时的文件(如果有的话)。无论如何,如果状态文件不是由程序包交付,而是由应用程序稍后创建的,我相信状态文件将由'pkgrm'命令保存。 – jlliagre
啊......你说得对。我的postremove脚本执行安装目录的“rm -rf”。我会确认它会像你所说的那样离开“国家”。有一个问题,是否有一个共同的流程来处理剩余的“状态”文件(这将包括日志,临时文件,数据库等)。 postremove脚本应该告诉用户还有剩余的文件吗?脚本应该是交互式的,并询问文件是否应该被删除?最佳做法是什么? – mlathe