[CentOS-devel] Advice on compiling multiple packages with mock

Tue Sep 27 16:49:56 UTC 2011
R P Herrold <herrold at owlriver.com>

On Tue, 27 Sep 2011, Ljubomir Ljubojevic wrote:

> Can someone point me in the right direction? How do you compile multiple
> packages continuously with mock?
>
> I have some 50 srpms waiting to be recompiled via mock for both i386 and
> x86_64 (again).
>
> 1. Is there a command I can give so all the packages are compiled in one go?
>
> 2. Do I have to sort them in proper order (dependencies) or can I just
> command to mock to check and sort them?

A naiive build algorithm simply submits and checks the return

Build Requirements are readily queriable, and testable as to 
whether they are met; as such one need not pay the time cost 
of enqueuing a build that is pre-ordained to fail by doing 
minimal checking first

Driving such a system off of versioned BR's require a bit more 
logic than that of the last paragraph, and may not always be 
'correct'

Mutual cross-dependant BR's require manual solution 'out of 
band' of a submission engine, usually by 'short circuiting' 
around one missing 'leg' of such a cross-dependency; this kind 
of issue can also solved in .spec file conditionals logic, 
keyed on '--defines', although this is not seen in the CentOS 
project's upstream very often

>From my notes on the topic:

[herrold at centos-5 R2spec]$ cat aa_README

To break dependency loops


1.      identify a pair (or more) of affected packages

2.      note up top the circular:
#       circular on: R-acme and R-beta -- parent seems to be: 
R-acme

3.      add to each package: 1) %check conditional header,
                 see: R-graph.spec

of the form:

#       check by default -- to break circular BR's use:
#       $ rpmbuild --define 'nocheck 1' [--nodeps] ...
%define docheck 0
%if "%{nocheck}" != "1"
%define docheck 1
%define nocheck 0
%endif

                 2) mark the Release, and

of the form:

Release:          1%{?dist}.%{docheck}%{nocheck}


                 3) %check stanza patches

of the form:

%if "%{docheck}" == "1"
%check
%{_bindir}/R CMD check %{packname}
%endif


4.      build the likely parent with the following:

         rpmbuild -ba --nodeps --define 'nocheck 1'    acme.spec

5.      Assuming the acme build succeeds, install it 'nodeps' 
thus:

         sudo rpm -Uvh --nodeps   acme-result.01.whatever

6.      Assuming the acme install succeeds, build the 
subordinate in a usualfashion:

         rpmbuild -ba     beta.spec

7.      Assuming the beta build succeeds, install it conventionally:

         sudo rpm -Uvh   beta-result.10.whatever

8.      Assuming the beta install succeeds, build the parent 
in a usualfashion:

         rpmbuild -ba     acme.spec

9.      Assuming a clean build, remove the bootstrap 'acme' 
binary thus:

         sudo rpm -e --nodeps acme
                 - and -
         sudo rpm -Uvh acme-result.10.whatever

10.     files ending in ".01" are still needing solution and a
         non-nodeps build; files ending: ".10" are done

         rpm -qa | grep ^R | grep "\.[01][01]$"

[herrold at centos-5 ~]$ rpm -qa | grep ^R | grep "\.[01][01]$"
R-Hmisc-3.6_0-1orc.01
R-sm-2.2-1orc.10
R-igraph-0.5.2_2-1orc.10
R-rpanel-1.0-1orc.10
R-maps-2.1-1orc.10
R-graph-1.22.2-1orc.10
R-mapproj-1.1_7.2-1orc.10
[herrold at centos-5 ~]$ date
Tue Jun  2 12:27:57 EDT 2009
[herrold at centos-5 ~]$

and R-Hmisc is blocked by packaging problems in:
         R-TeachingDemos and R-Design

----------------------
~/build/R/R2spec/aa_README
rev: 090608

============================

A sample .spec file demonstrating this is at:

 	http://gallery.herrold.com/R-Hmisc.spec

As I have mentioned before, I have privately packaged most of 
the R finance, stats, and econometric packages.  Not all are 
of a License re-distributable form, sadly

  - Russ herrold

--
end
==================================
  .-- -... ---.. ... -.- -.--
Copyright (C) 2011 R P Herrold
       herrold at owlriver.com
    My words are not deathless prose,
       but they are mine.