上一篇: rpm打包利器rpm_create简介
RPM软件包的制作要用到Tarballs源代码包。先回顾一下Tarballs软件包的制作方法:
tar cvf:打成.tar包(可再用gzip压缩成.tar.gz包)。
tar xvf:从.tar包中解包(对.tar.gz包可先用gunzip或gzip -d解压)。
注意:对于.tar.bz2型的包,使用bzip2(-d),bunzip2。
tar zcvf:直接打包压缩成.tar.gz包。
tar zxvf:直接从.tar.gz包解压。
注意:对于.tar.bz2型的包,把z选项换成j选项。
tar tvf:列出包中的内容
tar rvf:向包中追加指定文件
tar dvf:从包中删除指定文件
tar uvf:只追加比包中的原来文件更新的文件
Linux下软件包的命名格式:name-version-release.architecture.deb(.rpm等)
Tarballs软件包的命名格式:name-version.tar.gz或name-version.tgz
要制作RPM软件包,先要安装RPM软件包管理器,在RedHat/Fedora系列中一般会自带,在Ubuntu中则要自己要安装(sudo apt-get install rpm,或在新立得软件包管理器中安装)。基本的RPM命令如下:
查看软件包:rpm -qpi
安装软件包:rpm -ivh
升级软件包:rpm -Uvh
查询软件包是否已安装:rpm -qa
RPM软件包构建目录:一般为/usr/src/redhat或/usr/src/rpm(Ubuntu下)。这下面有五个目录BUILD,RPMS(里面有面向不同CPU架构的子目录athlon,i386,i486,i586, i686,noarch), SOURCES,SPECS, SRPMS
创建RPM软件包的过程:收集软件包的源文件、Makefile文件、帮助文件等放在一个name-version目录中,打成一个name- version.tar.gz源文件包,放在SOURCES目录下;创建spec文件放在SPECS目录下(也可不放在这);用rpmbuild命令建立软件包
spec文件格式:
先定义描述信息(导言):Vendor,Distribution,Name,Version,Release,Packager,License, Group。最重要的是Name、Version和Release三个,他们的值在后面一般要用到。
Vendor: 发行厂商
Distribution: 发行方式
Name: 软件包名
Version: 版本号
Release: 发行版本号
Packager: 一般为开发者的Email地址
Licence: 版权信息
Group: 应用程序分类信息,用于帮助图形化安装程序来对程序分类
定义构建信息:
Provides: 定义软件的功能
Requires: 定义依赖的其他软件包
Buildroot: 定义安装时的测试目录
Source: 定义所需源文件包名,一般为%{name}-%{version}.tar.gz
Summary: 定义软件的摘要
%description: 定义软件的描述信息
下一步定义如何建立软件包:
%prep: 定义准备工作,一般运行%setup -q设置为安静模式(即编译时不会打印编译过程的信息)
%build: 定义构建过程。一般直接用make命令,以便用源文件包的Makefile来进行构建
%install: 定义安装过程。一般直接用%makeinstall宏,表示运行Makefile中的install目标
%clean: 定义清除所有由rpmbuild命令创建的文件
%file: 指定要安装的文件,一般有可执行程序、库文件、使用手册
%post: 指定安装后要执行的命令
spec文件的常用内置宏:
%{name},%{version},$RPM_BUILD_ROOT为Buildroot指定的目录,% {_tmppath}一般为/var/tmp,%{_bindir}一般为/usr/bin,%{_mandir}一般为/usr/share/man
下面是一个spec文件的例子,原型来自于<
# myapp.spec
# 下面定义软件包的导言
Vendor: Wrox Press
Distribution: Any
Name: myapp
Version: 1.0
Release: 1
Packager: neil@provider.com
License: Copyright 2003 by Wrox Press
Group: Applications/Media
# 下面定义软件包的构建信息
Provides: goodness
Requires: mysql >= 3.23
# 定义安装时的测试目录
Buildroot: %{_tmppath}/%{name}-%{version}-root
Source: %{name}-%{version}.tar.gz
Summary: Trivial application
%description
MyApp Trivial application
A trivial application used to demonstrate development tools.
This version pretends it requires MySQL at or above 3.23.
Authors: Neil Matthew and Richard Stones
# 下面定义如何建立软件包
# 准备工作
%prep
%setup -q
%build
make
# 定义安装过程。一般直接用%makeinstall宏,表示运行Makefile中的install目标,这里定义了自己的安装过程
%install
mkdir -p $RPM_BUILD_ROOT%{_bindir}
mkdir -p $PRM_BUILD_ROOT%{_mandir}
install -m755 myapp $RPM_BUILD_ROOT%{_bindir}/myapp
install -m755 myapp.1 $RPM_BUILD_ROOT%{_mandir}/myapp.1
%clean
rm -rf $RPM_BUILD_ROOT
%post
mail root -s "myapp installed - please register" < /dev/null
# 定义要安装的文件
%files
%{_bindir}myapp
%{_mandir}/myapp.1
然后用rpmbuild -ba myapp.spec来建立RPM软件包。执行完后,在RPMS目录中就有二进制软件包myapp-1.0-1.i386.rpm,在SRPMS目录下就有源代码软件包myapp-1.0-1.src.rpm。
rpmbuild命令的一些选项:
-ba:同时建立二进制包和源代码包
-bb:只建立二进制包
-bc:只编译程序,不制作完整的RPM包
-bp:为建立一个二进制软件作好准备
-bi:创建二进制RPM软件包并且安装它
-bl:检查RPM软件包中的文件列表
-bs:只建立源代码软件包