首頁 > 軟體

RPM包建立入門

2020-06-16 18:08:09

目錄:

指定新的工作區_topdir
在工作區建立工作目錄
建立SPEC檔案
建立原始檔
編譯RPM包
檢視生成的RPM包類容
安裝和解除安裝生成的RPM包
SPEC檔案中的一些重要欄位

指定新的工作區_topdir

預設的工作區為/usr/src/RedHat;通過組態檔rpmmacros指定:

cat>>~/.rpmmacros<<end > %_topdir /root/helloworld > end

這個設定也可以用命令列來指定:

rpmbuild --define "_topdir /root/helloworld" 

在工作區建立工作目錄

mkdir -p /root/helloworld/{RPMS,SRPMS,BUILD,SOURCES,SPECS}
工作目錄解釋:

  1. helloworld/BUILD: 命令rpmbuild將在這個目錄下解壓原始檔,並在這個目錄下編譯程式
  2. helloworld/SPECS: 存放spec檔案spec files
  3. helloworld/SOURCES: 存放原始碼包source files
  4. helloworld/SRPMS: 存放包含原始碼的rpm檔案
  5. helloworld/RPMS: 存放包含二進位制的rpm包檔案

建立SPEC檔案

helloworld/SPECS/hello.spec:

Summary: hello world rpm package Name: hello Version: 0.1 Release: 1 Source: %{name}-%{version}.tar.gz License: GPL Packager: amoblin Group: Application/System BuildRoot: %{_topdir}/root/ %description This is a software for making your life more beautiful! %prep rm -rf $RPM_BUILD_DIR/%{name}-%{version} zcat $RPM_SOURCE_DIR/%{name}-%{version}.tar.gz | tar -xv %build cd %{name}-%{version} gcc -o hello hello.c %install rm -rf %{buildroot} mkdir -p %{buildroot}/usr/local/bin/ cd %{name}-%{version} cp hello %{buildroot}/usr/local/bin/hello %files /usr/local/bin/hello

建立原始檔

hello.c:

#include <stdio.h> int main() { printf("Hello, World!n"); return 0; }

把原始檔打包放到SOURCES目錄下

mkdir -p hello-0.1 mv hello.c hello-0.1 tar czvf hello-0.1.tar.gz hello-0.1 mv hello-0.1.tar.gz /root/helloworld/SOURCES/

編譯RPM包

#編譯rpm rpmbuild -vv -ba helloworld/SPECS/hello.spec #或者通過命令列指定topdir編譯 rpmbuild --define "_topdir /root/helloworld" -vv -ba helloworld/SPECS/hello.spec #驗證SPEC rpmbuild --define "_topdir /root/helloworld" -vv -bl helloworld/SPECS/hello.spec

檢視生成的RPM包類容:

[root@localhost ~]# rpm -qpil helloworld/RPMS/i386/hello-0.1-1.i386.rpm

安裝和解除安裝生成的RPM包

[root@localhost ~]# rpm -iv helloworld/RPMS/i386/hello-0.1-1.i386.rpm Preparing packages for installation... hello-0.1-1 [root@localhost ~]# hello Hello, World! [root@localhost ~]# rpm -ev hello-0.1-1

SPEC檔案中的一些重要欄位:

  1. Group: 需要需先定義[less /usr/share/doc/rpm-*/GROUPS]
  2. BuildRoot: 安裝階段install的根目錄(在%build階段之後). 預設的根目錄是 %{_topdir}/BUILDROOT/
  3. %prep: prepare準備階段呼叫的shell指令碼
  4. %build: build編譯階段呼叫的shell指令碼
  5. %install: install安裝階段候呼叫的shell指令碼
    注意: 執行%prep, %build, %install 的shell指令碼的pwd目錄為/root/helloworld/BUILD
  6. %files: 指定生成的二進位制RPM包中包含哪些檔案,這些檔案必須在BuildRoot目錄下存在

如何在Linux中建立RPM包?  http://www.linuxidc.com/Linux/2012-05/60278.htm


IT145.com E-mail:sddin#qq.com