Problemas con la creación de paquetes RPM en Red Hat Enterprise Linux

Problemas con la creación de paquetes RPM en Red Hat Enterprise Linux

Estoy intentando crear un paquete RPM con algunos archivos de ejemplo básicos de C y C++ antes de intentar crear el paquete con software en mi trabajo que se ejecuta en Red Hat Enterprise Linux 6, pero tengo problemas.

Aquí está mi programa C de ejemplo:

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

Y aquí está el archivo MAKE que estoy usando:

all: main

c: main

main:
    gcc main.c -o c

clean:
    rm c

El programa C y el archivo MAKE que estoy creando son un archivo comprimido llamado "c.tar.gz".

Y aquí está el archivo de especificaciones que estoy intentando usar:

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

Luego ingreso el siguiente comando en el directorio SPECS:

rpmbuild -ba c.spec

Luego obtengo el siguiente resultado de ese comando:

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

Ahora, mirando este resultado, parece que está eliminando c-0.1 y su contenido, luego intenta cambiarlo con cd después de eliminarlo, así que no estoy seguro de por qué haría eso, ya sea que la carpeta c-0.1 nunca esté creado en primer lugar, o se crea y luego se elimina.

Sin embargo, cuando ejecuto este comando en la línea de comando para crear el archivo rpm, no aparece ningún error:

rpm -bs c.spec

salida de este comando:

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

Luego ejecute este comando en la línea de comando desde el directorio rpm/SRPMS:

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

Y luego obtenga este resultado:

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

Sin embargo, no puedo encontrar un ejecutable llamado c después de ejecutar esta operación. Estoy intentando instalar el programa de ejemplo como un programa C simple y luego compilar el archivo main.c en un ejecutable, pero no parece funcionar como un paquete rpm, sin embargo, el programa C se compila bien cuando ejecuta make directamente en el archivo main.c y produce correctamente un ejecutable, pero no puedo hacerlo también con un paquete rpm. Creo que me estoy perdiendo algo realmente simple. Gracias por tu ayuda.

Respuesta1

Su primer error es porque %setupespera alguna estructura. Puede cambiar la forma en que crea un tarball (consultehttps://rpm-packaging-guide.github.io/#preparing-source-code-for-packaging) o cambiar el comportamiento de %setup usando argumentos (verhttp://ftp.rpm.org/max-rpm/s1-rpm-inside-macros.html).

En tu parte sin embargo, creastefuentepaquete. Que contiene solo especificaciones y tarball (intente ejecutar rpm -qpl /net/users/mworkman/rpm/SRPMS/c-0.1-1.src.rpm). It get installed intoel directorio ~/rpmbuild/` y no se rastrea en rpmdb.

información relacionada