RPM制做就是指改造软件源代码使之符合RPM打包要求的过程,这也能够等价为RPM源码包的制做过程,由于当你有了源码包就能够直接编译获得二进制安装包和其余任意包。数据库
依赖:工具
yum install rpmdevtools
执行 rpmdev-setuptree
将在当前用户主目录下建立一个RPM构建根目录结构ui
注:如需改变默认位置,能够修改配置文件:~/.rpmmacros
中变量_topdir
对应的值。设计
. ├── BUILD (打包过程当中的工做目录) ├── RPMS (存放生成的二进制包, 不一样硬件平台存放在不一样文件夹) ├── SOURCES (存放打包资源, 包括源码打包文件和补丁文件等) ├── SPECS (存放SPEC文档) └── SRPMS (存放生成的源码包)
SPEC撰写是打包RPM的核心, 下面是一个简单的SPEC文档, 其中包括了一些说明信息, 假设咱们须要建立一个软件项目devrpm。code
建立 devrpm.spec 文档:ip
#软件包简要介绍 Summary: build develop environment。 #软件包的名字 Name: develop environment #软件包的主版本号 Version: 0.0.1 #软件包的次版本号 Release: 1 #源代码包,默认将在上面提到的SOURCES目录中寻找 Source0: %{name}-%{version}.tar.gz #受权协议 License: GPL #定义临时构建目录,这个地址将做为临时安装目录在后面引用 BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root #软件分类 Group: Development/Tools #软件包的内容介绍 %description build local develop environment. #表示预操做字段,后面的命令将在源码代码BUILD前执行 %prep #构建BUILD环境,将解压源码压缩包到BUILD目录 %setup -q #BUILD字段,将经过直接调用源码目录中自动构建工具完成源码编译操做 %build #调用源码目录中的configure命令 ./configure #在源码目录中执行自动构建命令make make #安装字段 %install #调用源码中安装执行脚本 make DESTDIR=$RPM_BUILD_ROOT install #文件说明字段,声明多余或者缺乏都将可能出错 %files #设置文件权限属性 %defattr(-,root,root) #声明/usr/local/bin/devrpm将出如今软件包中 /usr/local/bin/devrpm #声明并设置文件属性 %doc %attr(0444,root,root) /usr/local/man/man1/devrpm.1 #同上,声明文档文件 %doc README
文档说明:资源
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
上面BuildRoot变量表示的是源码的临时按照目录,rpmbuild就是经过此目录得到将要按照到系统中的全部文件,而在SPEC文档后面make install
命令中的参数。DESTDIR=$RPM_BUILD_ROOT
便是对该参数的引用,这个参数将传给Makefile文件一告诉自动构建工具应该安装文件那里。实际上我再前文提到过的Makefile须要做一些改造以适应RPM的构建就包括此操做,你的Makefile文件中至少要知道在RPM构建过程当中引用此参数的值去控制安装操做的目标。开发
把一个名为devrpm-0.0.1.tar.gz
的源码压缩文件放到rpmbuild
根目录下的SOURCES目录下(注,确保此归档文件解压后的目录为devrpm-0.0.1,不然会有问题)。文档
到此一个完整的rpm打包环境已经构建完成,下面咱们就能够开始构建二进制和源代码RPM包。源码
构建RPM包是有命令rpmbuild在SPEC的指导下完成。
开始构建操做,首先进入到当前用户的rpmbuild根目录(即上面提到的目录环境)。
#cd ~/rpmbuild/
执行如何命令,-ba表示build all,即生成包括二进制包和源代码包的全部RPM包,下来若是正常的话,rpmbuild将正常退出,同时在RPMS目录和SRPMS目录中将生成对应的RPM包。
#rpmbuild -ba SPECS/hellorpm.spec