rpm打包遇到的一个问题
对我的数据文件home下面的一个目录打了一个rpm包,进行的操作是cp。现在发现了一个问题:当版本号为1时,进行了安装。改版本号为2时重新编译后,再进行安装(不用U参数),还是可以安装,没有提示冲突之类的。它没有把版本1覆盖,rpm -qa|grep *** 发现同时并存2个版本,请问如果杜绝这种现象?谢谢。[ 本帖最后由 hover_sky 于 2008-11-27 13:50 编辑 ] 没有提示冲突,就说明没有冲突,这时候可以人为制造冲突,呵呵。
在spec里写上Confilcts就行了,不过对老版本最好写Obsolete。
不过你对home下面的目录打包是怎么做的?rpm建包的时候应该使用chroot的环境才对。 我的spec如下:
Summary: The file system
Name: sys
Version: 1.0
Release: 1
License: GPL
Group: Applications/File
Source0: %{name}-%{version}.tar.gz
BuildRoot: /var/tmp/%{name}-root
Autoreqprov: 0
%description
This sys is files.
%prep
%setup-q -n sys
%install
rm -rf %{buildroot}
mkdir -p$RPM_BUILD_ROOT/home/hover/sys
cp -r --reply=yes*$RPM_BUILD_ROOT/home/hover/sys
%clean
rm -rf %{buildroot}
%files
%defattr(-,hover,hover)
/home/hover/sys/
请斑竹指导指导
[ 本帖最后由 hover_sky 于 2008-11-29 17:28 编辑 ] 我是先把/home/hover下面的sys目录打成%{name}-%{version.tar.gz
然后用上面的spec打成rpm包
出现一个问题:sys里面是php文件,系统自动把他们依赖到了/usr/local/bin/perl ,而系统的perl是在/usr/bin,所以用了Autoreqprov: 0,否则安装出错。
在spec里写上Confilcts,写到哪里?没有找到它的说明哦:(
[ 本帖最后由 hover_sky 于 2008-11-29 17:26 编辑 ] 写在Autoreqprov: 0后面。不过这种情况最好再考虑考虑,好像这个spec有问题。 :?: :?: :?: 在Autoreqprov: 0
后面加上:
Conflicts:sys
之后,安装/升级新的版本(使用rpm -i/ -U)都安装不了
:cr:
[ 本帖最后由 hover_sky 于 2008-11-29 20:57 编辑 ] Obsolete: sys < %{version} 非常感谢sejishikong的帮忙。
不过,使用了
Obsolete: sys < %{version}
后,结果还是一样,使用rpm -i 都可以安装,安装了多个版本,可以通过rpm -qa|grepsys 查看,发现他们都是并存的。
[ 本帖最后由 hover_sky 于 2008-11-30 13:15 编辑 ] 你看眼 rpm 里面的文件是否正确,按理上讲你的文件内容如果有冲突,用 -i 是装不上的。
总结一下吧
对一个目录打包:安装了第一版本后,如果第二个版本的内容和第一个版本的内容没有发生变化,或者只是增加了文件/目录并且没有对原来存在的内容进行修改过的话,这个两个版本的rpm之间不存在冲突关系。即是可以通过rpm -ivh,并且两个版本并存。从中可以看出,rpm通过检测旧文件和新文件中同目录下同名文件的差异来确定是否存在冲突。也许我的本意(第二个版本即使和第一个版本的内容是一样,从来没有修改过,仅仅是修改了压缩包的名字而已的话,当 -i安装时还是发生冲突)是不可能的了?
难道rpm打包的原貌就是这样?
[ 本帖最后由 hover_sky 于 2008-11-30 20:22 编辑 ]
页:
[1]