作者:李易桐,前平安科技高级运维工程师,5年互联网,游戏,电商,领域工作经验。对监控,虚拟化,自动化有一定研究,精通shell,python
在日常工作中,linux服务器中间件的安装一直是系统运维与应用运维最常遇到的工作。
一般的安装方式有三种,二进制tar包安装,源码编译安装以及rpm包安装。
其中源码编译安装及通过编译工具对源码进行二进制编译,编译安装优点可以自由选择模块,以实现中间件各种强大的功能,缺点则很明显,安装费时费力,需要消耗大量时间。
二进制tar包安装则是最方便快捷的方式。缺点则是在安装完成后,中间件启动出现问题,需要的各种依赖环境无法诊断。
Red-Hat Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分发版本都有采用。
通过将编译好的中间件制作成rpm包则可以完成我们工作中的各种需求。
一、简介
在Centos下制作RPM包是使用rpm-build工具。1.RPM生成要素:
生成rpm所用的文件列表或者源代码
根据文件列表或者源代码生成rpm规范,也就是spec文件
根据spec文件加工源码/文件的工具rpmbuild
2.制作流程:
把源码包放在正常的位置 (如果有补丁的话也一块放入)
确定依赖关系
编写spec文件,rpmbuild命令根据spec文件来制作合适的rpm包 (这一步是重点)
生成rpm包
3.rpmbuild工作目录介绍
如果你的rpm的版本<=4.4.x,那么rpmbuid工具其默认的工作路径是/usr/src/redhat,这就使得普通用户不能制作rpm包,因为权限的问题,在制作rpm软件包时必须切换到root身份才可以。所以,rpm从4.5.x版本开始,将rpmbuid的默认工作路径移动到用户家目录下的rpmbuild目录里,即$HOME/rpmbuild,并且推荐用户在制作rpm软件包时尽量不要以root身份进行操作。 rpmbuild默认工作路径的确定, 通常由在/usr/lib/rpm/macros这个文件里的一个叫做%_topdir的宏变量来定义。如果用户想更改这个目录名,rpm官方并不推荐直接更改这个目录,而是在用户家目录下建立一个名为.rpmmacros的隐藏文件,然后在里面重新定义%_topdir,指向一个新的目录名。这样就可以满足某些“高级”用户的差异化需求了。通常情况下.rpmmacros文件里一般只有一行内容,比如: %_topdir $HOME/myrpmbuild 在%_topdir目录下一般需要建立6个目录: 查看当前定义的%_topdir # 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 %(echo $HOME)/rpmbuild二、rpmbuild命令的用法
1.从spec文档建立有以下选项:
-bp #只执行spec的%pre 段(解开源码包并打补丁,即只做准备) -bc #执行spec的%pre和%build 段(准备并编译) -bi #执行spec中%pre,%build与%install(准备,编译并安装) -bl #检查spec中的%file段(查看文件是否齐全) -ba #建立源码与二进制包(常用) -bb #只建立二进制包(常用) -bs #只建立源码包2.从tarball包建立,与spec类似
-tp #对应-bp -tc #对应-bc -ti #对应-bi -ta #对应-ba -tb #对应-bb -ts #对应-bs3.从源码包建立
--rebuild #建立二进制包,通-bb --recompile #同-bi4.rpmbuild的其他参数
--buildroot=DIRECTORY #确定以root目录建立包 --clean #完成打包后清除BUILD下的文件目录 --nobuild #不进行%build的阶段 --nodeps #不检查建立包时的关联文件 --nodirtokens--rmsource #完成打包后清除SOURCES --rmspec #完成打包后清除SPEC --short-cricuit--target=CPU-VENDOR-OS #确定包的最终使用平台三、spec文件编写
1.spec文档中常用的几个宏(变量) %{_sysconfdir}: /etc %{_sbindir}: /usr/sbin %{_bindir}: /usr/bin %{_datadir}: /usr/share %{_mandir}: /usr/share/man %{_libdir}: /usr/lib64 %{_prefix}: /usr %{_localstatedir}: /usr/var 其实以上参数值都是在/usr/lib/rpm/macros文件中定义的,最好不要修改该文件的值,只需要在家目录定义自己需要的值即可。2.spec文件组成部分
spec的头部 #rpm包的一些信息
%description #rpm包的描述
%prep #预处理,解压源码,打补丁等操作
%build #执行源码包的编译,一般是./configure和make
%install #软件安装
%clean #编译安装后的清理
%files #定义要打包到rpm包的文件
%pre #安装或者升级软件前要做的事情,比如停止服务、备份相关文件等都在这里做。
%post #安装或者升级完成后要做的事情,比如执行ldconfig重构动态库缓存、启动服务等。
%preun #卸载软件前要做的事情,比如停止相关服务、关闭进程等。
%postun #卸载软件之后要做的事情,比如删除备份、配置文件等。
%changelog #软件的更新记录