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

그러나 귀하는 귀하가 만든원천팩. 여기에는 사양과 tarball만 포함되어 있습니다( rpm -qpl /net/users/mworkman/rpm/SRPMS/c-0.1-1.src.rpm). It get installed into~/rpmbuild/` 디렉터리를 실행해 보았지만 rpmdb에서는 추적되지 않습니다).

관련 정보