如何去除 rpmbuild 自动发现的依赖关系,其中 perl-Ne
如何去除 rpmbuild 自动发现的依赖关系,其中 perl-Ne
同事在用简单的 SPEC 配置打包 nagios 套件的时候,发现最后生成的 rpm 包附加了很多依赖关系。其中 perl-Net-SNMP 这个包,是服务器默认安装中没有的。这也不是什么大问题。不过这个出现还是蛮奇怪的。值得研究一下。
后来在 /usr/lib/rpm/ 目录下发现了一系列脚本,诸如javadeps/perl.req/pythondeps/find-requires/mono-find-requires等等。
这些脚本的作用是,用 file 命令判断文件,如果是二进制的,用ldd判断依赖;如果是脚本,过滤文件中对应的 use/requires/import 语句。这样就可以找出来源代码的内部依赖了。
那么怎么才能跳过这段逻辑呢?
最暴力的办法,这些文件都是 bash 或者 perl 脚本,直接修改。
但是还可以文明一点,像下面这段,添加在 SPEC 文件中:
%setup %prep cat << \EOF > %{name}-req #!/bin/sh %{__perl_requires} $* |\ sed -e '/perl(Net::SNMP)/d' EOF %define __perl_requires %{_builddir}/%{name}-%{version}/%{name}-req chmod 755 %{__perl_requires}
这里重定义了一个脚本,原先的定义在 /usr/lib/rpm/macros 中,是:
#%__find_provides /usr/lib/rpm/rpmdeps --provides #%__find_requires /usr/lib/rpm/rpmdeps --requires %__find_provides /usr/lib/rpm/find-provides %__find_requires /usr/lib/rpm/find-requires #%__perl_provides /usr/lib/rpm/perldeps.pl --provides #%__perl_requires /usr/lib/rpm/perldeps.pl --requires %__perl_provides /usr/lib/rpm/perl.prov %__perl_requires /usr/lib/rpm/perl.req %__python_provides /usr/lib/rpm/pythondeps.sh --provides %__python_requires /usr/lib/rpm/pythondeps.sh --requires %__mono_provides /usr/lib/rpm/mono-find-provides %{_builddir}/%{?buildsubdir} %{buildroot} %{_libdir} %__mono_requires /usr/lib/rpm/mono-find-requires %{_builddir}/%{?buildsubdir} %{buildroot} %{_libdir}
然后将加入了 sed 命令的新脚本定位为新的 MACROS 变量给 rpmbuild 后续使用。
评论暂时关闭