2012年6月1日星期五

rpm 包研究(一)

说一下最近遇到的一个问题, 我在 RPM 包里面加了一个脚本文件里面使用了一些模块,打包完包的时候,发现 rpm 包的依赖关系里面有了这些模块, 这就要求我在其他的设备上安装的时候要求必须满足这些依赖关系, 我在想如何跳过这些依赖关系。

首先说一下在打 rpm 包的时候,什么情况下脚本文件会被 rpm 去检查依赖关系, 经过实践发现主要是处在文件的权限上,如果脚本文件具有可执行权限的话,在打 rpm 包的时候就会被检查相关的依赖关系,脚本的文件名后缀并没有产生影响。

另外再说一下, 比如我只想跳过某些的依赖包的检查,比如说很常用的一些库,我不想让 rpm 在安装的时候去做检查,这个时候就需要使用另外一个办法了:在你的 spec 文件里面加入这样一段代码

%prep
%setup -q -n Foo-%{version}

cat << \EOF > %{name}-prov
#!/bin/sh
%{__perl_provides} $* |\
sed -e '/perl(unwanted_provide)/d'
EOF

%global __perl_provides %{_builddir}/%{name}-%{version}/%{name}-prov
chmod +x %{__perl_provides}


cat << \EOF > %{name}-req
#!/bin/sh
%{__perl_requires} $* |\
sed -e '/perl(unwanted_require)/d'
EOF

%global __perl_requires %{_builddir}/%{name}-%{version}/%{name}-req
chmod +x %{__perl_requires}



具体参照这个页面


http://fedoraproject.org/wiki/EPEL:Packaging#Perl_Provides_and_Requires_Filtering


当然这个只是针对比较老的 rpm 版本,如果是新版本的话, 会有更好的解决的办法。


http://fedoraproject.org/wiki/Packaging:AutoProvidesAndRequiresFiltering


再说一下这两个文件:


 

/usr/lib/rpm/perl.req 
/usr/lib/rpm/perl.prov

这两个文件都是一个 perl 脚本, 主要是检查 rpm 里面的每个文件的依赖(perl.req), 和所提供的模块 (perl.prov)

没有评论:

发表评论