如何在Linux中创建RPM包?

日期: 2011-05-02 作者:Sander van Vugt翻译:Dan 来源:TechTarget中国 英文

为了在Linux系统中管理软件,Linux的各种版本都使用软件包。软件包的好处就是,在安装过程中系统会追踪那些安装文件,这使得日后进行管理更加简单。在把定制软件添加到你的Linux服务器之前,把它捆绑成一个RPM包会是一个好主意。本文中,你将学习如何创建自己的RPM包。

  RPM是Red Hat Enterprise Linux和SUSE Linux Enterprise Server以及它们衍生版本默认的包格式。如果你想在多台Linux服务器上安装定制软件,创建一个RPM包很有用。把这个RPM包放在资料库中,所有能够连接到这个资料库的服务器以后更新软件时会更加方便。   RPM包包含两个文……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

为了在Linux系统中管理软件,Linux的各种版本都使用软件包。软件包的好处就是,在安装过程中系统会追踪那些安装文件,这使得日后进行管理更加简单。在把定制软件添加到你的Linux服务器之前,把它捆绑成一个RPM包会是一个好主意。本文中,你将学习如何创建自己的RPM包。

  RPM是Red Hat Enterprise Linux和SUSE Linux Enterprise Server以及它们衍生版本默认的包格式。如果你想在多台Linux服务器上安装定制软件,创建一个RPM包很有用。把这个RPM包放在资料库中,所有能够连接到这个资料库的服务器以后更新软件时会更加方便。

  RPM包包含两个文件:一个shell脚本以及一个README文件,README文件描述了如何使用该shell脚本。如果你能创建有两个文件的软件包,那么你也可以创建更大的软件包。

  创建简单RPM包的过程

  请注意,特定任务的用户帐户之间有明确的区别。如果会有错误发生,那么请使用普通用户帐户,你如果使用根用户帐户进行操作则可能会让你意外地抹去磁盘中的许多文件。请按照以下过程建立自己的RPM包:

  1.创建一个目录结构,把RPM包所需要的文件包含进去。这个结构的名字通常以RPM包的名字命名,包括它的版本号。这个目录放在什么地方关系不大。在这个例子中,它处于当前用户帐户的home目录下。我们把这个目录命名为test-1.0。下面的命令告诉你如何创建并命名这个目录,已经如何把所需要的文件放在里面:

$ mkdir ~/test-1.0
$ cd ~/test-1.0
$ echo echo this is a test > test.sh
$ chmod +x test.sh
$ echo just launch the script > README

  2.现在,RPM包所需要的全部文件都在这里了。下一步就是创建一个包含RPM文件的.tar.gz文件。这个目录还让创建档案文件更加简单。该.tar.gz文件需要位于名为rpmbuild/SOURCES的目录下---这个文件夹通常也位于当前用户的home目录中。你还需要一个.specs文件,这个文件包含所有建立RPM包的规范说明。该.specs文件是RPM包的核心组件,里面包括全部文件的指示,RPM包中的文件按照这些指示进行安装。该.specs文件应该放置在一个SPECS目录下。

  第一个cd命令确保rpmbuild目录位于当前用户的home目录下。请以普通用户身份执行以下命令:

$ cd
$ mkdir -p ~/rpmbuild/SOURCES
$ mkdir -p ~/rpmbuild/SPECS
$ tar -cvzf ~/rpmbuild/SOURCES/test-1.0.tar.gz test-1.0


  3.现在文件都各就各位,请以普通用户身份创建一个说明文件。Rpmbuild命令将会找到所有需要的指示来创建该文件。在最近的Red Hat和衍生版本中,创建说明文件很容易:只需要用vim编辑器创建一个包含所有内容的文件,扩展名设为.spec即可。下面是test-1.0rpm包中该文件的样子(模板改变的地方已用粗体标出):

Name名称:               test测试
Version 版本:            1.0
Release发布:           1%{?dist}
Summary摘要:         A test package一个测试包
Group分类:              Test Packages 测试包
License许可证:            GPL
URL:                 http://test.example.com
Source0:           %{name}-%{version}.tar.gz
BuildRoot:        %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires:   /bin/rm, /bin/mkdir, /bin/cp
Requires:          /bin/bash, /bin/date
%description


  部署单一文件包的演示

%prerp
%setup –q

%build
#configure
#make %{? _smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT

#make install DESTDIR=$RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/usr/local/bin
cp myscript $RPM_BUILD_ROOT/usr/local/bin

%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-root,root,-)

#%doc
%attr(0755,root,root)/usr/local/bin/myscript

%changelog

* Today
- Creation of initial RPM


  你需要记住几件事。前缀为a%的所有条目都是内部宏。为了简单演示,其中有些宏已经禁用。这些条目中最重要的是%configure和%make宏,必须在他们名字的前面加上a #并把%去掉,以便禁用这些宏。

  开始的宏很清楚,不需要做任何说明。最重要的宏是Source0定义。它被定义为%{name}-%{version}.tar.gz,而且必须与你之前创建的tar ball名字完全一致。

  另外一个元素是BUILD_ROOT。这是自动生成的环境,rpmbuild命令将会利用这个环境做自己的工作。请记住,BUILD_ROOT是自动消失的。这是为什么在创建RPM包时不使用根用户的原因。%build部分也可以用于诸如软件编译之类的工作。

  在%install部分中,你之前创建的脚本被复制。在这个例子中,只需要一个简单的cp命令就可以了,但是对于更加复杂的软件包来说,这些任务将会非常复杂。

  该.spec文件的最后一部分内容是%attr宏,它把权限模式设置为0755,并让根用户和root组成为安装文件的主人。

  现在.spec文件创建完成,是时候完成最终的工作了。请使用根目录用户身份安装rpmbuild命令。在Red Hat中,请用yum install rpm-build完成这项工作。接下来,请确保所有的文件都呆在正确的地方。Tar存档文件必须位于创建软件包的当前用户帐户的~/rpmbuild/SOURCES 目录下,demo.spec文件必须位于~/rpmbuild/SPECS目录下。现在你可以用rpmbuild -ba test.spec命令来创建软件包了。这会在~/rpmbuild/RPMS目录下创建你的RPM文件。

相关推荐