7

rpmbuild は、パッケージに含まれるバイナリに必要な共有ライブラリを検索することで、依存関係を自動検出できます。これはほとんどの場合良い考えですが、一部の特定のライブラリに対してのみ、望ましくない場合もあります。一部のバイナリ ファイルが、rpm パッケージ管理を介してシステムに提供されず、サード パーティのインストーラーによって直接インストールされるライブラリを必要とする場合について言及しています。

ここで問題は、自動検出機能をアクティブに保ち (パッケージ内の他のバイナリに便利です)、これらの特定のライブラリのみを無視/削除する方法はありますか?

何かのようなもの

AutoReqIgnore : library1
AutoReqIgnore : library2
4

3 に答える 3

4

rpm-4.9 (Fedora 15) の時点で、rpm には、自動生成された依存関係のフィルタリングを有効にする標準的な方法があります。

たとえば、次のように記述できます。

%global __requires_exclude ^libthirdpartyplugin.so$
于 2015-03-06T16:04:45.030 に答える
3

組み込みの方法は見つかりませんでしたが、フィルターとして使用する小さなスクリプトを作成しました

#!/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}

ご覧のとおり、このスクリプトはのソースtarballにあり/build/ます。

于 2012-09-01T14:33:21.080 に答える
0

レガシー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.solibextra-3rdparty-stuff.soこれは、 RPM 経由で出荷されないことに依存します

RPM の依存関係に と を含める必要がありますがlibxx.so、.libyy.solibextra-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

ほらね。libextra-3rdparty-stuff.soRPM のインストール時に欠落しているという苦情はもうありません。

于 2020-10-23T22:06:57.107 に答える