正在加载...

RPM软件包的制作

[ 2010/09/17 15:31 | by selboo ]

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程序相关的源文件 (a.h,b.h,c.h,2.c,3.c,foo.c,main.c)、Makefile文件、帮助文件(myapp.1)等放在目录myapp- 1.0中,打成myapp-1.0.tar.gz源文件包,放在SOURCES目录下。


# 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:只建立源代码软件包
Tags:
,
发表评论
表情
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]