rpmbuild安装与使用

12-01 11,933 views

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

想要自定义自己的rpm包,统一管理,或者一键环境安装,就需要使用rpmbuild来进行编译。

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

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

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

首先rpmbuild环境搭建:

[root@localhost ~]# yum install pcre-devel zlib-devel openssl-devel make cmake gcc gcc-c++ bison ncurses-devel rpm-build  -y
[root@localhost home]# useradd redhat
[root@localhost home]# su – redhat
[redhat@localhost ~]$ cd redhat/
rpmbuild目录结构
mkdir -pv rpmbuild/redhat/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
#我这里选用redhat这个一般账号来制作RPM包,建立相应的工作目录
[redhat@localhost ~]$ cat ~/.rpmmacros
#在redhat账号的home下,新建.rpmmacros文件定义_topdir变量,将会覆盖/usr/lib/rpm/macros中对_topdir的定义
%_topdir /home/redhat/rpmbuild/redhat
more /usr/lib/rpm/macros |grep topdir

如果要避免生成debuginfo包:这个是默认会生成的rpm包。则可以使用下面的命令:
echo ‘%debug_package %{nil}’ >> ~/.rpmmacros

在Red Hat Linux系统上,制作RPM包的“工作车间”默认为/usr/src/redhat目录,而事实上这就是通过_topdir这个rpm宏来定义的。
如果要专门获取宏_topdir自身的相关信息,可以使用如下命令:
rpmbuild –showrc | grep “_topdir”
也可以使用rpm命令直接获取某个rpm宏的定义:
rpm –eval ‘%_topdir’
[redhat@localhost ~]$ rpmbuild –showrc |grep _usr
-14: _usr /usr
-14: _usrsrc %{_usr}/src
[redhat@localhost ~]$ rpmbuild –showrc|grep _topdir
-14: _builddir %{_topdir}/BUILD
-14: _buildrootdir %{_topdir}/BUILDROOT
-14: _rpmdir %{_topdir}/RPMS
-14: _sourcedir %{_topdir}/SOURCES
-14: _specdir %{_topdir}/SPECS
-14: _srcrpmdir %{_topdir}/SRPMS
-14: _topdir /home/redhat/rpmbuild/redhat

 

现在有工具可以自动完成上面的步骤
[root@localhost ~]# yum install rpmdevtools
[root@localhost ~]#rpm -qf `which rpmdev-setuptree` #首先需要安装rpmdevtools RPM包
rpmdevtools-7.5-2.el6.noarch
[test@localhost ~]$ rpmdev-setuptree  #直接执行rpmdev-setuptree就会新建工作目录和.rpmmacros文件
[test@localhost rpmbuild]$ ls
BUILD RPMS SOURCES SPECS SRPMS
[test@localhost ~]$ rpm –eval ‘%_topdir’
/home/test/rpmbuild[test@localhost ~]$ 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

 

PS:6.0以后直接vim  test.spec文件就会生成模板文件。

 

注意编包前查看: 
[redhat@localhost SPCES]$ rpmbuild –nobuild mysql-5.6.16.spec
error: Failed build dependencies:
pcre-devel is needed by mysql-5.6.16-1.el6.x86_64
zlib-devel is needed by mysql-5.6.16-1.el6.x86_64
openssl-devel is needed by mysql-5.6.16-1.el6.x86_64
make is needed by mysql-5.6.16-1.el6.x86_64
如果是这样就需要安装上面的包,否则后面的编译无法进行。
前期准备工作做完了,我们就来看看制作RPM包过程中最核心部分,写SPEC文件
SPEC文件里面的tag:不区分大小写,可以用%{tag_name}或者%tag_name来调用它,用下面的格式来对tag进行定义tag_name:valueSPEC文件里面的macros:区分大小写,可用%{macros_name}或者%macros_name来调用它,用下面的格式来对macros进行定义%define macros_name value在SPEC文件里面关于RPM包描述最重要的就是NVR,即Name-Version-ReleaseName: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目录

 

改变目录底层的属性方法chattr和lsattr

chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,如果Linux内核版本低于2.2,那么许多 功能不能实现。同样-D检查压缩文件中的错误的功能,需...

阅读全文

sendmail简单配置与使用

linux邮件服务器现在主流是postfix,配置也比较简单,跟ftp配置一样,这里主要记录下sendmail的简单配置.  1.安装相关的包: yum -y install sendmail sendmai...

阅读全文

域名无法解析简单的排查方法

当域名出现无法解析的情况,可以使用下面的方法进行排查: 首先安装域名排查工具 [root@localhost ~]# yum install -y jwhois 运行如下命令:查看Domain Stat...

阅读全文