源码包制作成rpm包
将源码包(tar包)制作成rpm 包
一、准备实验环境
实验环境 RHEL6
1.下载源码软件包:lsyncd-2.0.5.tar.gz
2.首先检查本地的编译环境和 rpm 包制作软件与相关目录是否正常
3.rhel6 下的 rpm 包制作源码所在目录/root/rpmbuild,与 rhel5 的/usr/src/RedHat/有所不同
[root@linuxidc ~]# rpmbuild lsyncd-2.0.5.tar.gz //可以生成/root/rpmbuild 目录
如 果 没 有 /root/rpmbuild 目 录 , 执 行 命 令 :rpmbuild lsyncd-2.0.5.tar.gz , 会 自 动 生 成
4.拷贝 lsyncd 源码到/root/rpmbuild/SOURCES 目录下,此时,所有子目录下只有 SOURCES 下有 lsyncd-2.0.5.tar.gz 一个文件
[root@linuxidc rpmbuild]# tree
二、生成 spec 规则文件 (rpm -qpi 查看的内容来源于此文件)
[root@linuxidc rpmbuild]# cd SPECS
[root@linuxidc SPECS]# vim lsyncd-2.0.5.spec
注意一定要用 vim 编辑才会自动生成模板文件。 该文件内容为自动生成的模板,待会根据需要手工修改,暂时保存退出即可。
1.重要部分解释
Source0: //源码名称
BuildRequires: //软件依赖关系描述(可以省略)
Requires: //该 rpm 包所依赖的软件包名称
%build //本段是建立段,所执行的命令为生成软件包服务,相当于./configure 和 make
%install //这一节主要用于完成实际安装软件必须执行的命令,这一节一般是由make install 指令构成,但是有时也会包含 cp、mv、install 等指令
%clean //这一节所描述的内容表示在完成包建立的工作之后,自动执行此节下的脚本进行附加的清除工作,这一节的内容通常简单地使用 rm -rf $RPM_BUILD_ROOT 命令,
不需要指定此节的其它内容
%files //这一节指定构成包的文件的列表,它是使用节前缀%files 表示的。此外,它还包含一系列宏控制安装后的文件属性和配置信息。,分为三类--说明文档(doc),
配置文件(config)及执行程序,也根据提示编写。%files 下列出应该捆绑到 RPM 中的文件,并能够可选地设置许可权和其它信息
2.编辑 lsyncd 的 spec 规则文件 (编辑 lsyncd-2.0.5.spec 文件,先填写可以确定的部分)
Source0: lsyncd-2.0.5.tar.gz //注意名称要写对,文件名字必须与源码一致
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT //此处没有填写完整,需根据“make install”的输出填写。
%files //此处还没有填写,后面根据提示再修改。
%changelog
//下面填写编译时间 5 月 22 日,日期格式为 date +"%a %b %d %Y",必须以*开头,以--end结尾
* Tue May 22 2012 <root@localhost>
--end
如何确定其它的参数内容呢,可以根据一下步骤,一步步填写
3.安装源码包
[root@lsyncd lsyncd-2.0.5]# ./configure //看看配置时需要依赖哪些软件包
//在配置过程中,需要的软件依赖包为 lua-devel-5.1.4-4.1.el6.i686.rpm,那么 lsyncd-2.0.5.spec
中,"BuildRequires: Requires:"软件依赖配置就可以写上 lua-devel。
[root@linuxidc lsyncd-2.0.5]# make
[root@linuxidc lsyncd-2.0.5]# make install
输出的内容就是 lsyncd-2.0.5.spec 文件中“%install”后面需要填写的内容,表示安装哪些文件到哪些路径下,但要修改格式。
1.将这一段内容中所有的/usr/local 修改为变量$RPM_BUILD_ROOT,因为制作 rpm 包时并不需要将文件安装到实际的路径,所以暂时安装在$RPM_BUILD_ROOT 中,其实就是/root/rpmbuild/BUILDROOT/lsyncd-2.0.5-1.el6.i386 这个临时目录。
2.将这一段内容中所有的单引号去掉或者换成双引号,因为要允许变量。
到现在,lsyncd-2.0.5.spec 文件中还有“%files”没有填写。%files 表示编译完成的软件到底包括那些文件,可以执行 rpmbuild -bb lsyncd-2.0.5.spec,根据提示可以得到%files 的内容。
[root@vmware1 SPECS]# rpmbuild -bb lsyncd-2.0.5.spec
在最后会有这一段关于这些文件的错误,这里列出的所有文件,就是我们需要填写入
lsyncd-2.0.5.spec 中%files 的内容。
三、到这里所有 lsyncd-2.0.5.spec 中所有内容编写完毕,再次执行 rpmbuild 命令
[root@linuxidc SPECS]# rpmbuild -ba lsyncd-2.0.5.spec
//顺利通过编译,使用-ba 生成 rpm 包和 srpm 包,查看生成的目标 rpm 包
[root@linuxidc rpmbuild]# tree *RPMS
[root@linuxidc rpmbuild]# rpm -qpi RPMS/i386/lsyncd-2.0.5-1.el6.i386.rpm
[root@linuxidc i386]# rpm -ivh lsyncd-2.0.5-1.el6.i386.rpm
[root@linuxidc i386]# rpm -qa | grep lsyncd
[root@linuxidc i386]# rpm -ql lsyncd
通过 rpm 的查询命令发现 lsyncd 的信息,都是我们之前配置的内容。