RPM包制作

制作RPM包,可以方便日后的维护。统一了标准

  1. yum install rpmdevtools

    安装后,使用 rpmdev-setuptree命令创建rpm包的目录结构。默认是在$HOME下rmpbuild下,也可以通过~/.rpmmacros配置。

  2. SPEC文档是制作rpm包的核心。
  3. 下面是从fedora中copy过来的
  4. 新建一个 .spec 文件
    
    现在,您需要在 ~/rpmbuild/SPECS 目录下,新建一个 SPEC 文件。文件应命名为 "软件包名.spec"。名称根据软件包名或通用名填写即可。但是,必须要遵守 软件包命名规定。
    
    模板和实例
    模板
    如果您首次创建 .spec 文件,vim 或 emacs 会自动生成模板:
    
     $ cd ~/rpmbuild/SPECS
     $ vim program.spec
    示例(仅供参考):
    
    Name:
    Version:
    Release:    1%{?dist}
    Summary:
    Group:
    License:
    URL:
    Source0:
    BuildRoot:    %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
    
    BuildRequires:
    Requires:
    
    %description
    
    %prep
    %setup -q
    
    %build
    %configure
    make %{?_smp_mflags}
    
    %install
    rm -rf %{buildroot}
    make install DESTDIR=%{buildroot}
    
    %clean
    rm -rf %{buildroot}
    
    %files
    %defattr(-,root,root,-)
    %doc
    
    %changelog
  5. 里面的参数该怎么写:
  6. "#" 字符表示注释,但需要避免注释宏(以 % 开头),因为它们会首先被替换展开。使用 %% 注释宏。另外,还要避免在脚本命令的相同行中使用行内注释。

    以下介绍了主要的标签。注意 %{name}%{version} 和 %{release} 代表 Name, Version 和 Release 这三个标签。只要更改标签,宏就会使用新值。

    • Name: 软件包名,应与 SPEC 文件名一致。命名必须符合 软件包命名规定
    • Version: 上游版本号。请查看 版本标签规定。如果包含非数字字符,您可能需要将它们包含在 Release 标签中。如果上游采用日期作为版本号,请考虑以:yy.mm[dd] (例如 2008-05-01 可变为 8.05) 格式作为版本号。
    • Release: 发行编号。初始值为 1%{?dist}。每次制作新包时,请递增该数字。当上游发布新版本时,请修改 Version 标签并重置 Release 的数字为 1。具体参考打包规定中的 Release 标签部分,以及 Dist tag
    • Summary: 一行简短的软件包介绍。请使用美式英语。请勿在结尾添加标点!
    • Group: 指定软件包组,例如 "Applications/Engineering";执行 "less /usr/share/doc/rpm-*/GROUPS" 查看完整的组列表。任何包含文档的子软件包,使用 "Documentation" 组(如 kernel-doc)。注意 Fedora 17+ 后已废除此标签。Spec 文件参考手册 有介绍
    • License: 授权协议,必须是开源许可证。请不要使用旧的 Copyright 标签。协议采用标准缩写(如 "GPLv2+")并且描述明确(如, "GPLv2+" 表示 GPL 2 及后续版本,而不是 "GPL" 或 "GPLv2" 这种不准确的写法)。参考 Licensing 和 Licensing Guidelines。如果一个软件采用多个协议,可以使用 "and" 和 "or"(例如 "GPLv2 and BSD")来描述。
    • URL: 该软件包的项目主页。注意:源码包 URL 请使用 Source0 指定。
    • Source0: 软件源码包的 URL 地址。"Source" 与 "Source0" 相同。强烈建议提供完整 URL 地址,文件名用于查找 SOURCES 目录。如果可能,建议使用 %{name} 和 %{version} 替换 URL 中的名称/版本,这样更新时就会自动对应。下载源码包时,需要 保留时间戳。如果有多个源码包,请用Source1Source2 等依次列出。如果你需要添加额外文件,请将它们列在后面。更多特殊案例(如 revision control),请参考 Source URL
    • Patch0: 用于源码的补丁名称。如果你需要在源码包解压后对一些代码做修改,你应该修改代码并使用 diff 命令生成 patch 文件,然后放在 ~/rpmbuild/SOURCES 目录下。一个 Patch 应该只做一种修改,所以可能会包含多个 patch 文件。
    • BuildArch: 如果你要打包的文件不依赖任何架构(例如 shell 脚本,数据文件),请使用 "BuildArch: noarch"。RPM 架构会变成 "noarch"。
    • BuildRoot: 在 %install 阶段(%build 阶段后)文件需要安装至此位置。Fedora 不需要此标签,只有 EPEL5 还需要它。默认情况下,根目录为 "%{_topdir}/BUILDROOT/"。
    • BuildRequires: 编译软件包所需的依赖包列表,以逗号分隔。此标签可以多次指定。编译依赖 不会 自动判断,所以需要列出编译所需的所有依赖包。常见的软件包可省略,例如 gcc。如果有必要,你可以指定需要的最低版本(例:"ocaml >= 3.08")。如果你需要找到包含 /EGGS 文件的软件包,可执行 "rpm -qf /EGGS"。如果你需要找到包含 EGGS 程序的软件包,可执行 "rpm -qf `which EGGS`"。请保持最小依赖(例如,如果你不需要 perl 的功能,可使用 sed 代替),但请注意,如果不包含相关依赖,某些程序会禁用一些功能;此时,你需要添加这些依赖。Package-x-generic-16.pngauto-buildrequires 软件包可能会有帮助。
    • Requires: 安装软件包时所需的依赖包列表,以逗号分隔。请注意, BuildRequires 标签是编译所需的依赖,而 Requires 标签是安装/运行程序所需的依赖。大多数情况下,rpmbuild 会自动探测依赖,所以可能不需要 Requires 标签。然而,你也可以明确标明需要哪些软件包,或由于未自动探测所需依赖而需要手动标明。
    • %description: 程序的详细/多行描述,请使用美式英语。每行必须小于等于 80 个字符。空行表示开始新段落。使用图形安装软件时会重新格式化段落;以空格开头的行被视为已格式化的格式,一般使用等宽字体显示。参考 RPM Guide
    • %prep: 打包准备阶段执行一些命令(如,解压源码包,打补丁等),以便开始编译。一般仅包含 "%autosetup";如果源码包需要解压并切换至 NAME 目录,则输入 "%autosetup -n NAME"。查看 %prep 部分了解更多信息。
    • %build: 包含构建阶段执行的命令,构建完成后便开始后续安装。程序应该包含有如何编译的介绍。查看 %build 部分了解更多信息。
    • %install: 包含安装阶段执行的命令。命令将文件从 %{_builddir} 目录安装至 %{buildroot} 目录。查看 %install 部分了解更多信息。
    • %check: 包含测试阶段执行的命令。此阶段在 %install 之后执行,通常包含 "make test" 或 "make check" 命令。此阶段要与 %build 分开,以便在需要时忽略测试。
    • %clean: 清理安装目录的命令。此阶段在 Fedora 中是多余的,仅针对 EPEL。一般只包含:
    rm -rf %{buildroot}
    
    • %files: 需要被打包/安装的文件列表。查看 %files 部分了解更多信息。
    • %changelog: RPM 包变更日志。请使用示例中的格式。注意,不是软件本身的变更日志。
    • ExcludeArch: 排除某些架构。如果该软件不能在某些架构上正常编译或工作,通过该标签列出。
    • ExclusiveArch: 列出该软件包独占的架构。

放置源代码

把一个名为devrpm-0.0.1.tar.gz的源码压缩文件放到rpmbuild根目录下的SOURCES目录下(注,确保此归档文件解压后的目录为devrpm-0.0.1,否则会有问题)。

到此一个完整的rpm打包环境已经构建完成,下面我们就可以开始构建二进制和源代码RPM包。

构建RPM包

构建RPM包是有命令rpmbuild在SPEC的指导下完成。

开始构建操作,首先进入到当前用户的rpmbuild根目录(即上面提到的目录环境)。

#cd ~/rpmbuild/

执行如何命令,-ba表示build all,即生成包括二进制包和源代码包的所有RPM包,下来如果正常的话,rpmbuild将正常退出,同时在RPMS目录和SRPMS目录中将生成对应的RPM包。

#rpmbuild -ba SPECS/hellorpm.spec

以上参考:https://fedoraproject.org/wiki/How_to_create_an_RPM_package/zh-cn#.E6.A8.A1.E6.9D.BF.E5.92.8C.E5.AE.9E.E4.BE.8B

      http://segmentfault.com/a/1190000002539129

原文地址:https://www.cnblogs.com/-Doraemon/p/4769552.html