普通用户情况下,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