RPM打包
rpmbuild
安装rpmdevtools 的同时一同安装上rpmlint(检查包的质量)
yum install rpmdevtools rpmlint
rpmbuild --showrc:显示rpm所有的宏
rpmbuild
-ba 既生成src.rpm又生成二进制rpm
-bs 只生成src的rpm
-bb 只生二进制的rpm
-bp 执行到pre
-bc 执行到 build段
-bi 执行install段
-bl 检测有文件没包含
宏
macros都在这里:/usr/lib/rpm/macros or /usr/share/doc/rpm-[version]/macros
使用的时候:%{}
内置的macro
%{_libdir} /usr/lib
%{_bindir} /usr/bin/
%{_tmppath} /var/tmp
%_usr /usr
查看macro最简单的方法:rpm –eval [macro]
构建过程
1、默认工作路径
rpm从4.5.x版本开始,将rpmbuid的默认工作路径移动到用户家目录下的rpmbuild目录里,即$HOME/rpmbuild,并且推荐用户在制作rpm软件包时尽量不要以root身份进行操作。
关于rpmbuild默认工作路径的确定,通常由在/usr/lib/rpm/macros这个文件里的一个叫做%_topdir的宏变量来定义。
如果用户想更改这个目录名,可以在~/.rpmmacros的隐藏文件,然后在里面重新定义%_topdir,指向一个新的目录名:
%_topdir $HOME/rpmbuild
2、准备
1、准备构建目录(rpm build tree)
$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
官方网站提示:执行rpmdev-setuptree会在当前用户家目录下的rpmbuild目录(如果该目录不存在也会被自动创建)里自动建立上述目录。
目录名 宏别名 说明
BUILD %_builddir 编译rpm包的临时目录
BUILDROOT %_buildrootdir 编译后生成的软件临时安装目录。最新官网上已经不创建这个目录了!
RPMS %_rpmdir 最终生成的可安装rpm包的所在目录
SOURCES %_sourcedir 所有源代码和补丁文件的存放目录
SPECS %_specdir 存放SPEC文件的目录(重要)
SRPMS %_srcrpmdir 最终的rpm源码格式存放路径(暂时忽略掉,别挂在心上)
2、将所有用于生成rpm包的源代码、shell脚本、配置文件都拷贝到SOURCES目录里,注意通常情况下源码的压缩格式都为*.tar.gz格式
cp main-0.1.tar.gz ~/rpmbuild/SOURCES
3、准备Spec文件
%define nginx_user nginx #这是我们自定义了一个宏,名字为nginx_user值为nginx,%{nginx_user}引用
Name: main
Version: 0.1
Release: 1%{?dist} #?表示后面的dist有值就启用,没有值就舍弃
#dist根据系统版本来定义,redhat5是el5,redhat6是el6,Fedora 9就是 .fc9
Summary: Calculate sin and cos value #一行写完,不要太长;不要在末尾加句点!!RPM 不喜欢最后有个句点
Group: System Environment/Daemons #通过cat /usr/share/doc/rpm-4.8.0/GROUPS这条命令查看系统上支持的组
License: GPL
URL: http://linux.vbird.org
Source0: main-0.1.tar.gz
Source0: %{name}-%{version}.tar.gz
Source1: index.html
Source2: init.nginx
Source3: fastcgi_params
Source4: nginx.conf
#patch0: