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;
}

그리고 제가 사용하고 있는 메이크파일은 다음과 같습니다:

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).

그러나 귀하의 부분에서는 귀하가 만들었습니다.원천패키지. spec 및 tarball만 포함되어 있습니다( rpm -qpl /net/users/mworkman/rpm/SRPMS/c-0.1-1.src.rpm). It get installed into~/rpmbuild/` 디렉토리를 실행해 보면 rpmdb에서 추적되지 않습니다.

관련 정보