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

这是我正在使用的 makefile:

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需要某种结构。您可以更改创建 tarball 的方式(请参阅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 中未跟踪它)。

相关内容