rpmbuilder只创建源rpm而不是二进制rpm

时间:2012-11-05 13:06:15

标签: rpm qmake rpmbuild rpm-spec

我正在尝试为我在Qt中编写的库创建一个rpm包。这是我的spec文件:

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正常结束(退出0),表示它对src.rpm表示不满意,对.rpm文件一无所知。我可以在SRPMS文件夹中看到blabla-1.3.2-01.src.rpm,但是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
sf@suse.de: 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 个答案:

答案 0 :(得分: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

  3. 有关构建根目录的更多信息:

    通常,您告诉安装脚本以某种方式安装该构建根目录下的所有内容。如果是这样,那么你可以按照自己的意愿定义%files在哪里找到它们。

    我发现Maximum RPM非常有帮助,尤其是this部分。但请注意,它已经过时了 - 在早些时候,没有rpmbuild并且您使用rpm执行了所有操作。但基本概念是一样的。如今,rpm不再理解-ba,而您使用rpmbuild进行构建。