CentOS 7 - RPMパッケージの作成中の仕様ファイル設定の問題

CentOS 7 - RPMパッケージの作成中の仕様ファイル設定の問題

私の目標は、CentOS Linux 7(Red Hat)にインストールするためにDebianパッケージをRPMパッケージに変換することです。私はAlien:を使ってこれを行いました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。その後、package:を生成しようとしましたが、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}、この部分を把握して修正することはできません。誰でも私を助けることができますか?

ありがとうございます!

修正する

これが仕様書の中核です。

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

修正する:あなたが経験している問題はBuildroot:仕様ファイルのタグにあります。

最新のシステム(おそらくあなたのシステムを含む)では、Buildroot:仕様ファイルはサポートされなくなり、今は無視されます。

バラよりLinuxの問題に関するこの記事それについて:

Fedora(F-10で始まる)は、仕様にBuildRootフラグがあることを必要とせず、定義されている場合は無視されます。

rpmbuildに引数を渡すことでこの問題を解決できます--buildroot/home/<package_dir>(これはビルドが完了した後に削除するなど、望ましくない副作用がある可能性があり、これは現在のデフォルトでもあります。)

実際、rpmbuildと明示的な配信は、見てわかるように、rpm 4.7.0がそれを無視し始めてから--buildroot行われました。alienBuildroot:今回提出してください


仕様ファイルは実際にソースをインストールしたりファイルを生成したりしません。

このセクションで起こる唯一のことは%install(空の)ディレクトリを作成することです/usr/share/doc/frontend/

specfileは指定から始まるので、Buildroot: /home/<package_dir>rpmbuildステップがすでにそこからすでに準備されているものをインポートしてパッケージ化できるように、そのディレクトリが以前に入力されると予想します。

同じ.debで再度実行した場合alien(つまり、最初からやり直す)、/home/<package_dir>たとえばsrv/tmp/file.tar.gz?その場合は、この時点でrpmbuildを実行すると正常に動作します。

rpmをビルドした後、rpmbuildの一部のマクロがクリーンアップされる可能性があります%{buildroot}(通常は仕様ファイルにセクションを含める必要があるため、これはまれであると言いたいです%clean)。 、以下のファイルが/home/<package_dir>消え、この場合、説明どおりに追加のrpmbuild実行が失敗します。

関連情報