Problemas com a criação de pacotes RPM no Red Hat Enterprise Linux

Problemas com a criação de pacotes RPM no Red Hat Enterprise Linux

Estou tentando criar um pacote RPM com alguns arquivos de exemplo C e C++ básicos antes de tentar criar o pacote com software em meu trabalho que está sendo executado no Red Hat Enterprise Linux 6, mas estou tendo problemas.

Aqui está meu exemplo de programa 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;
}

E aqui está o makefile que estou usando:

all: main

c: main

main:
    gcc main.c -o c

clean:
    rm c

O programa C e makefile estou criando um arquivo compactado chamado "c.tar.gz"

E aqui está o arquivo de especificações que estou tentando 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

Então eu insiro o seguinte comando no diretório SPECS:

rpmbuild -ba c.spec

Então recebo a seguinte saída desse 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)

Agora, olhando para esta saída, parece que ele está removendo c-0.1 e seu conteúdo e, em seguida, tentando alterá-lo com cd após a exclusão, então não sei por que isso faria isso, ou a pasta c-0.1 nunca é criado em primeiro lugar e/ou é criado e depois excluído.

No entanto, quando executo este comando na linha de comando para criar o arquivo rpm, não há erro:

rpm -bs c.spec

saída deste comando:

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

Em seguida, execute este comando na linha de comando do diretório rpm/SRPMS:

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

E então obtenha esta saída:

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

No entanto, não consigo encontrar um executável chamado c depois de executar esta operação. Estou tentando instalar o programa de exemplo como um programa C simples e, em seguida, compilar o arquivo main.c em um executável, mas isso não parece funcionar como um pacote rpm, no entanto, o programa C compila perfeitamente ao executar o make diretamente no arquivo main.c e produz corretamente um executável, mas não consigo fazer isso também com um pacote rpm. Acho que estou perdendo algo realmente simples. Obrigado pela ajuda.

Responder1

Seu primeiro erro é porque %setupespera alguma estrutura. Você pode alterar a forma como cria um tarball (vejahttps://rpm-packaging-guide.github.io/#preparing-source-code-for-packaging) ou altere o comportamento de %setup usando argumentos (vejahttp://ftp.rpm.org/max-rpm/s1-rpm-inside-macros.html).

Em sua parte porém, você crioufontepacote. Que contém apenas spec e tarball (tente executar rpm -qpl /net/users/mworkman/rpm/SRPMS/c-0.1-1.src.rpm). It get installed intoo diretório ~/rpmbuild/` e não é rastreado em rpmdb.

informação relacionada