2010年5月18日星期二

RPM Packager学习(3)

内容目录
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
rootfiles-7.2-1.noarch.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导言
Name: 软件名
Version:软件版本号
Release:包的发行号
Packager:打包的人(一般喜欢写个人邮箱)
License:使用的证书如GPLv2,BSD
URL: 官方网站
Group:用于帮助图形化安装程序将Linux软件分类分开。
Summary: 软件摘要
Source0:软件tarball的名字 %{name}-%{version}.tar.gz
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区段
建立软件的工作,./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 Mraz
- 8.14.3-8
- Use password-auth common PAM configuration instead of system-auth

5.3 调用rpmbuild命令编译rpm软件包
选项
作用
-ba
建立一个rpm以及一个.src.rpm
-bb
只建立二进制的rpm
-bc
编译但不构建软件包,停止在%build区段
-bp
只做到%prep区段
-bi
在%install后停止
-bl
列出rpm中的文件列表
-bs
只建立src.rpm文件

如:rpmbuild -ba ***.spec
确定平台使用 --target i686


6. Fedora哦也,酷毙了~
My Page: http://scienologies.blogspot.com
http://gnudam.webgarden.com
Fedora Project Contributor -- Ambassador
https://fedoraproject.org/wiki/User:Freakrobot
_______________________________________________
Chinese mailing list
Chinese at lists.fedoraproject.org
https://admin.fedoraproject.org/mailman/listinfo/chinese

没有评论:

发表评论