RPM包的制作

RPMRedhat Package Manager,现在很多distribution都在用RPM作为系统的包管理器。 所用的平台:RHEL6 64bit

制作RPM包最主要的就是写SPEC文件,完成了SPEC文件,就会用到rpmbuild命令根据SPEC文件制作RPM包。友情链接Linux rpmbuild命令

首先不要用root账号来制作RPM包,因为在制作RPM包的过程中,将会把软件编译和安装到系统中,这样可能会破坏系统。

在制作RPM包的时候,有一些准备工作要做,首先要选择一个一般账号来制作RPM包,然后建立相应的工作目录,定义相应的宏

[rpmbuilder@rhel6164 ~]$ mkdir -p rpmbuild/{BUILD,SOURCES,SPECS,RPMS,SRPMS} #我这里选用rpmbuilder这个一般账号来制作RPM包,建立相应的工作目录
[rpmbuilder@rhel6164 ~]$ cat ~/.rpmmacros #在rpmbuilder账号的home下,新建.rpmmacros文件定义_topdir变量,将会覆盖/usr/lib/rpm/macros中对_topdir的定义
%_topdir /home/rpmbuilder/rpmbuild
现在有工具可以自动完成上面的步骤

[rpmbuilder@rhel6164 ~]$ rpm -qf `which rpmdev-setuptree` #首先需要安装rpmdevtools RPM包
rpmdevtools-7.5-1.el6.noarch
[rpmbuilder@rhel6164 ~]$ rpmdev-setuptree #直接执行rpmdev-setuptree就会新建工作目录和.rpmmacros文件
[rpmbuilder@rhel6164 ~]$ ls rpmbuild/
BUILD  RPMS  SOURCES  SPECS  SRPMS
[rpmbuilder@rhel6164 ~]$ cat .rpmmacros
%_topdir      %(echo $HOME)/rpmbuild
%_smp_mflags  -j3
%__arch_install_post   /usr/lib/rpm/check-rpaths   /usr/lib/rpm/check-buildroot

当我们在开始写SPEC文件的时候,我们可以直接用命令来创建一个SPEC文件模板,或者直接从相应的目录拷贝一个模板

[rpmbuilder@rhel6164 ~]$ rpmdev-newspec #前提也是要安装rpmdevtools RPM包
Skeleton specfile (minimal) has been created to "newpackage.spec". #一个新的spec文件已经建立
[rpmbuilder@rhel6164 ~]$ ls /etc/rpmdevtools #也可以从这个目录下copy相应的spec模板来修改
devscripts.conf   spectemplate-dummy.spec    spectemplate-ocaml.spec     spectemplate-python.spec  template.init
newspec.conf      spectemplate-lib.spec      spectemplate-perl.spec      spectemplate-R.spec
rmdevelrpms.conf  spectemplate-minimal.spec  spectemplate-php-pear.spec  spectemplate-ruby.spec

前期准备工作做完了,我们就来看看制作RPM包过程中最核心部分,写SPEC文件
SPEC文件里面的tag不区分大小写,可以用%{tag_name}或者%tag_name来调用它,用下面的格式来对tag进行定义

tag_name:value

SPEC文件里面的macros区分大小写,可用%{macros_name}或者%macros_name来调用它,用下面的格式来对macros进行定义

%define macros_name value

在SPEC文件里面关于RPM包描述最重要的就是NVR,即Name-Version-Release

Name:RPM包的名字

Version:RPM包的版本号

Release:RPM包的发布的序列号,通常情况下就是表明是第几次制作的RPM包

其他一些默认的tag

Summary:RPM包的简单描述

Group:RPM包分组信息

License:RPM包的license

URL:软件主页

BuildRoot:安装所使用的”虚拟目录“,可以用$RPM_BUILD_ROOT变量来引用

Source:源码包,可以有多个源码包,Source1,Source2,可以使用FTP或者HTTP URLs来命名源码包,不会去下载源码包,仅仅方便以后查询用。

e.g.Source0:ftp://ftp.somesite.com/xxx/xxx.tar.gz

Patch:补丁源码

Requires:RPM包运行时的依赖

BuildRequires:RPM包制作时的依赖


%description:软件的详细说明,要用多行表示,不要用一行表示


SPEC文件主体分成几个部分

%prep:读取%_sourcedir目录中的源码包和patch,执行相应的解压命令,解压到%_builddir目录中

%build:读取%_builddir目录,执行相应的编译命令

%check:检查软件是否正常运行,操作目录都在%_builddir

%install:读取%_builddir目录的文件,安装到%_buildrootdir目录

SPEC文件中默认的宏和其用途

宏代码名称默认位置用途
%_specdirSPEC文件目录~/rpmbuild/SPECSRPM包配置的SPEC文件存放的目录
%_sourcedir源代码目录~/rpmbuild/SOURCES存放源代码和patch的目录
%_builddir编译目录~/rpmbuild/BUILD源代码被解压到该目录,在该目录被编译
%_buildrootdir最终安装目录~/rpmbuild/BUILDROOT%install阶段最终安装的目录
%_rpmdir标准RPM包目录~/rpmbuild/RPMS二进制RPM包存放目录
%_srcrpmdir源代码RPM包目录~/rpmbuild/SRPMS源代码PRM包存放目录


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值