【问题标题】:RPM spec patch application failsRPM 规范补丁应用程序失败
【发布时间】:2016-08-20 10:15:39
【问题描述】:

我有一个规范文件,没有补丁也可以正常编译:

build@SLES11SP4-185:~/rpmbuild/SPECS> cat testSoftware.spec
#
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself.
#

# norootforbuild

Name:            testSoftware
Version:         1.0
Release:         2
Summary:         Demo - patch
Group:           Deployment
License:         GPLv2
Url:             www.dell.com
#PreReq:
#Provides:
#BuildRequires:
Source:          testSoftware.tar.gz
patch0:          test1.patch
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
AutoReqProv:    on

%description

Authors:
--------
    Raj Kumar
%prep
%setup -q

%build

%install
mkdir -p $RPM_BUILD_ROOT/opt/testSoftware

install test1.sh $RPM_BUILD_ROOT/opt/testSoftware
install test2.sh $RPM_BUILD_ROOT/opt/testSoftware

%patch -P 0
%clean
rm -rf $RPM_BUILD_ROOT


%post
%postun

%files
/opt/testSoftware/test1.sh
/opt/testSoftware/test2.sh
%defattr(-,root,root,0755)

我的 SOURCES 目录有 test1.patch 和 *.tar.gz

build@SLES11SP4-185:~/rpmbuild/SOURCES> ls
testSoftware.tar.gz
test1.patch   testSoftware-1.0  

这里是test1.patch

build@SLES11SP4-185:~/rpmbuild/SOURCES> cat test1.patch
--- testSoftware-1.0/test1.sh   2016-08-20 04:49:19.000000000 -0400
+++ test1.sh    2016-08-20 05:33:45.000000000 -0400
@@ -1 +1 @@
-Hello - Test1
+Test1 - Test1 - patch

当我运行规范文件时,它失败了:

build@SLES11SP4-185:~/rpmbuild/SPECS> rpmbuild -bb testSoftware.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.10960
+ umask 022
+ cd /home/build/rpmbuild/BUILD
+ cd /home/build/rpmbuild/BUILD
+ rm -rf testSoftware-1.0
+ /usr/bin/gzip -dc /home/build/rpmbuild/SOURCES/testSoftware.tar.gz
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd testSoftware-1.0
++ /usr/bin/id -u
+ '[' 1001 = 0 ']'
++ /usr/bin/id -u
+ '[' 1001 = 0 ']'
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.10960
+ umask 022
+ cd /home/build/rpmbuild/BUILD
+ /bin/rm -rf /var/tmp/testSoftware-1.0-build
++ dirname /var/tmp/testSoftware-1.0-build
+ /bin/mkdir -p /var/tmp
+ /bin/mkdir /var/tmp/testSoftware-1.0-build
+ cd testSoftware-1.0
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.10960
+ umask 022
+ cd /home/build/rpmbuild/BUILD
+ cd testSoftware-1.0
+ mkdir -p /var/tmp/testSoftware-1.0-build/opt/testSoftware
+ install test1.sh /var/tmp/testSoftware-1.0-build/opt/testSoftware
+ install test2.sh /var/tmp/testSoftware-1.0-build/opt/testSoftware
+ %patch -P 0
/var/tmp/rpm-tmp.10960: line 28: fg: no job control
error: Bad exit status from /var/tmp/rpm-tmp.10960 (%install)


RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.10960 (%install)

谁能告诉我是什么问题?

【问题讨论】:

    标签: linux patch rpmbuild


    【解决方案1】:

    您可以看到它无法识别 %patch 宏并将该文本完全发送到 shell,shell 将 % 解释为试图引用后台作业控制进程。那是因为%patch 是一个%build 步骤并且位于规范文件的错误部分(您在%install 中有它)。

    把它移到%build,你应该没问题。

    【讨论】:

    • 仍然是同样的错误,即使我将%patch 移动到%build 下,或者即使我将%patch -p0 移动到相同的位置。
    • 这很奇怪。确保上面有空格;我看到 RPM 有时会误解为描述或其他内容的一部分。也许大写Patch:字段,以防万一(现在抓住稻草)?
    • 我将Patch0: test1.patch 大写,还在%build%patch 之间添加了一个空格,仍然是同样的问题。在这两者之间我总是以rpmbuild -bb testSoftware_patch.spec 运行它(尝试%patch 作为%Patch 以及,没有运气。
    • 我添加了我的答案,如果我们把它放在设置部分而不是构建部分,它就可以工作
    • 哈哈,哎呀。我猜对了一半 - %install 不是放置它的地方。
    【解决方案2】:

    如果我们在%setup -q 之后应用它,它就会起作用。 以下是修改后的规范文件:

    Name:            testSoftware
    Version:         1.0
    Release:         2
    Summary:         Demo - patch
    Group:           Deployment
    License:         GPLv2
    Url:             www.dell.com
    #PreReq:
    #Provides:
    #BuildRequires:
    Source:          testSoftware.tar.gz
    Patch0:          test1.patch
    BuildRoot:      %{_tmppath}/%{name}-%{version}-build
    AutoReqProv:    on
    
    %description
    
    Authors:
    --------
        Raj Kumar
    %prep
    %setup -q
    %patch -p0
    
    %build
    
    %install
    mkdir -p $RPM_BUILD_ROOT/opt/testSoftware
    
    install test1.sh $RPM_BUILD_ROOT/opt/testSoftware
    install test2.sh $RPM_BUILD_ROOT/opt/testSoftware
    
    %clean
    rm -rf $RPM_BUILD_ROOT
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-26
      • 2011-12-29
      • 2015-12-23
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多