打包rpm包

製作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進行更新。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章