製作rpm包
需要軟件:
系統環境:[紅帽企業Linux.6.4.服務器版].rhel-server-6.4-x86_64
首先安裝rpmdevtools這個工具,該工具包含rpmbuild,rpmdev-newspec,rpmdev-setuptree等工具,rpmdevtools這個工具有依賴關係需要處理,依賴於fakeroot,fakeroot又依賴於fakeroot-lib,所以安裝的軟件名稱以及順序爲:
1、fakeroot-libs-1.12.2-22.2.el6.x86_64.rpm
2、fakeroot-1.12.2-22.2.el6.x86_64.rpm
3、rpmdevtools-7.5-2.el6.noarch.rpm
之後可以進行spec文件的生成。
關於生成rpm包的相關目錄說明如下:
整個rpm製作都是在$HOME/rpmbuild目錄下完成的。比如在CentOS中,rpmbuild目錄下面,有BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS六個子目錄。BUILD是編譯rpm包的臨時目錄;BUILDROOT是最後生成rpm包的臨時安裝目錄;RPMS存放最終生成的rpm二進制包;SPECS用來存放spec文件;SRPMS存放最終生成的rpm源碼包。倘若這些目錄不存在我們運行rpmdev-setuptree命令就會在當前用戶目錄下的rpmbuild目錄下生成上述六個子目錄。spec文件可以放到任何地方,但是自己的源碼包(.tar.gz)必須放到SOURCES目錄下,否則rpmbuild編譯時會找不到指定的源碼包。而上述的這些目錄默認是在用戶目錄下的,即$HOME/rpmbuild,我們也可以自定義,這個路徑是在/usr/lib/rpm/macros文件裏面%_topdir的宏變量來定義。我們可以在自己的主目錄下建立一個名爲.rpmmacros的隱藏文件,然後在裏面重新定義%_topdir,指向一個新的目錄名。通常情況下.rpmmacros文件裏一般只有一行內容,比如:
%_topdir $HOME/myrpmbuild
然後,再運行rpmdev-setuptree命令即可在/myrpmbuild生成其他子目錄。
下面開始製作:
1. 將上一步最後生成的源碼包拷貝到生成rpm包的目錄下,如果沒有rpm目錄,需要手動在root目錄下創建該目錄,同時創建rpm目錄下的6個目錄:BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS。
#cp server-1.0.tar.gz /root/rpmbuild/SOURCES
2. 接下來就是最最主要的工作——編寫.spec文件。有個rpmdev-newspec工具可以自動生成一個.spec 模板,然後我們再根據規則對模板進行簡單修改即可。
#rpmdev-newspec –o server.spec
#gedit server.spec
Name: server
Version: 1.0
Release: 1%{?dist} #更改此處即可得到新的發佈版rpm包
Summary: this is the test code
Group: System Environment/TEST
License: GPL
URL: http://www.hao123.com
Source0: %{name}-%{version}.tar.gz #要確保在SOURCES目錄下能找到該包
BuildROOT: %{_topdir}/BUILDROOT
BuildRequires: gcc>= 4.7 #進行編譯時候的條件,若不符合則編譯失敗,退出建包進程。
Requires: python rpm >=0:4.1.1 #進行安裝時候,此包的依賴包。
%description
this is a test program to test by zsh
……
%files
%{_bindir} #一定要填上,否則會報錯
%defattr(-,root,root,-)
%doc
…….
3. 運行rpmbuild命令。#rpmbuild –ba server.spec 即可在RPMS/i386或(若系統爲64位怎顯示X86_64)下得到server-1.0-1.el6.i386.rpm,在SRPMS/下面得到server-1.0-1.el6.src.rpm。RPMS/i386或(X86_64)下得到server-1.0-1.el6.i386.rpm是可執行文件。
注意:首先安裝rpmdevtools這個工具,該工具包含rpmbuild,rpmdev-newspec,rpmdev-setuptree等工具;
在編寫.spec文件時,注意%files下面添加%{_bindir},否則會報錯“Installed(but unpackaged) file(s) found:”,針對此類問題就是在%file下按需添加內容,如:
/usr/bin/xxx=> %{_bindir}/xxx #安裝後將二進制可執行文件放到/usr/bin/server
/usr/lib/xxx=> %{_libdir}/xxx #安裝後將庫文件放到/usr/lib/目錄下
/usr/include/xxx=> %{_includedir}/xxx
/usr/share/xxx=> %{_datadir}
/xxx/usr/man/xxx=> %{_mandir}/xxx
亦可修改/usr/lib/rpm/macros文件:%_unpackaged_files_terminate_build 1,把1改爲0只警告,再或者將文件中的%__check_files /usr/lib/rpm/check-files %{buildroot} 註釋掉。
搭建HTTP服務器,建立yum源
需要軟件:httpd,createrepo 若沒有安裝則#yuminstall httpd createrepo
步驟:
1. 建立本地庫,在/var/zsh 下面,運行createrepo命令,將自己的rpm包放到/var/zsh/i386/下面,#cp /root/rpmbuild/RPMS/i386/server-1.0-1.el6.i386.rpm/var/zsh/i386。
2. 在httpd根目錄下添加自己的Yum本地庫,#cp –r /var/zsh /www/html/
3. 配置yum,在/etc/yum.repos.d/下面編寫zsh.repo
[zshhttp]
name=zsh
baseurl=http://127.0.0.1/zsh
gpgcheck=0
enabled=1
#yum clean all ,清空yum緩存
#yum list ,可以看到可用包:server-1.1-1.el6.src.rpm 在zshhttp源下。
4. 現在就可以對自己的包進行安裝更新了。#yum install server,將server安裝到/usr/bin目錄下。
5. 將server.spec的Release選項改爲2,生成server-1.1-2.el6.i386.rpm,拷貝到/var/www/html/zsh/i386/目錄下,#createrepo–update / var/www/html/zsh/ 對http服務器上的yum源進行更新,每次有包的變動都要更新,這樣客戶纔會知道新包的存在。#yum update server,即可對server進行更新。