`
aoingl
  • 浏览: 86546 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

怎样 build 一个 RPM

阅读更多

  R PM 是 Red Hat 发起的一种包管理格式, 现在 Fedora, Open SUSE 都在使用 RPM 作为包管理工具。本文以一个例子介绍下如何从 source build 一个 RPM 包。

 

  所需工具:  rpmbuild

 

  笔者使用的 rpmbuild 版本是:

[lgao@lgao ~]$ rpmbuild --version
RPM version 4.9.1.3

 

  如果你没有该软件,请 Fedora 下使用以下命令安装:

[root@lgao ~]# yum install rpm-build

 

  或者 Ubuntu 下使用:

 

[root@lgao ~]# apt-get install rpm-build

 

   安装完 rpmbuild 后, 在自己用户主目录下创建以下结构:

[lgao@lgao ~]$ tree rpmbuild
rpmbuild
|-- BUILD
|-- BUILDROOT
|-- RPMS
|   |-- i386
|   `-- noarch
|-- SOURCES
|-- SPECS
|-- SRPMS
`-- tmp
 

   其中:

  • RPMS  目录保存了产生的 RPM 文件包, 根据 os arch 的不同, 可能存放在不同的子目录下。
  • SOURCES 目录保存了 build RPM 之前的 source 文件, 一般会是压缩文件。
  • SPECS 目录保存了 spec 文件, rpmbuild 就是根据这个 spec 文件进行的 build。
  • SRPMS 目录保存了 source rpm 文件, srpm 用于特殊场合的 rebuild。

 

 接下来我们以 helloworld 为例 build 一个 helloworld.rpm 出来。helloworld 的 source 在: https://github.com/gaol/helloworld

 

  我们接下来运行:

 

[lgao@lgao SOURCES]$ git clone https://github.com/gaol/helloworld.git
Cloning into 'helloworld'...
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 9 (delta 0), reused 6 (delta 0)
Unpacking objects: 100% (9/9), done.
[lgao@lgao SOURCES]$ cd helloworld/ && git archive --format=tar --prefix=helloworld-1.0.0/ 1.0.0 | xz > ../helloworld-1.0.0.tar.xz
 

  以上命令是在 ~/rpmbuild/SOURCES 目录下将 helloworld version 为 1.0.0 的代码压缩为一个文件备用。

 

  之后,我们在 ~/rpmbuild/SPECS 目录下创建 helloworld.spec 文件, 填充内容:

Name:             helloworld
Version:          1.0.0
Release:          1%{?dist}
Summary:          Hello World
Group:            Development/Libraries
License:          LGPLv2+
URL:              https://github.com/gaol/helloworld.git

# git clone https://github.com/gaol/helloworld.git
# cd helloworld/ && git archive --format=tar --prefix=helloworld-1.0.0/ 1.0.0 | xz > ../helloworld-1.0.0.tar.xz
Source0:          %{name}-%{version}.tar.xz

BuildArch:        i386

BuildRequires:    gcc

%description
The HelloWorld in C

%prep
%setup -q -n %{name}-%{version}

%build
gcc -o helloworld helloworld.c

%install

install -d -m 755 $RPM_BUILD_ROOT/usr/bin
install -m 755 helloworld $RPM_BUILD_ROOT/usr/bin/helloworld

%files
/usr/bin/helloworld

%changelog
* Mon Jun 25 2012 You Name <yName@ycomp.com> 1.0.0-1
- Initial packaging

 

 大概解释下 spec 文件:

  • Name                          不用说, 是这个 pacakge 的名字, 与文件名相符。
  • Version                       用来 build 的 source code 版本。
  • Release                      发行号。同一个版本下的多次 build, 包括一些 patch在内的变化,记录在 Release 上。
  • Group                         在 Linux 软件中属于哪个组。
  • License                       软件的版权。 必须填写。
  • URL                             软件地址。
  • Source0                       第0个 source tarball。一般注释写出如何得出该 tarball 的。
  • BuildArch                     目标 OS Arch 是什么, 一般: i386, i686_64 等。
  • BuildRequires              编译代码需要的软件, 此例中只需要 gcc。
  • %prep                          此 section 下一般把 source 从 tarball 解压出来, 如果有 patch 的话,也在此 section 下完成。
  • %build                         此 section 下完成 build 的工作
  • %install                        此 section 下把生成的文件放入 RPM 文件目录下
  • %files                          此 section 下列出 RPM 文件列表
  • %changelog                列出更改记录。

 

   创建了 spec 文件后, 运行:

rpmbuild -bb helloworld.spec
 

   如果执行成功, helloworld 的 RPM 包就会出现在 ~/rpmbuild/RPMS/i386/ 目录下。

 

 

  参考资料:

  • Maximum RPM   -   http://www.rpm.org/max-rpm/
  • RPM in Fedora  -   http://fedoraproject.org/wiki/How_to_create_an_RPM_package

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    rpm-build 建立rpm包的命令

    rpm-build 建立rpm包的命令rpm-build 建立rpm包的命令

    rpm-build-4.11.3-45.el7.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    rpm 4.11.3 版本升级

    RPM 4.11.3 是一个重要的版本更新,它提供了许多改进和修复,旨在提高系统的稳定性和性能。在这个版本升级中,我们看到几个相关的子包,它们各自服务于不同的目的: 1. **rpm-4.11.3-45.el7.x86_64.rpm**:这是RPM...

    用rpmbuilder打rpm包

    在安装了必要的工具之后,你需要设置一个工作目录结构。`rpmbuild`使用一个特定的目录树来组织构建过程中的文件。默认情况下,这些目录位于`~/rpmbuild/`,包括以下子目录: 1. **BUILD**:这个目录存放源代码解压...

    rpm-build-libs-4.11.3-45.el7.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    rpm-build-4.4.2.3

    rpm-build-4.4.2.3-18.el5.i386.rpm

    rpm-build-4.14.3-19.el8.aarch64.rpm

    官方离线安装包,亲测可用

    build-rpm-action:build-rpm-action建立一个简单的rpm包

    build-rpm-action:build-rpm-action建立一个简单的rpm包

    rpm-build-libs-4.11.3-48.el7_9.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    rpm-build-4.14.3-17.el8.aarch64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    rpm-build-4.14.3-15.el8.x86_64.rpm

    官方离线安装包,测试可用。请使用rpm -ivh [rpm完整包名] 进行安装

    rpm-build-libs-4.11.3-45.el7.i686.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    RPM Builder 将tar.gz 转成RPM

    RPM Builder 是一个工具,可以帮助用户将源代码的tar.gz文件转换为RPM格式的软件包,这样就可以在支持RPM的系统上方便地进行安装和管理。下面我们将详细讨论RPM Builder的工作原理、如何使用以及转换过程中的关键...

    build-essential.7z

    `build-essential`是一个非常关键的软件包集合,它包含了构建大多数其他源代码包所需的编译工具和库。这个`build-essential.7z`压缩包显然是为了在没有网络连接的情况下,帮助用户在Ubuntu上安装和使用GCC(GNU ...

    gradle制作rpm包

    - `gradle-ospackage-plugin`是Gradle的一个插件,提供创建RPM和DEB包的功能。这个开源插件可以从GitHub的nebula-plugins仓库获取,它使得在Gradle构建脚本中集成RPM包制作变得非常简单。 通过Gradle制作RPM包,...

    用openssh9.8源码包,制作rpm包

    以下是一个基本的指南: 1. 安装必要的工具 首先,确保你的系统上安装了RPM构建工具,主要是rpmbuild和rpmdevtools(如果可用)。这些工具通常包含在rpm-build包中。在基于RPM的Linux发行版(如Fedora、CentOS、...

    scl-utils-build-2.0.2-13.el8.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    ceph-fs-rpm-build

    Ceph是一个强大的分布式存储系统,而CephFS是其提供的一个可挂载的文件系统。 首先,我们需要了解`spec`文件。`spec`文件是RPM打包的核心,它包含了构建、安装、测试和卸载软件的所有指令。`spec`文件通常由多个...

    gcc、openssl rpm文件包

    GCC(GNU Compiler Collection)是GNU项目的一个核心组件,是一套由GNU开发的编程语言编译器集合。它支持多种编程语言,包括C、C++、Fortran、Objective-C、Ada等,广泛应用于软件开发领域。GCC不仅是一个编译器,还...

Global site tag (gtag.js) - Google Analytics