web-dev-qa-db-ja.com

CentOS7-RPMパッケージの作成中にスペックファイルのセットアップで発生した問題

私はDebianパッケージをRPMパッケージに変換して、CentOS Linux 7(Red Hat)にインストールすることを目指しています。私はそれを達成するためにエイリアンを使用しました:alien --to-rpm --scripts --keep-version --generate debian_pkg.deb。実行時の依存関係をスペックファイルに追加したいので、--generateフラグを使用してパッケージをビルドするためのディレクトリを作成します。そのために、次の行を追加します:Requires: nodejs Tomcat8 Java-1.8.0-openjdk Java-1.8.0-openjdk-devel。次に、パッケージrpmbuild -ba <package_name>.specを作成しようとしましたが、次のエラーで突然終了します。

Processing files: <package_name>
error: Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv
error: Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp/file.tar.gz
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/README.Debian
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/changelog.Debian.gz
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/copyright


RPM build errors:
    Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv
    Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp/file.tar.gz
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/README.Debian
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/changelog.Debian.gz
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/copyright

インターネットを検索したところ、%installセクション、より具体的には%{buildroot}にリンクされていることがわかりましたが、問題を回避して修正することができません。誰かが私に手を貸してくれませんか?

ありがとう!

[〜#〜] update [〜#〜]

本質的にはスペックファイルは次のとおりです。

Buildroot: /home/<package_dir>
Version: 1.0
Release: 849
Distribution: Debian
Group: Converted/misc
Requires: nodejs Tomcat8 Java-1.8.0-openjdk Java-1.8.0-openjdk-devel

%define _rpmdir ../
%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{Arch}.rpm
%define _unpackaged_files_terminate_build 0

%pre
# some Shell script

%post
# some Shell script

%install
mkdir -p %{buildroot}/usr/share/doc/
mkdir -p %{buildroot}/usr/share/doc/frontend/

%files
%dir "/srv/"
%dir "/srv/tmp/"
"/srv/tmp/file.tar.gz"
%dir "/usr/"
%dir "/usr/share/"
%dir "/usr/share/doc/"
%dir "/usr/share/doc/frontend/"
"/usr/share/doc/frontend/README.Debian"
"/usr/share/doc/frontend/changelog.Debian.gz"
"/usr/share/doc/frontend/copyright"
1
Bastian Nanchen

UPDATE:発生している問題は、スペックファイルのBuildroot:タグにあります。

最新のシステム(およびおそらくあなたのシステムを含む)では、スペックファイルのBuildroot:はサポートされなくなり、無視されるようになりました。

LinuxQuestionsに関するこの投稿 を参照してください:

Fedora(F-10以降)は、仕様にBuildRootタグが存在する必要はなく、定義されている場合は無視されます。

Rpmbuildに--buildroot引数を渡して、/home/<package_dir>を使用することで、これを回避できます。 (これにより、ビルドの完了後にこれらのコンテンツが削除されるなどの悪影響が生じる可能性があります。これは明らかに現在のデフォルトでもあります。)

実際、rpmbuildと明示的な--buildrootを渡すことは、 このコミット でわかるように、rpm4.7.0がBuildroot:を無視し始めてからalienが始めたことです。


Specfileは、実際にはソースをインストールしたり、ファイルを作成したりしていません。

%installセクションで発生するのは、(空の)/usr/share/doc/frontend/ディレクトリを作成することだけです。

スペックファイルはBuildroot: /home/<package_dir>を指定することから始まるので、ディレクトリが以前に設定されていることを期待していたので、rpmbuildステップは、そこからすでにステージングされたコンテンツを取得してパッケージ化するだけで済みます。

同じ.debからalienを再度実行すると(つまり、最初からやり直す)、たとえば次のように入力された/home/<package_dir>が得られますか。 srv/tmp/file.tar.gz?その場合、その時点で実行すると、rpmbuildが機能します。

Rpmbuildの一部のマクロがrpmのビルド後に%{buildroot}をクリーンアップしている可能性があります(ただし、通常はスペックファイルに%cleanセクションが必要なため、これは珍しいことです)。最初の(成功した)rpmbuildの直後に、/home/<package_dir>の下のファイルがなくなった場合、説明したように、rpmbuildのそれ以上の実行は失敗します...

0
filbranden