Red Hat Enterprise Linux 6で動作しますが、問題のあるソフトウェアでパッケージを作成する前に、いくつかの基本的なCおよびC ++サンプルファイルを使用してRPMパッケージを作成してみました。
私のCプログラムの例は次のとおりです。
// main.c - file for testing rpm packages
#include <stdio.h>
void functionone() {
printf("C function one!\n\n");
}
void functiontwo() {
printf("C function two!\n\n");
}
int main()
{
printf("\nBegin...\n\n");
functionone();
functiontwo();
printf("End...\n\n");
return 0;
}
これは私が使用しているメイクファイルです:
all: main
c: main
main:
gcc main.c -o c
clean:
rm c
私が作成したCプログラムとmakefileは、「c.tar.gz」という名前の圧縮ファイルです。
使用する仕様ファイルは次のとおりです。
Name: c
Version: 0.1
Release: 1
Summary: Example C application for testing rpm packaging
License: GPLv3
URL: https://example.com/%{name}
Source0: c.tar.gz
BuildRequires: make
%description
Example C program for rpm package
%prep
%setup -q
%build
make
%install
%make_install
%files
SOURCES/main.c
SOURCES/makefile
SOURCES/c
%changelog
* Mon Mar 9 2020 Michael G. Workman <[email protected]>
- first c program package
次に、SPECS ディレクトリに次のコマンドを入力しました。
rpmbuild -ba c.spec
次に、コマンドから次の出力を取得します。
+ umask 022
+ cd /net/users/mworkman/rpm/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /net/users/mworkman/rpm/BUILD
+ rm -rf c-0.1
+ /usr/bin/gzip -dc /net/users/mworkman/rpm/SOURCES/c.tar.gz
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd c-0.1
/net/users/mworkman/rpm/tmp/rpm-tmp.Lhyj19: line 38: no such file or directory
error: Bad exit status from /net/users/mworkman/rpm/tmp/rpm-tmp.Lhyj19 (%prep)
Bad exit status from /net/users/mworkman/rpm/tmp/rpm-tmp.Lhyj19 (%prep)
今この出力を見ると、c-0.1とその内容を削除してから削除してからcdに変更しようとしているように見えますが、なぜこれが起こるのかわかりません。 c-0.1フォルダは決して作成されません。最初の場所または削除します。
ただし、rpmファイルを生成するためにコマンドラインからこのコマンドを実行すると、エラーは発生しません。
rpm -bs c.spec
このコマンドの出力は次のとおりです。
Wrote: /net/users/mworkman/rpm/SRPMS/c-0.1-1.src.rpm
次に、rpm / SRPMSディレクトリのコマンドラインから次のコマンドを実行します。
rpm -ivh c-0.1-1.src.rpm
次の出力を取得します。
1:c ################################ [100%]
ところで、これを実行してみると、cという実行ファイルが見つからず、サンプルプログラムを簡単なCプログラムでインストールした後、main.cファイルを実行ファイルにコンパイルしてみましたが、これはできないようです。 rpmパッケージの場合、main.cファイルから直接makeを実行するとCプログラムが正しくコンパイルされ、実行可能ファイルが正しく生成されますが、rpmパッケージを使用するとこれを行うことはできません。私は非常に単純なものを見逃していると思います。ご協力ありがとうございます。
答え1
最初の間違いは%setup
構造が必要だからです。タールボールの作成方法を変更できます(参照https://rpm-packaging-guide.github.io/#preparing-source-code-for-packaging)またはパラメータを使用して%setupの動作を変更します(参照:http://ftp.rpm.org/max-rpm/s1-rpm-inside-macros.html)。
しかし、あなたはあなたが作った源泉パック。これには仕様とtarballのみが含まれています(rpm -qpl /net/users/mworkman/rpm/SRPMS/c-0.1-1.src.rpm). It get installed into
〜/ rpmbuild / `ディレクトリを実行してみましたが、rpmdbでは追跡されません)。