私の目標は、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
行われました。alien
Buildroot:
今回提出してください。
仕様ファイルは実際にソースをインストールしたりファイルを生成したりしません。
このセクションで起こる唯一のことは%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実行が失敗します。