【问题标题】:Can some specific autodetected dependency be ignored upon rpmbuildrpmbuild 时是否可以忽略某些特定的自动检测依赖项
【发布时间】:2012-08-31 09:37:46
【问题描述】:

rpmbuild 可以通过查找包中包含的二进制文件所需的共享库来自动检测依赖关系,虽然这几乎每次都是一个好主意,但有时它是不可取的,但仅适用于某些特定的库。我指的是某些二进制文件需要的库不是通过其 rpm 包管理提供给系统而是由第三方安装程序直接安装的情况。

现在,问题是:有没有办法保持自动检测功能处于活动状态(对包中的其他二进制文件很方便)但只忽略/删除这些特定库?

类似

AutoReqIgnore : library1
AutoReqIgnore : library2

【问题讨论】:

    标签: rpm dependency-management rpmbuild rpm-spec


    【解决方案1】:

    As of rpm-4.9 (Fedora 15), rpm has a standard method to enable filtering 的自动生成的依赖项。

    例如,你可以写

    %global __requires_exclude ^libthirdpartyplugin.so$
    

    【讨论】:

    【解决方案2】:

    我还没有找到内置方式,但是我wrote a small script that I used as a filter

    #!/usr/bin/perl -w
    use strict;
    use IPC::Open2;
    
    # This quick script will run the native find-requires (first parameter)
    # and then strip out packages we don't want listed.
    open2(\*IN, \*OUT, @ARGV);
    print OUT while (<STDIN>);
    close(OUT);
    my $list = join('', <IN>);
    
    # Apply my filter(s):
    $list =~ s/^libqt-mt.so.*?$//mg;
    
    print $list;
    

    你可以放你自己的正则表达式行,在这个例子中我删除了libqt-mt.so.*

    然后,在.spec 文件中:

    # Note: 'global' evaluates NOW, 'define' allows recursion later...
    %global _use_internal_dependency_generator 0
    %global __find_requires_orig %{__find_requires}
    %define __find_requires %{_builddir}/%{?buildsubdir}/build/find-requires %{__find_requires_orig}
    

    如您所见,此脚本位于 /build/ 下的源代码压缩包中。

    【讨论】:

    • 接受不验证的答案:我可能短期内无法验证
    【解决方案3】:

    旧版 rpm-4.8 和更早版本 (CentOS 6.x) 没有过滤自动检测到的依赖项。但是,有一个解决方法:

    在 rpmbuild 之前 Gzip 有问题的库,并在安装后对其进行 gunzip。 rpmbuild 的依赖关系检测将忽略该文件。

    示例情况:

    您的awesome-project-1.2.3-4.i686.rpm 包含

    • libfoo.so 取决于 libxx.so
    • libbar.so 取决于 libyy.so
    • libbah.so 取决于 libextra-3rdparty-stuff.so 不是通过 RPM 提供的

    您希望在 RPM 的依赖项中包含 libxx.solibyy.so,而不是 libextra-3rdparty-stuff.so

    现在对 rpm 规范文件进行操作,比如 awesome-project.spec

    %prep
    gzip "$RPM_BUILD_ROOT/usr/lib/libbah.so"
    exit
    
    %post
    gunzip -f "$RPM_INSTALL_PREFIX/usr/lib/libbah.so.gz
    exit
    
    %preun
    gzip "$RPM_INSTALL_PREFIX/usr/lib/libbah.so" # so that `rpm -e` doesn't complain about missing file
    exit
    

    给你。安装 RPM 时不再抱怨缺少 libextra-3rdparty-stuff.so

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 2014-08-12
      相关资源
      最近更新 更多