RPM软件包的制作
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文件的例子,原型来自于<<Linux程序设计(第3版)>>。先要把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: [email protected]
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:只建立源代码软件包
转载于:https://my.oschina.net/abcijkxyz/blog/723078
上一篇: rpm | 升级软件包
下一篇: 使用yum管理RPM软件包