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