rpmbuild 作用是将源码包编译成 rpm 包,或srpm包
1、使用的路径和需要的软件
书上说 rpmbuild 进行编译的路径是在 /usr/src 这个目录 ,我装好 rpm-build 这个包后并没有在这个目录 下找到 redhat 的目录 ,编译的时候也没找到这个目录 ,到是在这里找到了 ,这里不明白 为什么 ??
[root@localhost ~]# ls /root/rpmbuild/ -al total 32 drwxr-xr-x. 8 root root 4096 Jun 11 02:15 . dr-xr-x---. 25 root root 4096 Jun 12 07:40 .. drwxr-xr-x. 4 root root 4096 Jun 12 06:36 BUILD drwxr-xr-x. 2 root root 4096 Jun 12 06:40 BUILDROOT drwxr-xr-x. 3 root root 4096 Jun 12 06:40 RPMS drwxr-xr-x. 2 root root 4096 Jun 11 02:16 SOURCES drwxr-xr-x. 2 root root 4096 Jun 11 02:15 SPECS drwxr-xr-x. 2 root root 4096 Jun 12 06:40 SRPMS
各个目录 的作用:
SPECS:这个目录当中放置的是该软件的配置文件,例如这个软件的信息参数、设定项目等等都放置在这里; (但是在实际编译的时候 ,并不需要一定放在这里,spec 文件放到哪里都行)
SOURCES:这个目录放软件的原代码包文件 (*.tar.gz 的档案) 以及 config 这个配置文件;
BUILD:在编译过程中,暂存的数据会放在这个目录
RPMS:成功的编译之后,生成的 RPM 包都会放在这个目录中
SRPMS:与RPMS目录相似,成功编译之后生成的 srpm 文件会放在这里。。
2、开始编译之前要装好编译环境 ,如 gcc 之类的 这里我是这样安装 的 yum groupinstall "Development Tools"
3、编写 spec 配置文件
Summary: Messaging and membership subsystem for High-Availability Linux
Name: heartbeat
Version: 3.0.5
#Release: %{?alphatag:0.}%{specversion}%{?alphatag:.%{alphatag}}%{?dist}
Release: 1%{?dist}
License: GPLv2 and LGPLv2+
URL: http://linux-ha.org/
Group: System Environment/Daemons
Source0: heartbeat.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: glib2-devel
BuildRequires: iputils
……
整个文件以 Summary 开头,这是软件包的主要说明部分。
Name : 这是软件的名称 , 也将是RPM文件名的构成之一
Version : 软件的版本号
Release:这是该 软件的打包次数说明
License :这个软件的授权模式,我们是使用 GPL 啦!
Group:这个软件的发展团队名称
URL:该软件的官方网站
Source0/Source :这是源代码包的名称 ,也是软件的名称 ,要与 SOURCES 目录中放置的文件名相同。。
BuildRoot:编译时,使用哪个目录来暂存中间文件。
BuildRequires:编译过程中所需要的软件,编译之前需要安装上。。
Requires:表示安装这个软件还需要其它软件支持,在这里写出来,安装 RPM 包时,系统 会自动 去检查依赖关系 ,这就是依赖关系 的来源 。。
以上选项必须填写。
%package : 这个不知道什么意思
%description :该 软件的一个简短的说明
%prep:包编译之前需要做的事
%setup:就是类似解压缩的选项。。(书中说一定要写,可是我看 heartbeat 的 spec 文件中并没有写这个选项)
%build:编译,这个段落就是在谈怎样 make 编译成为可执行的程序! 你会发现在此部分的程序代码,就是 ./configure, make
%install:编译完成 (build) 之后,就是要安装啦!安装就是写在这里,也就是类似 Tarball 里面的 make install 的意思
%clean:编译不安装完毕后,必须要将一些暂存在 BuildRoot 内的数据删除才好, 因此这个时候这个 clean 的项目就重要啦
%files:该 软件安装需要 的文件都写到这里,也包括目录 ,
%changelog:这个选项,主要记录这个软件曾经的更新记录 * 表示时间, - 表示更新的详细说明
4、 rpmbuild 编译选项
rpmbuild -ba name 编译并同时产生RPM与SRPM文件
rpmbuild -bb name 仅产生 RPM 文件
5、编译过程
暂未做研究