RPM打包教程
内容目录
1.Linux一般软件的安装 (1)
2.Linux包类型 (1)
3.RPM介绍 (2)
3.1.例子 (2)
3.2格式 (2)
3.3rpm支持的架构 (2)
4.RPM使用 (3)
4.1RPM的运用 (3)
4.2YUM的运用 (4)
5.RPM打包 (4)
5.1预备工作 (4)
5.1.1预装软件 (4)
5.1.2建立文件夹树 (4)
5.2.创建RPM Spec文件 (5)
5.2.1导言 (5)
5.2.2 %description区段 (5)
5.2.3 %prep 区段 (5)
5.2.4 %build区段 (5)
5.2.5 %install区段 (6)
5.2.6 %clean区段 (6)
5.2.7 %files区段 (6)
5.2.8 %changelog区段 (6)
5.3 调用rpmbuild命令编译rpm软件包 (7)
6. Fedora哦也,酷毙了~ (7)
1.Linux一般软件的安装
./cofigure
make && make install
2.Linux包类型
软件包简单的说就是像Windows下.exe或者.msi的样子的安装包。可以将编译好的二进制文件,源代码,文档等以特定格式压缩。使用软件包管理工具可以直接安装。
RPM ——RPM(Redhat Packager Manager),最初是Redhat公司引进在Redhat
Linux上的,是以自由软件许可证发布的软件。主要使用的发行版有:
RHEL,Fedora,CentOS,Mandriva,openSUSE,国内的Redflag,Qomo,还有一个值得关注的是就快出现的Meego也是用RPM的。They say they like “yum”
Deb——也有不使用RPM管理的发行版,那就是所谓的Debian系,主要是
Debian,Ubuntu,Knoppix。
Portage——是Gentoo引入的,类似与FreeBSD中的一个port的一个管理。使用下载.tarball的包在本地编译。能够产生跟高效的软件,但是相当费
电,费时。
3.RPM介绍
3.1.例子
我们先来看RPM软件包的几个例子:
kernel-2.4.18-3.i586.rpm
arch.rpm
firefox-3.6.3-1.i686.rpm
3.2格式
name-version-release.architecture.rpm
name —— 软件的名字;
version——软件的版本;
release——软件包的发行版本;
architecture——架构;
rpm——不用解释了吧。
3.3rpm支持的架构
平台包上的架构名
Intel compatible 32-bit i386, i486, i586, i686, athlon Intel compatible 64-bit ia64
HPAlpha (原Compaq) alpha, alphaev5, alphaev56, alphapca56, alphaev6, alphaev67
Sparc/Ultra Sparc (Oracle原Sun) sparc, sparcv9, sparc64
ARM armv3l, armv4b, armv4l
MIPS mips, mipsel
Power PC ppc, ppciseries, ppcpseries, ppc64 Motorola 68000 series m68k, m68kmint
SGI MIPS Sgi
IBM RS6000 rs6000
IBM S/390 i370, s390x, s390
平台无关noarch
4.RPM使用
4.1RPM的运用
rpm -i 安装
rpm -U 更新
rpm -q 查询
rpm -e 移除
4.2YUM的运用
特别强大,个人感觉比apt-get好用。根本不需要另外配合GUI。请使用man yum。
5.RPM打包
5.1预备工作
5.1.1预装软件
先確定是否安裝了必須的軟件 rpmdevtools  yum-utils
如果你本身使用src.rpm构建rpm那么,只需要
yumdownloader --source 软件名
yum-builddep XXX.src.rpm解决依赖性
rpm -Uvh XXX.src.rpm之后就一样了,到SPECS的目录下
5.1.2建立文件夹树
建立打包环境 rpmdev-setuptree
文件夹 用处
BUILD  rpmbuild命令将在这个文件夹建立软件
RPMS  rpmbuild将编译完的rpm包放在此处
SOURCES  软件的源代码
SPECS  .spec文件放在此处
SRPMS  Rpmbuild建立的src.rpm文件放在此处
注:红旗以及Qomo Linux使用非常不安全的形式,将建立软件包的目录树放置于/usr/src/下。这种以root形式的打包方法根本就是错误的!(这是现存最好的打包中文活指南
supercyper说的,我们fedora社区的牛牛)这种形式Packager必须以root形式构建软件包,make install的步骤将不知道装到什么地方去了,可能破坏系统。
5.2.创建RPM Spec文件
5.2.1导言
N ame: 软件名
Version:软件版本号
Release:包的发行号
Packager:打包的人(一般喜欢写个人邮箱)
License:使用的证书如GPLv2,BSD
URL:
Group:用于帮助图形化安装程序将Linux软件分类分开。
Summary: 软件摘要
Source0:软件tarball的名字 %{name}-%{version}.tar.g z
Requires:软件依赖的软件
Buildrequires:编译时所依赖的软件
注:Buildrequies && Requires可以以 ncurses-devel,或者ncurses-devel >= 版本号%define version XXX的形式可以创建宏,引用时%{version}
5.2.2 %description区段
对于软件的描述,可以持续多行
5.2.3 %prep 区段
一般使用%setup -q,%setup是一个RPM的宏,进行对tarball解压缩的工作。-q表示静默。
5.2.4 %build区段
ubuntu使用入门教程建立软件的工作,./configure以及make
5.2.5 %install区段
一般情况可以使用%makeinstall来安装程序,这个宏以一种非常聪明的方式直接调用makefile的install目标。
这里我们看一下手工安装所有的文件的例子:
mkdir -p $RPM_BUILD_ROOT%{_bindir}  建立一个可执行文件的目录
mkdir -p $RPM_BUILD_ROOT%{_mandir} 建立一个安装手册的目录
install -m755 myapp $RPM_BUILD_ROOT%{_bindir}/myapp
install -m755 myapp.1 $RPM_BUILD_ROOT%{_mandir}/myapp.1
将文件编译到固定的文件夹,并设置访问权限
5.2.6 %clean区段
清除其他区段产生的文件
rm -rf $RPM_BUILD_ROOT
5.2.7 %files区段
这个区段将列出所有需要包括进软件包的文件。
我们继续上面那个简单的例子:
%{_bindir}/myapp
%{_mandir}/myapp.1
使用%doc标志为文档,%post用于软件包是守护进程的情况,修改系统初始化脚本启动程序。
%files 定義了需要包括進軟件包的所有文件,要求非常嚴格
%defattr(-,root,root,-)
%doc
%{_bindir}被擴展為當前二進制目錄
%{_mandir}使用手冊
%{_datadir}數據(包括圖片等)
5.2.8 %changelog区段
写出对软件包更新的情况一般如下例所示:
* Wed Sep 16 2009 Tomas Mra z<tmra z@redhat>
- 8.14.3-8
- Use password-auth common PAM configuration instead of system-auth