主要从事Linux,云原生架构改造,服务网格,ELK,python,golang等相关技术。
分类: 系统运维
2014-11-05 19:08:13
一 RPM介绍
RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理;现在应为RPM Package Manager的缩写。在Fedora 、Redhat、Mandriva、SuSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用; RPM包中除了包括程序运行时所需要的文件,也有其它的文件;一个RPM 包中的应用程序,有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系。
二 RPM包分类
1 二进制类包,包括rpm安装包(一般分为i386和x86等几种)和调式信息包等。
2 源码类包,源码包和开发包应该归位此类。
三 RPM包制作介绍
四 RPM包制作过程
1 准备打包环境
#yum install rpmbuild
~/rpmbuild
~/rpmbuild/SOURCES
~/rpmbuild/SPECS
~/rpmbuild/BUILD
~/rpmbuild/RPMS
~/rpmbuild/RPMS/i386
~/rpmbuild/SRPMS
如果你的用户目录主目录下没有类似目录结构,你可以通过一个工具软件来自动配置和生成,如下。
#yum install rpmdevtools
下了运行自动配置命令自动生成如上目录,并配置一些必要操作。
#rpmdev-setuptree
rpmdev-setuptree命令默认将再当前用户主目录下创建一个RPM构建根目录结构,
如果需要改变次默认位置,可以修改配置文件:~/.rpmmacros中变量_topdir对应
的值即可。
2 撰写SPEC文档
Summary: hellorpm is a test program。
#软件包的名字
Name: hellorpm
#软件包的主版本号
Version: 2.2.6
#软件包的次版本号
Release: 1
#源代码包,默认将在上面提到的SOURCES目录中寻找
Source0: %{name}-%{version}.tar.gz
#授权协议
License: GPL
#定义临时构建目录,这个地址将作为临时安装目录在后面引用
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
#软件分类
Group: Development/Tools
#软件包的内容介绍
%description
The hellorpm program is a test.
#表示预操作字段,后面的命令将在源码代码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/hellorpm将出现在软件包中
/usr/local/bin/hellorpm
#声明并设置文件属性
%doc %attr(0444,root,root) /usr/local/man/man1/hellorpm.1
#同上,声明文档文件
%doc README
这个文档需要说明的一点:
BuildRoot:%{_tmppath}/%{name}-%{version}-%{release}-root
上面BuildRoot变
量表示的是源码的临时按照目录,rpmbuild就是通过次目录获得将要按照到系统中的所有文件,而在SPEC文档后面make install
命令中的参数DESTDIR=$RPM_BUILD_ROOT即是对该参数的引用,这个参数将传给Makefile文件一告诉自动构建工具应该安装文件那
里(实际上我再前文提到过的Makefile需要作一些改造以适应RPM的构建就包括此操作,你的Makefile文件中至少要知道在RPM构建过程中引
用此参数的值去控制安装操作的目标)。
如上一个简单的SPEC文档撰写完成,下面把一个名为hellorpm-2.2.6.tar.gz的源码压缩文件放到 rpmbuild根目录下的SOURCES目录下(注,确保此归档文件解压后的目录为hellorpm-2.2.6, 否则会有问题)。 到此一个完整的rpm打包环境已经构建完成,下面我们就可以开始构建二进制和源代码RPM包。
3 构建RPM包
构建RPM包是有命令rpmbuild在SPEC的指导下完成。
开始构建操作,首先进入到当前用户的rpmbuild根目录(即上面提到的目录环境)。
#cd ~/rpmbuild/
执行如何命令,-ba表示build all,即生成包括二进制包和源代码包的所有RPM包,下来如果正常的话,rpmbuild将正常退出,同时在RPMS目录和SRPMS目录中将生成对应的RPM包。
#rpmbuild -ba SPECS/hellorpm.spec
这里仅仅介绍了一个最简单软件的最简单的RPM的打包操作过程,诸如带有共享文件的需要进行复杂配置的具有复杂依赖关系的等等的项目的打包以及后期的维护,包括补丁的制作我将在下来的时间完成补充更新,今天时间不早了,该休息了!
RPM 的介绍和应用(北南兄)
http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part3/ 用 RPM 打包软件
http://hlee.javaeye.com/blog/343499 RPM包rpmbuild SPEC文件深度说明