2012-11-05 78 views
2

我想爲我在Qt中編寫的庫創建一個rpm包。這裏是我的規格文件:rpmbuilder創建只有源rpm不是二進制rpm

Name:   blabla 
Version:  1.3.2 
Release:  0.1 
License:  GPL 
Summary:  my awsome lib 
Url:   http://me.home.mrz.net 
Group:   Core Applictaion 
Source:   http://svn.me.home.mrz.net/svn/Core/blabla-1.3.2.tar 
Vendor:   mrz Inc. 
BuildArch:  x86_64 
Packager:  mrz 
BuildRoot:  %{_tmppath}/%{name}-%{version}-build 

%description 

%prep 
%setup 

%build 
qmake 

%install 
make install 

%clean 
%{?buildroot:%__rm -rf "%{buildroot}"} 

%files: 
%defattr(-,root,root) 
/home/mrz/local/lib/libBlabla.so 
/home/mrz/local/lib/libBlabla.so.%{version} 

運行

rpmbuild -ba blabla.spec 

的後的rpmbuild正常完指示其又寫道的的src.rpm(退出0),隻字不提的.rpm文件。我可以看到布拉布拉-1.3.2-01.src.rpm在SRPMS文件夾,但RMPS文件夾爲空,這裏是輸出的某些部分,我得到:

Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.WwW6ps 
+ unmask 022 
+ cd /home/mrz/rpmbuild/BUILD 
+ rm -rf blabla-1.3.2 
+ /usr/bin/gzip -dc /home/mrz/rpmbuild/SOURCES/blabla-1.3.2.tar 
+ /bin/tar -xvvf - 
. 
. 
. 
+ STATUS=0 
+ '[' 0 -ne 0 ']' 
+ cd blabla-1.3.2 
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w . 
+ exit 0 
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.sNb2WS 
+ umask 022 
+ cd /home/mrz/rpmbuild/BUILD 
+ /bin/rm -rf /home/mrz/rpmbuild/BUILDROOT/blabla-1.3.2-0.1.x86_64 
++ dirname /home/mrz/rpmbuild/BUILDROOT/blabla-1.3.2-0.1.x86_64 
+ /bin/mkdir -p /home/mrz/rpmbuild/BUILDROOT 
+ /bin/mkdir /home/mrz/rpmbuild/BUILDROOT/blabla-1.3.2-0.1.x86_64 
+ cd blabla-1.3.2 
+ qmake 
Project MESSAGE: ****************************************************************** 
Project MESSAGE: * Building blabla 
Project MESSAGE: * project default message 
Project MESSAGE: ****************************************************************** 
. 
. 
. 
+ exit 0 
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.qVk8KW 
+ umask 022 
+ cd /home/mrz/rpmbuild/BUILD 
+ cd blabla-1.3.2 
+ make install 
cd src/ && /usr/bin/qmake /home/mrz/rpmbuild/BUILD/blabla-1.3.2/src/src.pro -o  
Makefile 
Project MESSAGE: ****************************************************************** 
Project MESSAGE: * Building blabla 
Project MESSAGE: * project default message 
Project MESSAGE: ****************************************************************** 
cd src/ && make -f Makefile install 
make[1]: Entering directory `/home/mrz/rpmbuild/BUILD/blabla-1.3.2/src' 
g++ -c -m64 -pipe -O2 -fPIC -Wall -W 
. 
. 
. 
+ /usr/lib/rpm/brp-lib64-linux 
[email protected]: if you find problems with this script, drop me a note 
+ /usr/lib/rpm/brp-compress 
+ /usr/lib/rpm/brp-symlink 
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/mrz/rpmbuild/BUILDROOT/blabla-1.3.2-0.1.x86_64 
warning: Could not canonicalize hostname: linux-x1rh 
Wrote: /home/mrz/rpmbuild/SRPMS/blabla-1.3.2-0.1.src.rpm 
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.M4rJDm 
+ umask 022 
+ cd /home/mrz/rpmbuild/BUILD 
+ cd blabla-1.3.2 
+ /bin/rm -rf /home/mrz/rpmbuild/BUILDROOT/blabla-1.3.2-0.1.x86_64 
+ exit 0 

任何人都知道我在做什麼錯...

+1

難道你沒有得到任何輸出?它說什麼?另外,你的spec文件不能工作:1.你在'%files'之後有一個':',2.你不告訴'make install'關於你的編譯根目錄。 – glglgl

+1

和3.,RPM文件不應包含'/ home'的任何文件。 – glglgl

+0

@glglgl:我得到一個輸出,正如我提到的,它說一切正常(退出0),並且源rpm已經寫入其相關文件夾中,沒有提及任何有關二進制rpm的內容。那麼,spec文件的工作原理(你可以在我更新後的文章中看到輸出結果),但我認爲它並不像它應該那樣。有沒有足夠的空間來評論這3個問題,所以我會創建新的評論。 – mrz

回答

2

我想你在rpmbuild期間誤解了目錄概念。

有兩個重要的目錄:構建區和構建根。

  1. 構建區域是源被提取並編譯的位置。在你身邊,它是/home/mrz/rpmbuild/BUILD。這裏的tar被解壓縮,並且在創建的子目錄blabla-1.3.2中,源代碼位於該目錄中。 (這來自約定,將一個單一的目錄放入一個tar文件,可能在其下有其他子目錄,但它旁邊沒有其他子目錄。)

  2. 構建根目錄是您的文件將以何種方式排列他們應該在安裝時間。您可以定義與

    BuildRoot:  %{_tmppath}/%{name}-%{version}-build 
    

    顯然,這相當於

    /home/mrz/rpmbuild/BUILDROOT/blabla-1.3.2-0.1.x86_64 
    

    - 我不知道爲什麼。 ~/.rpmrc~/.rpmmacros也許?

更多關於構建根:

通常情況下,你告訴你的安裝腳本莫名其妙地安裝低於構建根的一切。如果是這樣,每一個東西都是你想要的,你定義你的%files在哪裏找到它們。

我發現Maximum RPM挺有幫助的,尤其是this部分。然而,請注意,它已經過時了 - 在較早的時候,沒有rpmbuild,你用rpm做了所有事情。但基本概念是相同的。如今,rpm不再理解-ba,你完全用rpmbuild建設。

+0

@mrz如上所述,'rpm -ba'已過時。幾年以來,'rpmbuild -ba'接管了這項工作。除此之外,這本舊書只能作爲學習事物如何工作的良好指南。 – glglgl

+0

再次謝謝你的回答。 – mrz