Red Hat Enterprise Linux での RPM パッケージ作成に関する問題

Red Hat Enterprise Linux での RPM パッケージ作成に関する問題

職場で 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;
}

私が使用している makefile は次のとおりです。

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。tarballの作成方法を変更するか(https://rpm-packaging-guide.github.io/#パッケージ化のためのソースコードの準備) または引数を使用して %setup の動作を変更します (http://ftp.rpm.org/max-rpm/s1-rpm-inside-macros.html)。

あなたの「しかし」の部分では、ソースパッケージ。これには spec と tarball のみが含まれます ( rpm -qpl /net/users/mworkman/rpm/SRPMS/c-0.1-1.src.rpm). It get installed into~/rpmbuild/` ディレクトリを実行してみてください。rpmdb では追跡されません)。

関連情報