Patchwork [0/1] package_rpm.bbclass: remove xx.spec before doing rpmbuild xx.src.rpm

login
register
mail settings
Submitter Bian Naimeng
Date July 9, 2013, 8:27 a.m.
Message ID <51DBC97F.1090606@cn.fujitsu.com>
Download mbox | patch
Permalink /patch/53359/
State Accepted
Commit 760af902a98b350a2f1f3203fa0096965924a83d
Headers show

Comments

Bian Naimeng - July 9, 2013, 8:27 a.m.
If the spec file already exist, and has not been stored into pseudo's files.db,
it maybe cause rpmbuild src.rpm fail, so remove it before doing rpmbuild src.rpm.

Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>

---
 meta/classes/package_rpm.bbclass |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)
Bian Naimeng - July 10, 2013, 2:56 a.m.
Hi all

Sorry, it looks like i should post this patch to poky. please ignore this

Thanks
 Bian

said the following on 2013-7-9 16:27:, Bian Naimeng wrote:
> If the spec file already exist, and has not been stored into pseudo's files.db,
> it maybe cause rpmbuild src.rpm fail, so remove it before doing rpmbuild src.rpm.
> 
> Signed-off-by: Bian Naimeng <biannm@cn.fujitsu.com>
> 
> ---
>  meta/classes/package_rpm.bbclass |    5 +++++
>  1 files changed, 5 insertions(+), 0 deletions(-)
> 
> diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
> index c654cdb..217ddcb 100644
> --- a/meta/classes/package_rpm.bbclass
> +++ b/meta/classes/package_rpm.bbclass
> @@ -1069,8 +1069,13 @@ python do_package_rpm () {
>          return
>  
>      # Construct the spec file...
> +    # If the spec file already exist, and has not been stored into 
> +    # pseudo's files.db, it maybe cause rpmbuild src.rpm fail,
> +    # so remove it before doing rpmbuild src.rpm.
>      srcname    = strip_multilib(d.getVar('PN', True), d)
>      outspecfile = workdir + "/" + srcname + ".spec"
> +    if os.path.isfile(outspecfile):
> +        os.remove(outspecfile)
>      d.setVar('OUTSPECFILE', outspecfile)
>      bb.build.exec_func('write_specfile', d)
Ross Burton - July 11, 2013, 10:54 a.m.
On 10 July 2013 03:56, Bian Naimeng <biannm@cn.fujitsu.com> wrote:
> Sorry, it looks like i should post this patch to poky. please ignore this

You were right the first time, meta/ is oe-core. :)

Ross
Bian Naimeng - July 12, 2013, 2:04 a.m.
said the following on 2013-7-11 18:54:, Burton, Ross wrote:
> On 10 July 2013 03:56, Bian Naimeng <biannm@cn.fujitsu.com> wrote:
>> Sorry, it looks like i should post this patch to poky. please ignore this
> 
> You were right the first time, meta/ is oe-core. :)
> 

Thanks for your reminding.

In this case, the following error will be caught.

   | error: Bad owner/group:  .../tmp/work/i586-poky-linux/.../xxx.spec
   | Building target platforms: i586-poky-linux
   |
   |
   | RPM build errors:
   |     Bad owner/group: .../tmp/work/i586-poky-linux/.../xxx.spec

The following bb file can cause this error.
# cat xxx.bb
  SRC_URI="..../xxx.src.rpm"

  do_unpack2 () {
          cd ${WORKDIR}
          tar zxvf xxx.tar.gz
  }
  addtask do_unpack2 after do_unpack before do_configure

Of course, we can walk around it by append "extract=xxx.tar.gz" to SRC_URI,
but it's not good way when the xxx.src.rpm containing lots of necessary files.

Thanks
 Bian

> Ross
>
Paul Eggleton - July 12, 2013, 5:07 p.m.
Hi Bian,

On Friday 12 July 2013 10:04:56 Bian Naimeng wrote:
> said the following on 2013-7-11 18:54:, Burton, Ross wrote:
> > On 10 July 2013 03:56, Bian Naimeng <biannm@cn.fujitsu.com> wrote:
> >> Sorry, it looks like i should post this patch to poky. please ignore this
> > 
> > You were right the first time, meta/ is oe-core. :)
> 
> Thanks for your reminding.
> 
> In this case, the following error will be caught.
> 
>    | error: Bad owner/group:  .../tmp/work/i586-poky-linux/.../xxx.spec
>    | Building target platforms: i586-poky-linux
>    | 
>    | RPM build errors:
>    |     Bad owner/group: .../tmp/work/i586-poky-linux/.../xxx.spec
> 
> The following bb file can cause this error.
> # cat xxx.bb
>   SRC_URI="..../xxx.src.rpm"
> 
>   do_unpack2 () {
>           cd ${WORKDIR}
>           tar zxvf xxx.tar.gz
>   }
>   addtask do_unpack2 after do_unpack before do_configure
> 
> Of course, we can walk around it by append "extract=xxx.tar.gz" to SRC_URI,
> but it's not good way when the xxx.src.rpm containing lots of necessary
> files.

Wouldn't using subdir=xyz in the SRC_URI entry put the contents of the rpm 
into a subdirectory and thus avoid this problem?

Cheers,
Paul
Bian Naimeng - July 15, 2013, 2:08 a.m.
Hi Paul,

said the following on 2013-7-13 1:07:, Paul Eggleton wrote:
> Hi Bian,
> 
> On Friday 12 July 2013 10:04:56 Bian Naimeng wrote:
>> said the following on 2013-7-11 18:54:, Burton, Ross wrote:
>>> On 10 July 2013 03:56, Bian Naimeng <biannm@cn.fujitsu.com> wrote:
>>>> Sorry, it looks like i should post this patch to poky. please ignore this
>>>
>>> You were right the first time, meta/ is oe-core. :)
>>
>> Thanks for your reminding.
>>
>> In this case, the following error will be caught.
>>
>>    | error: Bad owner/group:  .../tmp/work/i586-poky-linux/.../xxx.spec
>>    | Building target platforms: i586-poky-linux
>>    | 
>>    | RPM build errors:
>>    |     Bad owner/group: .../tmp/work/i586-poky-linux/.../xxx.spec
>>
>> The following bb file can cause this error.
>> # cat xxx.bb
>>   SRC_URI="..../xxx.src.rpm"
>>
>>   do_unpack2 () {
>>           cd ${WORKDIR}
>>           tar zxvf xxx.tar.gz
>>   }
>>   addtask do_unpack2 after do_unpack before do_configure
>>
>> Of course, we can walk around it by append "extract=xxx.tar.gz" to SRC_URI,
>> but it's not good way when the xxx.src.rpm containing lots of necessary
>> files.
> 
> Wouldn't using subdir=xyz in the SRC_URI entry put the contents of the rpm 
> into a subdirectory and thus avoid this problem?
> 

Thanks for your suggestion.
Yes, it's can avoid this problem.

But, why we don't remove the xxx.spec file before doing rpmbuild xx.src.rpm if it's existed.
The old xxx.spec is unuseful.

In my opinion, it can make the bb file easier and clean than using subdir=xyz in the SRC_URI

Thanks,
 Bian

> Cheers,
> Paul
>
Paul Eggleton - July 15, 2013, 9:47 a.m.
On Monday 15 July 2013 10:08:30 Bian Naimeng wrote:
> Hi Paul,
> 
> said the following on 2013-7-13 1:07:, Paul Eggleton wrote:
> > Hi Bian,
> > 
> > On Friday 12 July 2013 10:04:56 Bian Naimeng wrote:
> >> said the following on 2013-7-11 18:54:, Burton, Ross wrote:
> >>> On 10 July 2013 03:56, Bian Naimeng <biannm@cn.fujitsu.com> wrote:
> >>>> Sorry, it looks like i should post this patch to poky. please ignore
> >>>> this
> >>> 
> >>> You were right the first time, meta/ is oe-core. :)
> >> 
> >> Thanks for your reminding.
> >> 
> >> In this case, the following error will be caught.
> >> 
> >>    | error: Bad owner/group:  .../tmp/work/i586-poky-linux/.../xxx.spec
> >>    | Building target platforms: i586-poky-linux
> >>    | 
> >>    | RPM build errors:
> >>    |     Bad owner/group: .../tmp/work/i586-poky-linux/.../xxx.spec
> >> 
> >> The following bb file can cause this error.
> >> # cat xxx.bb
> >> 
> >>   SRC_URI="..../xxx.src.rpm"
> >>   
> >>   do_unpack2 () {
> >>   
> >>           cd ${WORKDIR}
> >>           tar zxvf xxx.tar.gz
> >>   
> >>   }
> >>   addtask do_unpack2 after do_unpack before do_configure
> >> 
> >> Of course, we can walk around it by append "extract=xxx.tar.gz" to
> >> SRC_URI, but it's not good way when the xxx.src.rpm containing lots of
> >> necessary files.
> > 
> > Wouldn't using subdir=xyz in the SRC_URI entry put the contents of the rpm
> > into a subdirectory and thus avoid this problem?
> 
> Thanks for your suggestion.
> Yes, it's can avoid this problem.
> 
> But, why we don't remove the xxx.spec file before doing rpmbuild xx.src.rpm
> if it's existed. The old xxx.spec is unuseful.

It's a tricky situation. I just think there's a limit to the lengths we should 
go to to prevent extraction of an archive that doesn't contain a subdirectory 
and may therefore extract files that clash with files the build system wants to 
write. In any case, this patch has now been merged.

> In my opinion, it can make the bb file easier and clean than using
> subdir=xyz in the SRC_URI

The subdir parameter is trivial to add, and my advice is that subdir should 
always be used when the archive doesn't contain a reasonable subdirectory and 
then you won't hit subtle problems like this one. 

Cheers,
Paul

Patch

diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass
index c654cdb..217ddcb 100644
--- a/meta/classes/package_rpm.bbclass
+++ b/meta/classes/package_rpm.bbclass
@@ -1069,8 +1069,13 @@  python do_package_rpm () {
         return
 
     # Construct the spec file...
+    # If the spec file already exist, and has not been stored into 
+    # pseudo's files.db, it maybe cause rpmbuild src.rpm fail,
+    # so remove it before doing rpmbuild src.rpm.
     srcname    = strip_multilib(d.getVar('PN', True), d)
     outspecfile = workdir + "/" + srcname + ".spec"
+    if os.path.isfile(outspecfile):
+        os.remove(outspecfile)
     d.setVar('OUTSPECFILE', outspecfile)
     bb.build.exec_func('write_specfile', d)