怎樣製作RPM包
阿新 • • 發佈:2022-05-02
怎樣製作RPM包
摘要
我在網上找RPM包的製作例子幾乎都是C原始碼編譯安裝然後生成RPM包, 而我的程式不是C寫的很多時候是指令碼語言如Python, PHP 甚至是 HTML檔案。怎樣製作RPM包呢?
目錄
- 1. 為HTML手冊文件製作RPM包
- 2. 通過 .tar.gz 檔案建立 rpm 與 src.rpm 包
- 3. 如果你認為上面方法仍然複雜,可以嘗試另一個工具 checkinstall
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 <[email protected]> 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: OpenV**, 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 <[email protected]> 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: OpenV**, 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 <[email protected]>
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: OpenV**, 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 <[email protected]>
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: OpenV**, 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 <[email protected]>
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: OpenV**, 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