How to: 制作RPM包

一、创建rpmbuild所需的目录结构(BUILD, RPMS, SOURCES, SPECS, SRPMS)。通常安装好rpm-build包后,/usr/src目录下都已经创建好了;如想在自己的目录下制作RPM,则手动创建好这几个目录即可。

[php]mkdir  /home/yourname/{BUILD,RPMS,SOURCES,SPECS,SRPMS}[/php]

BUILD:   用于编译软件包时,源码的临时存放空间。
RPMS:    制作好的二进制包的输出位置。
SOURCES:   源码的位置。
SPECS:   spec文件存放的位置。
SRPMS:   制作好的源码RPM包的输出位置,该包安装时仍需要先编译。

二、下载好软件的源码包并放入SOURCES目录中。
三、创建包配置文件spec,下面是一个样例:

[php]

/** 定义一些常量,可选 **/
%define name nginx
%define version 0.7.65

/** 设置软件包的基本信息 **/
Summary: HTTP and reverse proxy server
Name: %{name}
Version: %{version}
Release: 1
Vendor: Igor Sysoev
License: GPL
Group: System Environment/Daemons
Source: nginx-0.7.65.tar.gz
URL: <a href="http://nginx.org/">http://nginx.org/</a>

/** 软件包的描述 **/
%description
nginx is a HTTP and reverse proxy server, as well as a mail proxy server.

/** 预处理,比如解压源码包。%setup -q 是宏指令,可自动完成解包 **/
%prep
%setup -q

/** 设置编译参数及编译 **/
%build
./configure --prefix=/usr/local/webserver/nginx
make

/** 安装 **/
%install
make install
install -m 0755 nginx /etc/init.d/nginx // 指定某文件安装到某位置,可选

%clean

/** 列出RPM安装的文件和位置,同时设置文件权限 **/
%files
%defattr(-, root, root) //用宏指令定义RPM中文件默认的权限
/usr/local/webserver/nginx  //所有文件在同一主目录下时使用
%attr(-,root,root) "/etc/init.d/nginx" //设置nginx启用脚本的权限
%dir  "/usr/local/webserver/nginx" //设置nginx目录权限
%config(noreplace)  "/usr/local/webserver/nginx/conf/*.conf" //设置配置文件权限
#%doc %attr(0444,root,root) "" //设置文档文件权限

%changelog

[/php]

四、build包。

rpmbuild  -v -ba  SPECS/nginx-0.7.65.spec

输出的RPM包可在RPMS和SRPMS这两个目录下找到。

五、 检验包。如:

rpm -qpl:列出RPM软件包内的文件信息
rpm -qpi:列出RPM软件包的描述信息
rpm -Vp: 验证RPM软件包的内容

最后,对于spec文件,主要注意的是%install和%files这两个区域的设置。如果所有文件都是安装到某指定的目录,%install可直接用make install,而%files直接用/usr/local/webserver/nginx;如果文件要被安装到不同的位置,%install可使用install -m 0755 nginx /etc/init.d/nginx的形式安装,也配置mkdir之类的指令为创建必要的目录等,而%files则应该根据上面安装的文件依依做相应的条目列出。

至此,一个rpm包就基本制作完了。

转自

香草逸荷

还没有评论,快来抢沙发!

发表评论

  • 😉
  • 😐
  • 😡
  • 😈
  • 🙂
  • 😯
  • 🙁
  • 🙄
  • 😛
  • 😳
  • 😮
  • emoji-mrgree
  • 😆
  • 💡
  • 😀
  • 👿
  • 😥
  • 😎
  • ➡
  • 😕
  • ❓
  • ❗
  • 65 queries in 0.372 seconds