普通用户情况下,rpm制作步骤如下:
创建所需目录
- $ mkdir ~/rpmbuild
- $ cd ~/rpmbuild
- $ mkdir -pv {BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
- mkdir: 已创建目录 "BUILD"
- mkdir: 已创建目录 "BUILDROOT"
- mkdir: 已创建目录 "RPMS"
- mkdir: 已创建目录 "SOURCES"
- mkdir: 已创建目录 "SPECS"
- mkdir: 已创建目录 "SRPMS
拷贝要打包的源码到SOURCES目录
- $ cp orange.tar.gz ~/rmpbuild/SOURCES/
创建spec文件
- $ cd SPECS/
- $ vim orange-agent.spec
spec文件内容如下:
- Name: orange
- Version: 0.2.1
- Release: 1%{?dist}
- Summary: orange agent rpm
-
- Group: System Environment/Daemons
- License: GPL
- Source0: %{name}.tar.gz
-
-
- %description
- It is a rpm package of orange-agent.
-
- #编译之前执行的操作(执行时当前目录是BUILD),例如解压源码,创建所需目录等,一般会直接使用%setup -q ,但特殊需要,可以自己编写,如下:
- %prep
- /bin/rm -rf orange
- mkdir -p orange
- cd orange
- tar zxf %{_topdir}/SOURCES/%{name}.tar.gz -C ./
-
-
- # 编译时执行的操作(执行时当前目录是BUILDROOT)
- %build
- cd orange/%{name}
- make %{?_smp_mflags}
-
- # 将编译后的文件放到打包目录BUILDROOT
- %install
-
- mkdir -p %{buildroot}/data/servers/orange/agent/bin
- mkdir -p %{buildroot}/data/servers/orange/agent/config
- mkdir -p %{buildroot}/data/servers/orange/agent/logs
-
- cp ${RPM_BUILD_DIR}/%{name}/bin/agent/orange-agent %{buildroot}/data/servers/orange/agent/bin
-
- cp ${RPM_BUILD_DIR}/%{name}/config/agent.json %{buildroot}/data/servers/orange/agent/config/cfg.json
-
- cp ${RPM_BUILD_DIR}/%{name}/open-orange %{buildroot}/data/servers/orange/
-
- # rpm包安装后执行的操作,例如拉起应用等等
- %post
- /data/servers/orange/open-orange start
-
-
- # 卸载前执行的操作
- %preun
- if [ "$1" == 0 ];then
- /data/servers/orange/open-orange stop agent > /dev/null 2>&1
- fi
-
- # 卸载后执行的操作
- %postun
- if [ "$1" == 0 ];then
- /bin/rm -rf /data/servers/orange/agent
- fi
-
-
- %clean
- rm -rf $RPM_BUILD_ROOT
-
- # 指定哪些文件打包的rpm中
- %files
- %defattr(-,admin,admin,-)
- /data/servers/orange/*
-
- %changelog
其中,几个宏定义如下:
- $ 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 %{getenv:HOME}/rpmbuild
-
另外,
RPM_BUILD_DIR等同于_builddir;
而buildroot不等同于_buildrootdir::
%{_buildrootdir}
~/rpmbuild/BUILDROOT
%{buildroot}
~/rpmbuild/BUILDROOT/orange-0.2.1-1.el6.x86_64
- cd /home/admin/rpmbuild
- $ rpmbuild -ba SPECS/orange-agent.spec
打包的rpm文件在RPMS目录下
rpm包的名称为:
name-version-release.dist.arch.rpm
例如
orange-0.2.1-1.el6.x86_64.rpm
安装
- $ rpm -ivh orange-agent.rpm
卸载
- $ rpm –e orange-agent