怎样制作RPM包
Mr. Neo Chen (netkiller), 陈景峰(BG7NYT)
中国广东省深圳市龙华新区民之街道溪山美地
518109 +86 13113668890 +86 755 29812080<>
版权 © 2011, 2012, 2013
摘要
我在网上找RPM包的制作例子几乎都是C源码编译安装然后生成RPM包, 而我的程序不是C写的很多时候是脚本语言如Python, PHP 甚至是 HTML文件。怎样制作RPM包呢?
我的系列文档
目录
1. 为HTML手册文档制作RPM包
下面是一个spec文件
保存为 doc.spec
Summary: Netkiller's eBookName: netkillerVersion: 1.0.1Release: 1License: CCGroup: Books/Computer booksPackager: Neo ChenURL: http://netkiller.github.io%descriptionhttp://netkiller.github.iohttp://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%buildmkdir -p %{_buildrootdir}/%{name}-%{version}-%{release}.x86_64/usr/share/doc/%installrsync -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.specExecuting(%prep): /bin/sh -e /var/tmp/rpm-tmp.X07xhN+ umask 022+ cd /home/neo/rpmbuild/BUILD+ exit 0Executing(%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 0Executing(%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/netkillersending incremental file listcreated directory /home/neo/rpmbuild/BUILDROOT/netkiller-1.0.1-1.x86_64/usr/share/doc/netkiller21cn.htmlalpine.htmlauthor.htmlconstituent.htmldocbook.cssdonations.htmlevolution.htmlfaq.htmlfetchmail.htmlformat.content.htmlformat.to.htmlgpg4win.htmlibook.epubindex.htmlmail.client.htmlmail.format.htmlmail.server.exim4.htmlmail.server.postfix.htmlmail.service.htmlmail.tools.htmlmua.htmloutlook.htmlphp.mail.htmlpreface.download.htmlpreface.htmlqq.htmlreader.htmlsmtp.error.htmlsohu.htmltom.htmlexim4/exim4/faq.htmlexim4/index.htmlpostfix/postfix/configure.htmlpostfix/index.htmlpostfix/rspamd.htmlsent 127853 bytes received 685 bytes 257076.00 bytes/sectotal 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/objdumpProcessing files: netkiller-1.0.1-1.x86_64unknown, 0: Warning: using regular magic file `/etc/magic'Provides: netkiller = 1.0.1-1 netkiller(x86-64) = 1.0.1-1Requires(interp): /bin/sh /bin/sh /bin/sh /bin/shRequires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1Requires(pre): /bin/shRequires(post): /bin/shRequires(preun): /bin/shRequires(postun): /bin/shChecking for unpackaged file(s): /usr/lib/rpm/check-files /home/neo/rpmbuild/BUILDROOT/netkiller-1.0.1-1.x86_64Wrote: /home/neo/rpmbuild/SRPMS/netkiller-1.0.1-1.src.rpmWrote: /home/neo/rpmbuild/RPMS/x86_64/netkiller-1.0.1-1.x86_64.rpmExecuting(%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.rpmName : netkillerVersion : 1.0.1Release : 1Architecture: x86_64Install Date: (not installed)Group : Books/Computer booksSize : 280313License : CCSignature : (none)Source RPM : netkiller-1.0.1-1.src.rpmBuild Date : Thu 18 Apr 2013 04:51:07 PM CSTBuild Host : ubuntuRelocations : (not relocatable)Packager : Neo ChenURL : http://netkiller.github.ioSummary : Netkiller's eBookDescription :http://netkiller.github.iohttp://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.1cd /tmptar -zcvf $topdir/SOURCES/netkiller-1.0.1.tar.gz netkiller-1.0.1cd -
package.spec
Summary: Netkiller's eBookName: netkillerVersion: 1.0.1Release: 1License: CCGroup: Books/Computer booksPackager: Neo ChenSource: %{name}-%{version}.tar.gzURL: http://netkiller.github.io%descriptionhttp://netkiller.github.iohttp://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%buildmkdir -p %{_buildrootdir}/%{name}-%{version}-%{release}.x86_64/usr/share/doc/netkiller%installrsync -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.rpmName : netkillerVersion : 1.0.1Release : 1Architecture: x86_64Install Date: (not installed)Group : Books/Computer booksSize : 280313License : CCSignature : (none)Source RPM : netkiller-1.0.1-1.src.rpmBuild Date : Thu 18 Apr 2013 05:02:30 PM CSTBuild Host : ubuntuRelocations : (not relocatable)Packager : Neo ChenURL : http://netkiller.github.ioSummary : Netkiller's eBookDescription :http://netkiller.github.iohttp://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.rpmName : netkillerVersion : 1.0.1Release : 1Architecture: x86_64Install Date: (not installed)Group : Books/Computer booksSize : 71292License : CCSignature : (none)Source RPM : (none)Build Date : Thu 18 Apr 2013 05:02:30 PM CSTBuild Host : ubuntuRelocations : (not relocatable)Packager : Neo ChenURL : http://netkiller.github.ioSummary : Netkiller's eBookDescription :http://netkiller.github.iohttp://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 checkinstallcheckinstall - installation tracker