怎樣製作RPM包

http://netkiller.github.io/journal/rpm.html

Mr. Neo Chen (陳景峯), netkiller, BG7NYT


中國廣東省深圳市龍華新區民治街道溪山美地
518131
+86 13113668890


版權聲明

轉載請與作者聯繫,轉載時請務必標明文章原始出處和作者信息及本聲明。

文檔出處:
http://netkiller.github.io
http://netkiller.sourceforge.net

微信掃瞄二維碼進入 Netkiller 微信訂閲號

QQ群:128659835 請註明“讀者”

摘要

我在網上找RPM包的製作例子几乎都是C源碼編譯安裝然後生成RPM包, 而我的程序不是C寫的很多時候是腳本語言如Python, PHP 甚至是 HTML檔案。怎樣製作RPM包呢?


目錄

1. 為HTML手冊文檔製作RPM包

下面是一個spec檔案

保存為 doc.spec

		
Summary: Netkiller's eBook
Name: netkiller
Version: 1.0.1
Release: 1
License: CC
Group: Books/Computer books
Packager: Neo Chen <netkiller@msn.com>
URL: http://netkiller.github.io

%description

http://netkiller.github.io
http://netkiller.sourceforge.net

- Network: Firewall, Router, Switch, Cisco, H3C, Juniper,F5 Big-IP, Array
- Security: OpenVPN, L2TP, PPTP, IPSec IP Tunnel
- Cluster: SmartDNS, LVS, HAproxy, Keepalived, Heartbeat, MooseFS, GlusterFS
- Web: Apache, Lighttpd, Nginx, Tomcat, Resin
- Database: PostgreSQL, MySQL Cluster, MySQL Replication, Cassandra, MongoDB
- Cache: APC Cache, XCache, Memcached, Squid, Varnish
- Frameworks: PHP(CodeIgniter, Prado, Mach II, Qcodo, Smarty)
- Python(Django, Pylons) Perl(Catalyst)
- Search Engine: Solr, Sphinx, Crawler: Nutch
- DIV-CSS, JQuery, Prototype, Google Map API
- Virtualization: Xen, Kvm, OpenVZ

%prep

%build

mkdir -p %{_buildrootdir}/%{name}-%{version}-%{release}.x86_64/usr/share/doc/

%install

rsync -auzv ~/workspace/public_html/mail/* %{_buildrootdir}/%{name}-%{version}-%{release}.x86_64/usr/share/doc/netkiller


%pre

%preun

%post

%postun

%files
/usr/share/doc

%changelog
		
		

創建RPM包

$ rpmbuild -bb doc.spec
		

輸出信息類似下面

		
$ rpmbuild -bb doc.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.X07xhN
+ umask 022
+ cd /home/neo/rpmbuild/BUILD
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.ANzKAA
+ umask 022
+ cd /home/neo/rpmbuild/BUILD
+ mkdir -p /home/neo/rpmbuild/BUILDROOT/netkiller-1.0.1-1.x86_64
+ mkdir -p /home/neo/rpmbuild/BUILDROOT/netkiller-1.0.1-1.x86_64/usr/share/doc/
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.VQkPUn
+ umask 022
+ cd /home/neo/rpmbuild/BUILD
+ rsync -auzv /home/neo/workspace/public_html/mail/21cn.html /home/neo/workspace/public_html/mail/alpine.html /home/neo/workspace/public_html/mail/author.html /home/neo/workspace/public_html/mail/constituent.html /home/neo/workspace/public_html/mail/docbook.css /home/neo/workspace/public_html/mail/donations.html /home/neo/workspace/public_html/mail/evolution.html /home/neo/workspace/public_html/mail/exim4 /home/neo/workspace/public_html/mail/faq.html /home/neo/workspace/public_html/mail/fetchmail.html /home/neo/workspace/public_html/mail/format.content.html /home/neo/workspace/public_html/mail/format.to.html /home/neo/workspace/public_html/mail/gpg4win.html /home/neo/workspace/public_html/mail/ibook.epub /home/neo/workspace/public_html/mail/index.html /home/neo/workspace/public_html/mail/mail.client.html /home/neo/workspace/public_html/mail/mail.format.html /home/neo/workspace/public_html/mail/mail.server.exim4.html /home/neo/workspace/public_html/mail/mail.server.postfix.html /home/neo/workspace/public_html/mail/mail.service.html /home/neo/workspace/public_html/mail/mail.tools.html /home/neo/workspace/public_html/mail/mua.html /home/neo/workspace/public_html/mail/outlook.html /home/neo/workspace/public_html/mail/php.mail.html /home/neo/workspace/public_html/mail/postfix /home/neo/workspace/public_html/mail/preface.download.html /home/neo/workspace/public_html/mail/preface.html /home/neo/workspace/public_html/mail/qq.html /home/neo/workspace/public_html/mail/reader.html /home/neo/workspace/public_html/mail/smtp.error.html /home/neo/workspace/public_html/mail/sohu.html /home/neo/workspace/public_html/mail/tom.html /home/neo/rpmbuild/BUILDROOT/netkiller-1.0.1-1.x86_64/usr/share/doc/netkiller
sending incremental file list
created directory /home/neo/rpmbuild/BUILDROOT/netkiller-1.0.1-1.x86_64/usr/share/doc/netkiller
21cn.html
alpine.html
author.html
constituent.html
docbook.css
donations.html
evolution.html
faq.html
fetchmail.html
format.content.html
format.to.html
gpg4win.html
ibook.epub
index.html
mail.client.html
mail.format.html
mail.server.exim4.html
mail.server.postfix.html
mail.service.html
mail.tools.html
mua.html
outlook.html
php.mail.html
preface.download.html
preface.html
qq.html
reader.html
smtp.error.html
sohu.html
tom.html
exim4/
exim4/faq.html
exim4/index.html
postfix/
postfix/configure.html
postfix/index.html
postfix/rspamd.html

sent 127853 bytes  received 685 bytes  257076.00 bytes/sec
total size is 280313  speedup is 2.18
+ /usr/lib/rpm/brp-compress
+ /usr/lib/rpm/brp-strip /usr/bin/strip
+ /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
Processing files: netkiller-1.0.1-1.x86_64
unknown, 0: Warning: using regular magic file `/etc/magic'
Provides: netkiller = 1.0.1-1 netkiller(x86-64) = 1.0.1-1
Requires(interp): /bin/sh /bin/sh /bin/sh /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(pre): /bin/sh
Requires(post): /bin/sh
Requires(preun): /bin/sh
Requires(postun): /bin/sh
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/neo/rpmbuild/BUILDROOT/netkiller-1.0.1-1.x86_64
Wrote: /home/neo/rpmbuild/SRPMS/netkiller-1.0.1-1.src.rpm
Wrote: /home/neo/rpmbuild/RPMS/x86_64/netkiller-1.0.1-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.w9Y3wO
+ umask 022
+ cd /home/neo/rpmbuild/BUILD
+ /bin/rm -rf /home/neo/rpmbuild/BUILDROOT/netkiller-1.0.1-1.x86_64
+ exit 0
		
		

現在RPM已經製作完畢。

輸出 RPM 詳細信息。

		
$ rpm -qpi /home/neo/rpmbuild/RPMS/x86_64/netkiller-1.0.1-1.x86_64.rpm
Name        : netkiller
Version     : 1.0.1
Release     : 1
Architecture: x86_64
Install Date: (not installed)
Group       : Books/Computer books
Size        : 280313
License     : CC
Signature   : (none)
Source RPM  : netkiller-1.0.1-1.src.rpm
Build Date  : Thu 18 Apr 2013 04:51:07 PM CST
Build Host  : ubuntu
Relocations : (not relocatable)
Packager    : Neo Chen <netkiller@msn.com>
URL         : http://netkiller.github.io
Summary     : Netkiller's eBook
Description :

http://netkiller.github.io
http://netkiller.sourceforge.net

- Network: Firewall, Router, Switch, Cisco, H3C, Juniper,F5 Big-IP, Array
- Security: OpenVPN, L2TP, PPTP, IPSec IP Tunnel
- Cluster: SmartDNS, LVS, HAproxy, Keepalived, Heartbeat, MooseFS, GlusterFS
- Web: Apache, Lighttpd, Nginx, Tomcat, Resin
- Database: PostgreSQL, MySQL Cluster, MySQL Replication, Cassandra, MongoDB
- Cache: APC Cache, XCache, Memcached, Squid, Varnish
- Frameworks: PHP(CodeIgniter, Prado, Mach II, Qcodo, Smarty)
- Python(Django, Pylons) Perl(Catalyst)
- Search Engine: Solr, Sphinx, Crawler: Nutch
- DIV-CSS, JQuery, Prototype, Google Map API
- Virtualization: Xen, Kvm, OpenVZ
		
		

查看RPM所包含的檔案

		
$ rpm -qpl /home/neo/rpmbuild/RPMS/x86_64/*
/usr/share/doc
/usr/share/doc/netkiller
/usr/share/doc/netkiller/21cn.html
/usr/share/doc/netkiller/alpine.html
/usr/share/doc/netkiller/author.html
/usr/share/doc/netkiller/constituent.html
/usr/share/doc/netkiller/docbook.css
/usr/share/doc/netkiller/donations.html
/usr/share/doc/netkiller/evolution.html
/usr/share/doc/netkiller/exim4
/usr/share/doc/netkiller/exim4/faq.html
/usr/share/doc/netkiller/exim4/index.html
/usr/share/doc/netkiller/faq.html
/usr/share/doc/netkiller/fetchmail.html
/usr/share/doc/netkiller/format.content.html
/usr/share/doc/netkiller/format.to.html
/usr/share/doc/netkiller/gpg4win.html
/usr/share/doc/netkiller/ibook.epub
/usr/share/doc/netkiller/index.html
/usr/share/doc/netkiller/mail.client.html
/usr/share/doc/netkiller/mail.format.html
/usr/share/doc/netkiller/mail.server.exim4.html
/usr/share/doc/netkiller/mail.server.postfix.html
/usr/share/doc/netkiller/mail.service.html
/usr/share/doc/netkiller/mail.tools.html
/usr/share/doc/netkiller/mua.html
/usr/share/doc/netkiller/outlook.html
/usr/share/doc/netkiller/php.mail.html
/usr/share/doc/netkiller/postfix
/usr/share/doc/netkiller/postfix/configure.html
/usr/share/doc/netkiller/postfix/index.html
/usr/share/doc/netkiller/postfix/rspamd.html
/usr/share/doc/netkiller/preface.download.html
/usr/share/doc/netkiller/preface.html
/usr/share/doc/netkiller/qq.html
/usr/share/doc/netkiller/reader.html
/usr/share/doc/netkiller/smtp.error.html
/usr/share/doc/netkiller/sohu.html
/usr/share/doc/netkiller/tom.html
		
		

提示

只要將你要打包的內容放入 %{_buildrootdir}/%{name}-%{version}-%{release}.x86_64/usr/share/doc/netkiller 即可

這種方式不需要tar.gz包,故不能生成.src.rpm檔案,即便升級裡面也沒有內容

2. 通過 .tar.gz 檔案創建 rpm 與 src.rpm 包

準備tar包

		
rsync -auzv --exclude=.git --exclude=.svn /home/neo/workspace/public_html/mail /tmp/netkiller-1.0.1
cd /tmp
tar -zcvf $topdir/SOURCES/netkiller-1.0.1.tar.gz netkiller-1.0.1
cd -
		
		

package.spec

		
Summary: Netkiller's eBook
Name: netkiller
Version: 1.0.1
Release: 1
License: CC
Group: Books/Computer books
Packager: Neo Chen <netkiller@msn.com>
Source: %{name}-%{version}.tar.gz
URL: http://netkiller.github.io

%description

http://netkiller.github.io
http://netkiller.sourceforge.net

- Network: Firewall, Router, Switch, Cisco, H3C, Juniper,F5 Big-IP, Array
- Security: OpenVPN, L2TP, PPTP, IPSec IP Tunnel
- Cluster: SmartDNS, LVS, HAproxy, Keepalived, Heartbeat, MooseFS, GlusterFS
- Web: Apache, Lighttpd, Nginx, Tomcat, Resin
- Database: PostgreSQL, MySQL Cluster, MySQL Replication, Cassandra, MongoDB
- Cache: APC Cache, XCache, Memcached, Squid, Varnish
- Frameworks: PHP(CodeIgniter, Prado, Mach II, Qcodo, Smarty)
- Python(Django, Pylons) Perl(Catalyst)
- Search Engine: Solr, Sphinx, Crawler: Nutch
- DIV-CSS, JQuery, Prototype, Google Map API
- Virtualization: Xen, Kvm, OpenVZ

%prep

%setup


%build

mkdir -p %{_buildrootdir}/%{name}-%{version}-%{release}.x86_64/usr/share/doc/netkiller

%install

rsync -auzv %{_builddir}/%{name}-%{version}/* %{_buildrootdir}/%{name}-%{version}-%{release}.x86_64/usr/share/doc/netkiller



%pre

%preun

%post

%postun

%files
/usr/share/doc


%changelog
		
		

創建RPM包

rpmbuild -bb package.spec
		

這裡使用-bb參數,即可以創建 .rpm 與 .src.rpm 兩個包

$ find /home/neo/rpmbuild/ -name *.rpm
/home/neo/rpmbuild/RPMS/x86_64/netkiller-1.0.1-1.x86_64.rpm
/home/neo/rpmbuild/SRPMS/netkiller-1.0.1-1.src.rpm
		
		
$ rpm -qpi /home/neo/rpmbuild/RPMS/x86_64/netkiller-1.0.1-1.x86_64.rpm
Name        : netkiller
Version     : 1.0.1
Release     : 1
Architecture: x86_64
Install Date: (not installed)
Group       : Books/Computer books
Size        : 280313
License     : CC
Signature   : (none)
Source RPM  : netkiller-1.0.1-1.src.rpm
Build Date  : Thu 18 Apr 2013 05:02:30 PM CST
Build Host  : ubuntu
Relocations : (not relocatable)
Packager    : Neo Chen <netkiller@msn.com>
URL         : http://netkiller.github.io
Summary     : Netkiller's eBook
Description :

http://netkiller.github.io
http://netkiller.sourceforge.net

- Network: Firewall, Router, Switch, Cisco, H3C, Juniper,F5 Big-IP, Array
- Security: OpenVPN, L2TP, PPTP, IPSec IP Tunnel
- Cluster: SmartDNS, LVS, HAproxy, Keepalived, Heartbeat, MooseFS, GlusterFS
- Web: Apache, Lighttpd, Nginx, Tomcat, Resin
- Database: PostgreSQL, MySQL Cluster, MySQL Replication, Cassandra, MongoDB
- Cache: APC Cache, XCache, Memcached, Squid, Varnish
- Frameworks: PHP(CodeIgniter, Prado, Mach II, Qcodo, Smarty)
- Python(Django, Pylons) Perl(Catalyst)
- Search Engine: Solr, Sphinx, Crawler: Nutch
- DIV-CSS, JQuery, Prototype, Google Map API
- Virtualization: Xen, Kvm, OpenVZ
		
		
		
$ rpm -qpi /home/neo/rpmbuild/SRPMS/netkiller-1.0.1-1.src.rpm
Name        : netkiller
Version     : 1.0.1
Release     : 1
Architecture: x86_64
Install Date: (not installed)
Group       : Books/Computer books
Size        : 71292
License     : CC
Signature   : (none)
Source RPM  : (none)
Build Date  : Thu 18 Apr 2013 05:02:30 PM CST
Build Host  : ubuntu
Relocations : (not relocatable)
Packager    : Neo Chen <netkiller@msn.com>
URL         : http://netkiller.github.io
Summary     : Netkiller's eBook
Description :

http://netkiller.github.io
http://netkiller.sourceforge.net

- Network: Firewall, Router, Switch, Cisco, H3C, Juniper,F5 Big-IP, Array
- Security: OpenVPN, L2TP, PPTP, IPSec IP Tunnel
- Cluster: SmartDNS, LVS, HAproxy, Keepalived, Heartbeat, MooseFS, GlusterFS
- Web: Apache, Lighttpd, Nginx, Tomcat, Resin
- Database: PostgreSQL, MySQL Cluster, MySQL Replication, Cassandra, MongoDB
- Cache: APC Cache, XCache, Memcached, Squid, Varnish
- Frameworks: PHP(CodeIgniter, Prado, Mach II, Qcodo, Smarty)
- Python(Django, Pylons) Perl(Catalyst)
- Search Engine: Solr, Sphinx, Crawler: Nutch
- DIV-CSS, JQuery, Prototype, Google Map API
- Virtualization: Xen, Kvm, OpenVZ
		
		

3. 如果你認為上面方法仍然複雜,可以嘗試另一個工具 checkinstall

有興趣可以去網上找學習資料

$ apt-cache search checkinstall
checkinstall - installation tracker