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?
Any help is appreciated, examples welcomed.
Thanks
On 09/27/2011 01:44 PM, 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).
Is there a command I can give so all the packages are compiled in one go?
Do I have to sort them in proper order (dependencies) or can I just
command to mock to check and sort them?
Any help is appreciated, examples welcomed.
Smock (which uses mock) might help:
"Smock is a thin wrapper around mock to let you build up a whole set of dependant RPMs against an external distro."
http://git.annexia.org/?p=fedora-mingw.git;a=tree;f=smock
Regards, Patrick
Време: 09/27/2011 01:52 PM, Patrick Lists пише:
On 09/27/2011 01:44 PM, 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).
Is there a command I can give so all the packages are compiled in one go?
Do I have to sort them in proper order (dependencies) or can I just
command to mock to check and sort them?
Any help is appreciated, examples welcomed.
Smock (which uses mock) might help:
"Smock is a thin wrapper around mock to let you build up a whole set of dependant RPMs against an external distro."
That is nice I will try it later today.
I have another (hopefully last) question. How do you build i686 packages in mock (or for that matter in rpmbuild)? Do you just change it's name? or use command option or change it in some macro?
On 09/27/2011 09:50 AM, Ljubomir Ljubojevic wrote:
Време: 09/27/2011 01:52 PM, Patrick Lists пише:
On 09/27/2011 01:44 PM, 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).
Is there a command I can give so all the packages are compiled in one go?
Do I have to sort them in proper order (dependencies) or can I just
command to mock to check and sort them?
Any help is appreciated, examples welcomed.
You need to somehow script the proper order and/or dependencies if you are using mock. You would also need to script something that would add the built packages into a repo if you need to build them "staged" (that is, you build package A and it is needed for Package B later ... you need some kind of script to move the .rpms from A into one of your repos and run createrepo on it before you build package B).
There are things that do staging for mock ... one is plague, the other is koji ... I am sure there are others.
Smock (which uses mock) might help:
"Smock is a thin wrapper around mock to let you build up a whole set of dependant RPMs against an external distro."
I have not used this ...
That is nice I will try it later today.
I have another (hopefully last) question. How do you build i686 packages in mock (or for that matter in rpmbuild)? Do you just change it's name? or use command option or change it in some macro?
You need to use a command like this to build i686 for mock:
setarch i686 mock --statedir="{somepath}/state" --resultdir="{some path to put built files}" -r "{some mock config file}" --arch="i686" {SRPM to build}
Here is some example scripts that I use for building mock packages (this is for the c5 mock we use for centos5 and is in c5 extras ... newer versions for c6 will have different options):
Време: 09/27/2011 05:31 PM, Johnny Hughes пише:
You need to somehow script the proper order and/or dependencies if you are using mock. You would also need to script something that would add the built packages into a repo if you need to build them "staged" (that is, you build package A and it is needed for Package B later ... you need some kind of script to move the .rpms from A into one of your repos and run createrepo on it before you build package B).
There are things that do staging for mock ... one is plague, the other is koji ... I am sure there are others.
Both those are complete systems, I was looking at little simpler solution, but will keep them in mind. I am for now even battling with mock and his applications and configuration.
I have another (hopefully last) question. How do you build i686 packages in mock (or for that matter in rpmbuild)? Do you just change it's name? or use command option or change it in some macro?
You need to use a command like this to build i686 for mock:
setarch i686 mock --statedir="{somepath}/state" --resultdir="{some path to put built files}" -r "{some mock config file}" --arch="i686" {SRPM to build}
Here is some example scripts that I use for building mock packages (this is for the c5 mock we use for centos5 and is in c5 extras ... newer versions for c6 will have different options):
Thanks, this will be very usefull.
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).
Is there a command I can give so all the packages are compiled in one go?
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@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@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@centos-5 ~]$ date Tue Jun 2 12:27:57 EDT 2009 [herrold@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@owlriver.com My words are not deathless prose, but they are mine.
Време: 09/27/2011 06:49 PM, R P Herrold пише:
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).
Is there a command I can give so all the packages are compiled in one go?
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:
<snip>
Thanks, I will look at those.
For manual rpmbuild, , I created following script (needs root or sudo access for yum) for automatic installation of dependency rpms:
#!/bin/bash
# rpm-depinstaller # Author: Ljubomir Ljubojevic <office a plnet.rs> # 31.01.2010
ls -C -1 -R -p $1 > 1_prelist-in.txt cat 1_prelist-in.txt | grep "src.rpm" | grep -v "/" > 2_list-in.txt
#exit # list="" # list=`ls *.rpm -R` list=`cat 2_list-in.txt` #list=$@ echo Lista je $list for i in $list; do rpmbuild --rebuild --nobuild -ba $i >& 3_text-in.txt cat 3_text-in.txt | grep needed >> 4_for_install-in.txt done
cat 4_for_install-in.txt | sort > 5_sorted_install_list.txt cat 4_for_install-in.txt | sort | cut -d " " -f1 | awk '{print $4 " " $1}' | sort | uniq > 6_sortedlist-in.txt cat 6_sortedlist-in.txt | awk '/^[0-9]/ { print ""; printf $0} !/^[0-9]/ {printf $0} END {print ""}' > 7_yumlist-in.txt #rm text.txt
yum install $(cat 7_yumlist-in.txt)
I deliberately avoided deleting log files, so I can debug or harvest data.