在 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 中未追蹤它)。

相關內容