私は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"
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のそれ以上の実行は失敗します...