独自のソフトウェアコレクションを使用してCentOS 7環境でRPMを構築しましたが、構築プロセスでは.pm
ソースコード自体の一部のPerlモジュール(ファイル)を実行する必要があります。実行すると、rpm -Uvh rpm-name.rpm
ソースコード内の正確なPerlモジュールへの依存関係が失敗します。それで、質問はカスタムPerlモジュールをどのようにインストールしますか?
一部の.pm
ファイルはパッケージを定義し、他のファイルはサブルーチンを定義します。スクリプトディレクトリをコピーしてみましたが、うまく/usr/lib64/perl5/
いきませんでした。cpan -D Module::Name
私にしてくださいCan't call method userid on an undefined value at /usr/share/perl5/App/Cpan.pm line 836
。 PerlモジュールでRPMを生成しようとしましたが、誰もがモジュールCPAN
からRPMを生成する方法を説明しているようです。
答え1
あなたの説明は正確に何が起こっているのか明確ではありませんが(特定のエラーメッセージが役に立つか問題を再現するサンプルパッケージの仕様があります)、RPMの依存関係は何とか間違っているようです。問題の詳細に応じて、いくつかのオプションがあります。
紛失したパッケージを提供
パッケージが*.spec
ファイルに欠落しているモジュールを提供することを示します。
Provides: perl(Module::Name)
...
*.spec
これはソフトウェアファイルで行うことができます。時にはこれが必要な場合があります欠落した依存関係を提供する以外に、何もしないシムRPM特に、依存関係を変更するために変更できない、または変更したくないサードパーティのパッケージがある場合は、そうです。
自動リクエストを無効にする
大きなハンマー打撃は、パッケージを閉じるために自動的に必要です。
Autoreq: 0
これによりBuildRequires
、パッケージに適切な依存関係を設定するために、ファイルに適切なおよび他のステートメントが必要になることがあります(または構成管理でインストールする必要があるパッケージを処理できます)。ローカルに保守する133のモジュールパッケージのうち4つにこのフラグを設定する必要があります。たとえば、次のようになります。Requires
*.spec
perl-*
perl-File-ChangeNotify.spec
# KLUGE don't pull in IO::KQueue which in turn needs *BSD
Autoreq: 0
BuildRequires: perl(Carp)
...
Requires: perl(Carp)
...
自動依存スクリプトの変更またはフィルタリング
要件を決定するためにRPMが実行するコードの出力を変更またはフィルタリングする必要があるため、より多くの作業が必要です。タコメーター文書find-*
私のCentos 7テストシステムには、もはやそのページに記載されているスクリプトがないため、古いようです。したがって、この手順で何か変更されたことは間違いありません。誰が現在どこにあるのか、文書化されているのかを知っていますか?代わりに、要件スクリプトへの変更を追跡する時間がないため、上記の2つの方法のいずれかを使用します。
答え2
__requires_exclude
私は仕様ファイルにマクロを追加することがこの状況に非常に役立つことを発見しました。バラよりhttps://docs.fedoraproject.org/en-US/packaging-guidelines/AutoProvidesAndRequiresFiltering/詳細は