閱讀566 返回首頁    go 阿裏雲 go 技術社區[雲棲]


rpmbuild 使用筆記

1. rhel6.0 自定義 RPM 包
過往習慣使用 /usr/src/redhat 作為 RPM 創建默認目錄, RHEL6 默認使用 $HOME/rpmbuild 目錄創建 RPM

2. 創建目錄方法
當嚐試編譯任意一個 src.rpm  $HOME/rpmbuild 自動創建, 目錄結構如下

BUILD  目錄用於 RPM 編譯
SOURCES  用於存放源碼, 補丁, RPM 會自動從該目錄自動尋找
SPECS  存放 SPEC 文件
RPMS  二進製軟件編譯後存放位置
SRPMS  源碼 RPM 存放位置
BUILDROOT ....

3. 編譯測試
獲得 lsyncd-2.0.5.tar.gz 並嚐試編譯, 獲得編譯需求參數

利用 make install 獲得下麵信息

創建文件
/usr/local/bin/lsyncd
創建目錄
/usr/local/share/doc/lsyncd/
創建文件
examples/lbash.lua /usr/local/share/doc/lsyncd/lbash.lua
examples/lecho.lua /usr/local/share/doc/lsyncd/lecho.lua
examples/lgforce.lua /usr/local/share/doc/lsyncd/lgforce.lua
examples/limagemagic.lua /usr/local/share/doc/lsyncd/limagemagic.lua
examples/lpostcmd.lua /usr/local/share/doc/lsyncd/lpostcmd.lua
examples/lrsync.lua /usr/local/share/doc/lsyncd/lrsync.lua
examples/lrsyncssh.lua /usr/local/share/doc/lsyncd/lrsyncssh.lua
創建目錄
/usr/local/share/man/man1
創建文件
doc/lsyncd.1 /usr/local/share/man/man1/lsyncd.1


mkdir -p $RPM_BUILD_ROOT/usr/local/share/doc/lsyncd
mkdir -p $RPM_BUILD_ROOT%/usr/local/bin
install -p -m 755 lsyncd $RPM_BUILD_ROOT/usr/local/share/doc/lsyncd/
install -p -m 644 doc/lsyncd.1 /usr/local/share/man/man1/lsyncd.1
install -p -m 644 examples/lbash.lua /usr/local/share/doc/lsyncd/lbash.lua
install -p -m 644 examples/lecho.lua /usr/local/share/doc/lsyncd/lecho.lua
install -p -m 644 examples/lgforce.lua /usr/local/share/doc/lsyncd/lgforce.lua
install -p -m 644 examples/limagemagic.lua /usr/local/share/doc/lsyncd/limagemagic.lua
install -p -m 644 examples/lpostcmd.lua /usr/local/share/doc/lsyncd/lpostcmd.lua
install -p -m 644 examples/lrsync.lua /usr/local/share/doc/lsyncd/lrsync.lua
install -p -m 644 examples/lrsyncssh.lua /usr/local/share/doc/lsyncd/lrsyncssh.lua
#make install DESTDIR=$RPM_BUILD_ROOT

 

4. 開始編寫 spec 文件
a. 存放軟件包 /root/rpmbuild/SOURCES/lsyncd-2.0.5.tar.gz
b. 創建 /root/rpmbuild/SPECS/lsyncd-2.0.5.spec (自動生成模板) 參考下麵信息


Name:   lsyncd
Version:        2.0.5
Release:        1%{?dist}
Summary:        A program use to combined rsync service and use to sync file automatic.

Group:          Applications/Internet
License:        GPLv2
URL:            https://code.google.com/p/lsyncd/wiki/Lsyncd20Manual
Source0:        https://lsyncd.googlecode.com/files/lsyncd-2.0.5.tar.gz
BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

BuildRequires:  lua-devel
Requires:       lua

%description
lsyncd 2.x allows you to specify different actions for different kind of events. Particularly moves can now be implemented to be moved locally at the target instead of hitherto deletion of the origin and retransfer of the destination.

%prep
%setup -q


%build
%configure
make %{?_smp_mflags}


%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
install -p -m 755 lsyncd $RPM_BUILD_ROOT/%{_bindir}/lsyncd
install -p -m 644 doc/lsyncd.1 $RPM_BUILD_ROOT/%{_mandir}/lsyncd.1
install -p -m 644 examples/lbash.lua $RPM_BUILD_ROOT/%{_docdir}/lbash.lua
install -p -m 644 examples/lecho.lua $RPM_BUILD_ROOT/%{_docdir}/lecho.lua
install -p -m 644 examples/lgforce.lua $RPM_BUILD_ROOT/%{_docdir}/lgforce.lua
install -p -m 644 examples/limagemagic.lua $RPM_BUILD_ROOT/%{_docdir}/limagemagic.lua
install -p -m 644 examples/lpostcmd.lua $RPM_BUILD_ROOT/%{_docdir}/lpostcmd.lua
install -p -m 644 examples/lrsync.lua $RPM_BUILD_ROOT/%{_docdir}/lrsync.lua
install -p -m 644 examples/lrsyncssh.lua $RPM_BUILD_ROOT/%{_docdir}/lrsyncssh.lua


%clean
rm -rf $RPM_BUILD_ROOT
make clean


%files
   /usr/bin/lsyncd
   /usr/share/doc/lbash.lua
   /usr/share/doc/lecho.lua
   /usr/share/doc/lgforce.lua
   /usr/share/doc/limagemagic.lua
   /usr/share/doc/lpostcmd.lua
   /usr/share/doc/lrsync.lua
   /usr/share/doc/lrsyncssh.lua
   /usr/share/doc/lsyncd/lbash.lua
   /usr/share/doc/lsyncd/lecho.lua
   /usr/share/doc/lsyncd/lgforce.lua
   /usr/share/doc/lsyncd/limagemagic.lua
   /usr/share/doc/lsyncd/lpostcmd.lua
   /usr/share/doc/lsyncd/lrsync.lua
   /usr/share/doc/lsyncd/lrsyncssh.lua
   /usr/share/man/lsyncd.1
   /usr/share/man/man1/lsyncd.1.gz
%defattr(-,root,root,-)
%doc

 

%changelog
* Tue Mar  6 2011 terrytsang  <signmem@hotmail.com>
-- example

 

5. spec 特別之處進行描述

a. %configure   這裏可以添加編譯參數
b. $RPM_BUILD_ROOT/%{_bindir}  $RPM_BUILD_ROOT/%{_docdir} 宏變量, 目錄位置參考 ./configure --help
c. 初次使用, 會出現 Installed (but unpackaged) file(s) found: 錯誤信息
 解決方法: 把出現的文件直接寫入到 %files 之後就可以成功
d. 習慣上 %clean 最後需要添加   make clean
e. %changelog 後麵, 必須添加一行 -- 開頭信息


rpmbuild 編譯提示
-b 能夠與下麵參數進行配合使用
p 代表隻執行 spec 文件中 prep 部分
c 隻執行 prep 與編譯, 常用於你無法確保源碼是否能夠完整編譯,
i 執行 prep, compile, install
b prep, compile, install 隻創建一個二進製包
a 創建源碼與二進製包

最後更新:2017-04-02 22:16:31

  上一篇:go 如何改變Android tab 的高度和字體大小
  下一篇:go rpmbuild 文檔