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에서 추적되지 않습니다.