显示标签为“rpm”的博文。显示所有博文
显示标签为“rpm”的博文。显示所有博文

2012年10月24日星期三

rpm与dpkg的对照表

rpm -i filename.rpm       dpkg -i filename.deb        安装
rpm -U filename.rpm       dpkg -i filename.deb 更新
rpm -e pkgname       dpkg -P pkgname 删除
rpm -q pkgname       dpkg -l pkgname 查询
rpm -qa       dpkg –get-selections 列出所有安装的包
rpm -qi pkgname       dpkg -p pkgname 显示包的详细信息
rpm -qf filename       dpkg -S filename 显示包含指定文件的包
rpm -ql pkgname       dpkg -L pkgname 显示包中的文件列表
yum search pattern       apt-cache search pattern 搜索包含pattern的包

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)