Probleme bei der Erstellung von RPM-Paketen unter Red Hat Enterprise Linux

Probleme bei der Erstellung von RPM-Paketen unter Red Hat Enterprise Linux

Ich versuche, ein RPM-Paket mit einigen grundlegenden C- und C++-Beispieldateien zu erstellen, bevor ich versuche, das Paket mit einer Software bei meiner Arbeit zu erstellen, die unter Red Hat Enterprise Linux 6 läuft, aber Probleme hat.

Hier ist mein Beispiel-C-Programm:

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

Und hier ist das Makefile, das ich verwende:

all: main

c: main

main:
    gcc main.c -o c

clean:
    rm c

Das C-Programm und Makefile erstelle ich dann als ZIP-Datei mit dem Namen "c.tar.gz"

Und hier ist die Spezifikationsdatei, die ich verwenden möchte:

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

Anschließend gebe ich folgenden Befehl in das SPECS-Verzeichnis ein:

rpmbuild -ba c.spec

Dann erhalte ich die folgende Ausgabe von diesem Befehl:

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

Wenn man sich nun diese Ausgabe ansieht, sieht es so aus, als würde c-0.1 und sein Inhalt entfernt und dann versucht, nach dem Löschen mit cd dorthin zu wechseln. Ich bin mir also nicht sicher, warum das passiert. Entweder wird der Ordner c-0.1 nie erstellt oder er wird erstellt und dann gelöscht.

Wenn ich jedoch diesen Befehl in der Befehlszeile ausführe, um die RPM-Datei zu erstellen, tritt kein Fehler auf:

rpm -bs c.spec

Ausgabe dieses Befehls:

Wrote: /net/users/mworkman/rpm/SRPMS/c-0.1-1.src.rpm

Führen Sie dann diesen Befehl in der Befehlszeile aus dem Verzeichnis rpm/SRPMS aus:

rpm -ivh c-0.1-1.src.rpm

Und dann erhalten Sie diese Ausgabe:

1:c             ################################ [100%]

Ich kann jedoch nach dem Ausführen dieses Vorgangs keine ausführbare Datei namens „c“ finden. Ich versuche, das Beispielprogramm als einfaches C-Programm zu installieren und dann die Datei main.c in eine ausführbare Datei zu kompilieren, aber das scheint als RPM-Paket nicht zu funktionieren. Das C-Programm wird jedoch problemlos kompiliert, wenn make direkt auf der Datei main.c ausgeführt wird, und erstellt korrekt eine ausführbare Datei, aber ich kann dies nicht auch mit einem RPM-Paket tun. Ich glaube, ich übersehe etwas ganz Einfaches. Danke für Ihre Hilfe.

Antwort1

Ihr erster Fehler ist, weil %setupeine Struktur erwartet wird. Sie können entweder ändern, wie Sie ein Tarball erstellen (siehehttps://rpm-packaging-guide.github.io/#preparing-source-code-for-packaging) oder ändern Sie das Verhalten von %setup mit Argumenten (siehehttp://ftp.rpm.org/max-rpm/s1-rpm-inside-macros.html).

In Ihrem Jedoch-Teil haben SieQuellePaket. Enthält nur Spezifikation und Tarball (versuchen Sie, rpm -qpl /net/users/mworkman/rpm/SRPMS/c-0.1-1.src.rpm). It get installed intodas Verzeichnis „~/rpmbuild/“ auszuführen, es wird nicht in rpmdb verfolgt).

verwandte Informationen