OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Thomas Lotterer
Root: /v/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-tools Date: 21-Sep-2006 17:19:56
Branch: HEAD Handle: 2006092116195500
Modified files:
openpkg-tools/cmd bf-db.pl bf-mk.pl bf-ui.pl src2make.pl
Log:
rename entities to follow simple MASTER/SLAVE model; update
documentation and remove obmtool.conf examples in favor of recently
integrated "openpkg build" commands
Summary:
Revision Changes Path
1.19 +1 -1 openpkg-tools/cmd/bf-db.pl
1.31 +213 -284 openpkg-tools/cmd/bf-mk.pl
1.27 +2 -2 openpkg-tools/cmd/bf-ui.pl
1.21 +1 -1 openpkg-tools/cmd/src2make.pl
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-tools/cmd/bf-db.pl
============================================================================
$ cvs diff -u -r1.18 -r1.19 bf-db.pl
--- openpkg-tools/cmd/bf-db.pl 1 Jan 2006 14:04:47 -0000 1.18
+++ openpkg-tools/cmd/bf-db.pl 21 Sep 2006 15:19:55 -0000 1.19
@@ -149,7 +149,7 @@
$osspcfg->parse($txt) || die "error parsing config file";
my $tree = $osspcfg->unpack(-index => '.*') || die "error unpacking
config file";
- foreach my $section (qw(master shared driver slaves)) {
+ foreach my $section (qw(master shared slave workbench)) {
foreach my $k (keys %{$tree->{$section}->[1]}) {
my $v = $tree->{$section}->[1]->{$k}->[1];
$v =~ s|%{([^}\.]+)}|%{$section.\1}|g; #expand shortcuts with
section omitted
@@ .
patch -p0 <<'@@ .'
Index: openpkg-tools/cmd/bf-mk.pl
============================================================================
$ cvs diff -u -r1.30 -r1.31 bf-mk.pl
--- openpkg-tools/cmd/bf-mk.pl 21 Sep 2006 15:11:11 -0000 1.30
+++ openpkg-tools/cmd/bf-mk.pl 21 Sep 2006 15:19:55 -0000 1.31
@@ -161,7 +161,7 @@
}
else {
my $cfg = &readconfig($opt_config);
- my $shared = $cfg->{"shared"}->{"prefix"} || die "mandatory setting
shared.prefix undefined";
+ my $shared = $cfg->{"shared"}->{"folder"} || die "mandatory setting
shared.folder undefined";
# if no files selected default to all files selected
unless ($opt_bashrc or $opt_bashlogin or $opt_key or $opt_master or
$opt_slave or $opt_worker) {
@@ -239,7 +239,7 @@
$osspcfg->parse($txt) || die "error parsing config file";
my $tree = $osspcfg->unpack(-index => '.*') || die "error unpacking
config file";
- foreach my $section (qw(master shared driver slaves)) {
+ foreach my $section (qw(master shared slave workbench)) {
foreach my $k (keys %{$tree->{$section}->[1]}) {
my $v = $tree->{$section}->[1]->{$k}->[1];
$v =~ s|%{([^}\.]+)}|%{$section.\1}|g; #expand shortcuts with
section omitted
@@ -300,12 +300,12 @@
my ($cfg) = @_;
# handle config
- my $shared = $cfg->{"shared"}->{"prefix"} || die "mandatory
setting shared.prefix undefined";
- my $slaves = $cfg->{"slaves"}->{"prefix"} || die "mandatory
setting slaves.prefix undefined";
- my $classes = $cfg->{"master"}->{"classes"} || die "mandatory
setting master.classes undefined";
- my $rsync = $cfg->{"master"}->{"rsync"} || die "mandatory
setting master.rsync undefined";
- my $src2make = $cfg->{"master"}->{"src2make"} || die "mandatory
setting master.src2make undefined";
- my $source = $cfg->{"master"}->{"source"} || die "mandatory
setting master.source undefined";
+ my $shared = $cfg->{"shared"}->{"folder"} || die "mandatory
setting shared.folder undefined";
+ my $workbench = $cfg->{"workbench"}->{"prefix"} || die "mandatory
setting workbench.prefix undefined";
+ my $classes = $cfg->{"master"}->{"classes"} || die "mandatory
setting master.classes undefined";
+ my $rsync = $cfg->{"master"}->{"rsync"} || die "mandatory
setting master.rsync undefined";
+ my $src2make = $cfg->{"master"}->{"src2make"} || die "mandatory
setting master.src2make undefined";
+ my $source = $cfg->{"master"}->{"source"} || die "mandatory
setting master.source undefined";
my $nosource = $cfg->{"master"}->{"nosource"};
my $skippkg = $cfg->{"master"}->{"skippkg"};
@@ -344,7 +344,7 @@
# run src2make
&shtoolechoe("%B++ MASTER:$shared: run src2make%b");
- system("$src2make --prefix=\"$slaves\" " .
+ system("$src2make --prefix=\"$workbench\" " .
"--srcdir=\"$shared/src/master\" " .
"--outdir=\"$shared/src/master\" " .
"--tmpdir=\"$shared/tmp/master\" " .
@@ -357,7 +357,7 @@
my ($cfg) = @_;
# handle config
- my $shared = $cfg->{"shared"}->{"prefix"} || die "mandatory
setting shared.prefix undefined";
+ my $shared = $cfg->{"shared"}->{"folder"} || die "mandatory
setting shared.folder undefined";
my $sshkeygen = $cfg->{"master"}->{"sshkeygen"} || die "mandatory
setting master.sshkeygen undefined";
# generate server DSA (SSH2) key
@@ -379,11 +379,11 @@
{
my ($cfg) = @_;
my $txt = <<'EOT';
-if [ ".$HOME" != ".%{shared.prefix}" ]; then
- echo ".bashrc:ERROR: HOME does not match %{shared.prefix}"
+if [ ".$HOME" != ".%{shared.folder}" ]; then
+ echo ".bashrc:ERROR: HOME does not match %{shared.folder}"
fi
-export PATH=%{shared.prefix}/bin:$PATH
-export PS1="[EMAIL PROTECTED] | %{driver.sed} -e 's;\..*$;;'`\$ "
+export PATH=%{shared.folder}/bin:$PATH
+export PS1="[EMAIL PROTECTED] | %{slave.sed} -e 's;\..*$;;'`\$ "
alias bf=%{master.ssh}
unset TMOUT
EOT
@@ -395,7 +395,7 @@
my ($cfg) = @_;
my $txt = <<'EOT';
. .bashrc
-echo " Welcome to the OpenPKG build farm %{shared.prefix}"
+echo " Welcome to the OpenPKG build farm %{shared.folder}"
echo ""
echo " connect to build-farm on slave via ssh(1)"
echo " $ bf <host>"
@@ -422,15 +422,15 @@
{
my ($cfg) = @_;
my $txt = <<'EOT';
-#!%{driver.sh}
+#!%{master.bash}
##
## This file was created by "openpkg bf-mk" and will be overwritten on
## any configuration change. Manual edits are a waste of time.
##
#main()
-HOST=`%{driver.hostname} | %{driver.sed} -e 's;\..*$;;'`
-if [ ".$TERM" = .screen -o ".$TERM" = .xterm ]; then %{driver.shtool} echo
-n "k$HOST [MASTER]\\"; fi
+HOST=`%{master.hostname} | %{master.sed} -e 's;\..*$;;'`
+if [ ".$TERM" = .screen -o ".$TERM" = .xterm ]; then %{master.shtool} echo
-n "k$HOST [MASTER]\\"; fi
exec %{master.bfmk} "$@"
EOT
@@ -441,7 +441,7 @@
{
my ($cfg) = @_;
my $txt = <<'EOT';
-#!%{driver.sh}
+#!%{slave.sh}
##
## This file was created by "openpkg bf-mk" and will be overwritten on
## any configuration change. Manual edits are a waste of time.
@@ -461,28 +461,28 @@
createslavestructure ()
{
# creating SHARED directory structure for SLAVE
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}:
creating SHARED directory structure for SLAVE%b"
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}:
creating SHARED directory structure for SLAVE%b"
for dir in ctl dst log src tmp; do
- target="%{shared.prefix}/$dir/$HOST-$ARCH-$OS"
- %{driver.shtool} mkdir -f -p -m 775 $target || die "cannot create
directory \"$target\""
+ target="%{shared.folder}/$dir/$HOST-$ARCH-$OS"
+ %{slave.shtool} mkdir -f -p -m 775 $target || die "cannot create
directory \"$target\""
done
- target="%{slaves.ltmp}"
- %{driver.shtool} mkdir -f -m 775 $target || die "cannot create directory
\"$target\""
+ target="%{workbench.ltmp}"
+ %{slave.shtool} mkdir -f -m 775 $target || die "cannot create directory
\"$target\""
}
cmd_list ()
{
# list package targets available to SLAVE
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}: list
package targets available to SLAVE%b"
- source="%{shared.prefix}/src/master"
- target="%{shared.prefix}/src/$HOST-$ARCH-$OS"
- %{driver.cp} $source/Makefile* $target/
- ( cd $target && %{driver.make} \
- LOG="%{shared.prefix}/log/$HOST-$ARCH-$OS" \
- SRC="%{shared.prefix}/src/$HOST-$ARCH-$OS" \
- DST="%{shared.prefix}/dst/$HOST-$ARCH-$OS" \
- TMP="%{slaves.ltmp}/$HOST-$ARCH-$OS" \
- EXEC_BFDB="%{slaves.bfdb}" \
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}: list
package targets available to SLAVE%b"
+ source="%{shared.folder}/src/master"
+ target="%{shared.folder}/src/$HOST-$ARCH-$OS"
+ %{slave.cp} $source/Makefile* $target/
+ ( cd $target && %{slave.make} \
+ LOG="%{shared.folder}/log/$HOST-$ARCH-$OS" \
+ SRC="%{shared.folder}/src/$HOST-$ARCH-$OS" \
+ DST="%{shared.folder}/dst/$HOST-$ARCH-$OS" \
+ TMP="%{workbench.ltmp}/$HOST-$ARCH-$OS" \
+ EXEC_BFDB="%{slave.bfdb}" \
EXEC_HOST="$HOST" \
list \
)
@@ -491,14 +491,14 @@
cmd_erase ()
{
# erase packages from SLAVE OpenPKG instance
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}: erase
packages from SLAVE OpenPKG instance%b"
- surplus=`%{slaves.rpm} -qa | sed -e 's;^openpkg-[^-][^-]*-[^-][^-]*$;;'
-e 's;^gpg-pubkey-[^-][^-]*-[^-][^-]*$;;'`
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}: erase
packages from SLAVE OpenPKG instance%b"
+ surplus=`%{workbench.rpm} -qa | sed -e
's;^openpkg-[^-][^-]*-[^-][^-]*$;;' -e 's;^gpg-pubkey-[^-][^-]*-[^-][^-]*$;;'`
if [ ".$surplus" = . ]; then
echo "instance already stripped to baseline, nothing to erase"
else
echo "erasing $surplus"
- %{slaves.rpm} -e $surplus
- surplus=`%{slaves.rpm} -qa | sed -e
's;^openpkg-[^-][^-]*-[^-][^-]*$;;' -e 's;^gpg-pubkey-[^-][^-]*-[^-][^-]*$;;'`
+ %{workbench.rpm} -e $surplus
+ surplus=`%{workbench.rpm} -qa | sed -e
's;^openpkg-[^-][^-]*-[^-][^-]*$;;' -e 's;^gpg-pubkey-[^-][^-]*-[^-][^-]*$;;'`
if [ ".$surplus" = . ]; then
echo "instance successfully stripped to baseline"
else
@@ -516,19 +516,19 @@
fi
# prepare SRPMs for SLAVE
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}:
prepare SRPMs for SLAVE%b"
- source="%{shared.prefix}/src/master"
- target="%{shared.prefix}/src/$HOST-$ARCH-$OS"
- %{driver.cp} $source/Makefile* $target/
- %{driver.rm} -f $target/*.src.rpm
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}:
prepare SRPMs for SLAVE%b"
+ source="%{shared.folder}/src/master"
+ target="%{shared.folder}/src/$HOST-$ARCH-$OS"
+ %{slave.cp} $source/Makefile* $target/
+ %{slave.rm} -f $target/*.src.rpm
for srpm in `cd $source && ls -1 *.src.rpm | sort`; do
- %{driver.ln} $source/$srpm $target/
+ %{slave.ln} $source/$srpm $target/
done
# erase obsolete DST packages for SLAVE
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}: erase
obsolete DST packages for SLAVE%b"
- reference="%{shared.prefix}/src/$HOST-$ARCH-$OS"
- cleanthis="%{shared.prefix}/dst/$HOST-$ARCH-$OS"
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}: erase
obsolete DST packages for SLAVE%b"
+ reference="%{shared.folder}/src/$HOST-$ARCH-$OS"
+ cleanthis="%{shared.folder}/dst/$HOST-$ARCH-$OS"
for item in `cd $cleanthis && ls 2>/dev/null -1 *-*-*.*-*-*.rpm \
| sed -e
's;^\(.*-[^-][^-]*-[^-][^-]*\)\.[^-][^-]*-[^-][^-]*-[^-][^-]*\.rpm$;\1;' \
| sort`; do #aide-0.10-20040920.ix86-freebsd4.10-openpkg.rpm =>
aide-0.10-20040920
@@ -538,9 +538,9 @@
done
# erase obsolete LOG files for SLAVE
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}: erase
obsolete LOG files for SLAVE%b"
- reference="%{shared.prefix}/src/$HOST-$ARCH-$OS"
- cleanthis="%{shared.prefix}/log/$HOST-$ARCH-$OS"
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}: erase
obsolete LOG files for SLAVE%b"
+ reference="%{shared.folder}/src/$HOST-$ARCH-$OS"
+ cleanthis="%{shared.folder}/log/$HOST-$ARCH-$OS"
for item in `cd $cleanthis && ls 2>/dev/null -1 *-*-*.log.*.*-*-* \
| sed -e
's;^\(.*-[^-][^-]*-[^-][^-]*\)\.log\.[^.][^.]*\.[^-][^-]*-[^-][^-]*-[^-][^-]*$;\1;'
\
| sort`; do #aide-0.10-20040206.log.dv1.ix86-freebsd4.9-openpkg =>
aide-0.10-20040206
@@ -552,7 +552,7 @@
cmd_erase
# SLAVE building packages
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}: SLAVE
building packages%b"
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}: SLAVE
building packages%b"
for package in $packages; do
case $package in
try-build-latest ) : ;;
@@ -573,7 +573,7 @@
cmd_support ()
{
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}: set
support identifiation for SLAVE%b"
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}: set
support identifiation for SLAVE%b"
support=""
[ ".$1" = .deprecated -o ".$1" = .deprecate -o ".$1" = .deprecat -o
".$1" = .depreca -o ".$1" = .deprec -o ".$1" = .depre -o ".$1" = .depr -o ".$1"
= .dep -o ".$1" = .de -o ".$1" = .d ] && support="deprecated"
[ ".$1" = .obsoleted -o ".$1" = .obsolete -o ".$1" = .obsolet -o ".$1" =
.obsole -o ".$1" = .obsol -o ".$1" = .obso -o ".$1" = .obs -o ".$1" = .ob -o
".$1" = .o ] && support="obsoleted"
@@ -583,7 +583,7 @@
if [ ".$support" = . ]; then
die "support must be one of \"deprecated\", \"obsoleted\",
\"supported\", \"tentative\", \"forecasted\""
fi
- %{slaves.bfdb} -i $HOST-$ARCH-$OS-$TAG -s $support support
+ %{slave.bfdb} -i $HOST-$ARCH-$OS-$TAG -s $support support
}
cmd_amend ()
@@ -591,22 +591,22 @@
createslavestructure
# amend DST packages for SLAVE
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}: amend
DST packages for SLAVE%b"
- amendthis="%{shared.prefix}/dst/$HOST-$ARCH-$OS"
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}: amend
DST packages for SLAVE%b"
+ amendthis="%{shared.folder}/dst/$HOST-$ARCH-$OS"
for item in `cd $amendthis && ls 2>/dev/null -1 *-*-*.*-*-*.rpm \
| sed -e
's;^\(.*-[^-][^-]*-[^-][^-]*\)\.[^-][^-]*-[^-][^-]*-[^-][^-]*\.rpm$;\1;' \
| sort`; do #aide-0.10-20040920.ix86-freebsd4.10-openpkg.rpm =>
aide-0.10-20040920
- %{slaves.bfdb} -i $HOST-$ARCH-$OS-$TAG -p $item -c green amend
+ %{slave.bfdb} -i $HOST-$ARCH-$OS-$TAG -p $item -c green amend
done
}
wipe ()
{
# wipe out SHARED areas belonging to SLAVE
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}: wipe
out SHARED areas belonging to SLAVE%b"
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}: wipe
out SHARED areas belonging to SLAVE%b"
for dir in bin ctl log src tmp; do
- target="%{shared.prefix}/$dir/$HOST-$ARCH-$OS"
- %{driver.rm} -rf || warn "cannot remove directory \"$target\""
+ target="%{shared.folder}/$dir/$HOST-$ARCH-$OS"
+ %{slave.rm} -rf || warn "cannot remove directory \"$target\""
done
}
@@ -637,37 +637,37 @@
{
round=1
while [ 1 ]; do
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}:
loop%b round $round"
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}:
loop%b round $round"
cmd_oneshot "$@"
- slavebreak="%{shared.prefix}/ctl/$HOST-$ARCH-$OS/slave.break"
+ slavebreak="%{shared.folder}/ctl/$HOST-$ARCH-$OS/slave.break"
if [ -f $slavebreak ]; then
- %{driver.shtool} echo -e "%B++ [EMAIL
PROTECTED]:%{shared.prefix}: found $slavebreak file%b";
+ %{slave.shtool} echo -e "%B++ [EMAIL
PROTECTED]:%{shared.folder}: found $slavebreak file%b";
ls -ld $slavebreak
cat <$slavebreak
break
else
- %{driver.shtool} echo -e "%B++ [EMAIL
PROTECTED]:%{shared.prefix}: no $slavebreak file found%b";
+ %{slave.shtool} echo -e "%B++ [EMAIL
PROTECTED]:%{shared.folder}: no $slavebreak file found%b";
fi
- slavebreak="%{shared.prefix}/ctl/slave.break"
+ slavebreak="%{shared.folder}/ctl/slave.break"
if [ -f $slavebreak ]; then
- %{driver.shtool} echo -e "%B++ [EMAIL
PROTECTED]:%{shared.prefix}: found $slavebreak file%b";
+ %{slave.shtool} echo -e "%B++ [EMAIL
PROTECTED]:%{shared.folder}: found $slavebreak file%b";
ls -ld $slavebreak
cat <$slavebreak
break
else
- %{driver.shtool} echo -e "%B++ [EMAIL
PROTECTED]:%{shared.prefix}: no $slavebreak file found%b";
+ %{slave.shtool} echo -e "%B++ [EMAIL
PROTECTED]:%{shared.folder}: no $slavebreak file found%b";
fi
round=`expr $round + 1`
done
}
#main()
-HOST=`%{driver.hostname} | %{driver.sed} -e 's;\..*$;;'`; [ ".$HOST" = . ]
&& die "HOST detection failed"
-ARCH=`%{slaves.rpm} --eval '%{l_host_arch}'`; [ ".$ARCH" = . ] && die "ARCH
detection failed"
-OS=`%{slaves.rpm} --eval '%{l_host_os}'`; [ ".$OS" = . ] && die "OS
detection failed"
-TAG=`%{slaves.rpm} --eval '%{l_tag}'`; [ ".$TAG" = . ] && die "TAG detection
failed"
-if [ ".$TERM" = .screen -o ".$TERM" = .xterm ]; then %{driver.shtool} echo
-n "k$HOST-$ARCH-$OS\\"; fi
+HOST=`%{slave.hostname} | %{slave.sed} -e 's;\..*$;;'`; [ ".$HOST" = . ] &&
die "HOST detection failed"
+ARCH=`%{workbench.rpm} --eval '%{l_host_arch}'`; [ ".$ARCH" = . ] && die
"ARCH detection failed"
+OS=`%{workbench.rpm} --eval '%{l_host_os}'`; [ ".$OS" = . ] && die "OS
detection failed"
+TAG=`%{workbench.rpm} --eval '%{l_tag}'`; [ ".$TAG" = . ] && die "TAG
detection failed"
+if [ ".$TERM" = .screen -o ".$TERM" = .xterm ]; then %{slave.shtool} echo -n
"k$HOST-$ARCH-$OS\\"; fi
cmd=""
if [ ".$1" = ".-s" -o ".$1" = ".--support" ]; then shift; cmd="support"; fi
@@ -691,7 +691,7 @@
{
my ($cfg) = @_;
my $txt = <<'EOT';
-#!%{driver.sh}
+#!%{slave.sh}
##
## This file was created by "openpkg bf-mk" and will be overwritten on
## any configuration change. Manual edits are a waste of time.
@@ -710,15 +710,15 @@
cmd_attach ()
{
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}:
attach to screen%b"
- cd %{shared.prefix} && exec %{master.screen} -r openpkg-buildfarm -p = -x
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}: attach
to screen%b"
+ cd %{shared.folder} && exec %{master.screen} -r openpkg-buildfarm -p = -x
}
cmd_create ()
{
- %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}:
create screens%b"
- instances=`cd %{shared.prefix}/src && echo *-*-*`
- screenrc="%{shared.prefix}/.screenrc"
+ %{slave.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.folder}: create
screens%b"
+ instances=`cd %{shared.folder}/src && echo *-*-*`
+ screenrc="%{shared.folder}/.screenrc"
( echo "##"
echo "## ~/.screenrc"
echo "##"
@@ -732,19 +732,19 @@
echo "defscrollback 10000"
echo "hardstatus alwayslastline \" OpenPKG build farm | %t |
%=%Y-%m-%d %c \""
) >$screenrc
- masterscreenrc="%{shared.prefix}/tmp/master/screenrc"
+ masterscreenrc="%{shared.folder}/tmp/master/screenrc"
( cat <$screenrc
- echo "screen -t \"$HOST [MASTER]\" %{driver.sh}"
+ echo "screen -t \"$HOST [MASTER]\" %{slave.sh}"
for inst in $instances; do
eval `echo "$inst" | sed -e
's/^\([^-][^-]*\)-\([^-][^-]*\)-\([^-][^-]*\)$/host="\1"; arch="\2"; os="\3";/'`
- echo "screen -t \"$host-$arch-$os\" %{master.ssh} -A -t -x $host
%{driver.sh}"
+ echo "screen -t \"$host-$arch-$os\" %{master.ssh} -A -t -x $host
%{slave.sh}"
done
echo "select 0"
) >$masterscreenrc
eval `%{master.sshagent} -s 2>/dev/null`
%{master.sshadd} -D </dev/null 2>/dev/null
%{master.sshadd} </dev/null || exit 1
- cd %{shared.prefix} && exec %{master.screen} -S openpkg-buildfarm -c
$masterscreenrc
+ cd %{shared.folder} && exec %{master.screen} -S openpkg-buildfarm -c
$masterscreenrc
}
usage ()
@@ -765,8 +765,8 @@
}
#main()
-HOST=`%{driver.hostname} | %{driver.sed} -e 's;\..*$;;'`
-if [ ".$TERM" = .screen -o ".$TERM" = .xterm ]; then %{driver.shtool} echo
-n "k$HOST [WORKER]\\"; fi
+HOST=`%{slave.hostname} | %{slave.sed} -e 's;\..*$;;'`
+if [ ".$TERM" = .screen -o ".$TERM" = .xterm ]; then %{slave.shtool} echo -n
"k$HOST [WORKER]\\"; fi
cmd=""
if [ ".$1" = ".-a" -o ".$1" = ".--attach" ]; then shift; cmd="attach"; fi
@@ -799,11 +799,11 @@
master {
# OpenPKG instance on MASTER doing the build
- # openpkg-team using prefix="/openpkg-bf/sw" on host="bf.openpkg.org"
+ # RE using prefix="/openpkg-bf/sw" on host="bf.openpkg.org"
#
prefix "@l_prefix@";
openpkg "%{prefix}/bin/openpkg";
- shtool "%{openpkg} shtool";
+ shtool "%{prefix}/bin/shtool";
src2make "%{openpkg} src2make";
rpm "%{openpkg} rpm";
rpm2cpio "%{openpkg} rpm2cpio";
@@ -811,10 +811,12 @@
bfmk "%{openpkg} bf-mk";
bfui "%{openpkg} bf-ui";
bfdb "%{openpkg} bf-db";
- rsync "%{prefix}/bin/rsync";
+ rsync "RSYNC_PASSWORD= %{prefix}/bin/rsync -v";
screen "%{prefix}/bin/screen";
grep "%{prefix}/bin/grep";
- sh "%{prefix}/bin/bash";
+ hostname "%{prefix}/bin/ghostname";
+ sed "%{prefix}/bin/sed";
+ bash "%{prefix}/bin/bash";
ssh "%{prefix}/bin/ssh";
sshadd "%{prefix}/bin/ssh-add";
sshagent "%{prefix}/bin/ssh-agent";
@@ -822,42 +824,31 @@
host "master.example.com";
# database file
- # openpkg-team using "%{prefix}/var/openpkg-tools/bf/db.sqlite"
+ # RE using "%{prefix}/var/openpkg-tools/bf/db.sqlite"
dbfile "%{prefix}/var/openpkg-tools/bf/db.sqlite";
# max. retries to get database lock
- # openpkg-team using 250
+ # RE using 250
lockretries 250;
# location to download SRPMs from using rsync(1)
- # openpkg-team using "rsync://rsync.openpkg.org/openpkg-pre"
+ # RE using "rsync://rsync.openpkg.org/openpkg-pre"
#
- source "rsync://rsync.openpkg.org/openpkg-ftp/current/SRC/";
+ source "rsync://[EMAIL
PROTECTED]@rsync.openpkg.org/openpkg-ftp/current/SRC/";
# location where master can download usable replacements for
.nosrc.rpm packages
# Empty setting inhibits download and effectivly disables processing
of .nosrc.rpm packages
- # openpkg-team using "/e/openpkg/PKG/src/"
+ # RE using "/v/openpkg/PKG/src/"
#
- nosource "rsync://rsync.openpkg.org/openpkg-ftp/private/SRC/";
+ nosource "rsync://[EMAIL
PROTECTED]@rsync.openpkg.org/openpkg-ftp/private/SRC/";
# let master prepare Makefile(.rules) for packages of the following
classes
- # openpkg-team using "+CORE+BASE-PLUS-EVAL-JUNK" for final release
build
+ # RE using "+CORE+BASE-PLUS-EVAL-JUNK" for final release build
classes "+CORE-BASE-PLUS-EVAL-JUNK";
# let master skip Makefile(.rules) preparation for packages matching
the following shell wildcard patterns
- # openpkg-team using ""
+ # RE using ""
skippkg "";
-};
-
-shared {
- # folder shared between MASTER and SLAVES, e.g. NFS mount
- # MASTER writes SRPMs, Makefile and Makefile.rules to
$SHARED/src/master/
- # MASTER uses $SHARED/tmp/ for caching SRPMs spec files
- # MASTER picks up logs from $SHARED/log/
- # SLAVES write logs to $SHARED/log and binaries to $SHARED/bin/
- # openpkg-team using "/e/openpkg/bf"
- #
- prefix "@l_prefix@/var/openpkg-tools/bf/shared";
# User account launching the actual work
# Must exist on MASTER and all SLAVES (consider NIS)
@@ -865,43 +856,52 @@
# Must have $HOME set to $SHARED
# Must be able to ssh to MASTER and all SLAVES
# logs in to MASTER and launches/reconnects screen(1) via "make" aka
"make all" aka "make worker"
- # openpkg-team using "openpkg-bf"
+ # RE using "openpkg-bf"
#
- worker "worker";
+ worker "openpkg-bf";
};
-slaves {
- # OpenPKG instance on SLAVES doing the build
- # openpkg-team using "/openpkg"
+shared {
+ # folder shared between MASTER and SLAVES, e.g. NFS mount
+ # MASTER writes SRPMs, Makefile and Makefile.rules to
$SHARED/src/master/
+ # MASTER uses $SHARED/tmp/ for caching SRPMs spec files
+ # MASTER picks up logs from $SHARED/log/
+ # SLAVES write logs to $SHARED/log and binaries to $SHARED/bin/
+ # RE using "/v/openpkg/bf"
#
- prefix "/bf/slaves";
- openpkg "%{prefix}/bin/openpkg";
- rpm "%{openpkg} rpm";
- bfdb "%{driver.ssh} [EMAIL PROTECTED] %{master.bfdb}";
-
- # large and fast temporary disk space for building
- # openpkg-team using "/ltmp/openpkg-bf"
- ltmp "/var/tmp";
+ folder "@l_prefix@/var/openpkg-tools/bf/shared";
};
-
-driver {
+slave {
# Place to find common (development) tools used by SLAVES
- # Might be a OpenPKG instance but can be OS stuff if available
- # openpkg-team using OpenPKG instance at "/usr/opkg"
+ # RE using OpenPKG instance at "/usr/opkg"
#
prefix "/bf/driver";
cp "cp";
- gcc "gcc";
- hostname "hostname";
+ gcc "%{prefix}/bin/gcc";
+ hostname "%{prefix}/bin/ghostname";
ld "ld";
ln "ln";
make "nice -20 make";
rm "rm";
- sed "sed";
+ sed "%{prefix}/bin/sed";
sh "/bin/sh";
- ssh "ssh";
- shtool "shtool";
+ ssh "%{prefix}/bin/ssh";
+ shtool "%{prefix}/bin/shtool";
+ bfdb "%{slave.ssh} [EMAIL PROTECTED] %{master.bfdb}";
+};
+
+workbench {
+ # OpenPKG instance on SLAVES doing the build
+ # RE using "/openpkg"
+ #
+ prefix "/bf/slaves";
+ openpkg "%{prefix}/bin/openpkg";
+ rpm "%{openpkg} rpm";
+
+ # large and fast temporary disk space for building
+ # RE using "/ltmp/openpkg-bf"
+ ltmp "/var/tmp";
};
EOT
@@ -994,197 +994,126 @@
The buildfarm is made of the following pieces:
- MASTER
+ MASTER INSTANCE
- Must be a OpenPKG instance that runs all the administrative
- software including "openpkg bf-mk", "openpkg bf-db" and the
- Apache web server executing a CGI wrapper for "openpkg bf-ui".
- Get the required dependencies by installing "openpkg-tools"
- package "with_bf yes". The master also stores the database.
+ OpenPKG instance that hosts all the software required by the
"master" command.
+ The master instance also stores the database.
+ Get the required dependencies by installing "openpkg-tools" package
"with_bf_master yes".
- DRIVER
+ SLAVE INSTANCE
- Can be native OS utilities or a OpenPKG instance providing
- common (development) tools, e.g. "make". Must be installed/
- configured on every machine hosting a SLAVE.
+ OpenPKG instance that hosts all the software required by the "slave"
command.
+ Get the required dependencies by installing "openpkg-tools" package
"with_bf_slave yes".
- SLAVES
+ WORKBENCH INSTANCE
- OpenPKG instances doing the actual build. They are controlled by
- a "slave" shell script which uses the DRIVER's tools.
+ OpenPKG scratch instance that performs the actual build, driven by
the "slave" command.
- SHARED
+ WORKER ACCOUNT
- A filesystem area accessible by the MASTER and all SLAVES. When
- multiple hosts are involved a NFS share can be used.
+ Unix shell account which can login to machines hosting the master
instance and on machines hosting a slave instance.
+ In local operation mode, the worker account may be shared across
machines using NIS.
+ The worker account on slave machines needs ssh access the worker
account on master machines.
- WORKER
+ SHARED FOLDER
- A UNIX shell account using SHARED as it's HOME. It must exist
- on all machines involved in the build farm. This account runs
- the "master" (wrapper for "openpkg bf-mk" on the machine hosting
- MASTER and the (generated) "slave" shell script on every host
- having SLAVES installed.
+ A filesystem area accessible by the worker account on the machine
hosting the master instance and accessible by the worker account on all
machines hosting a slave instance.
+ In local operation mode, the worker account running the "master"
command and worker account running the "slave" command share data through NFS.
+ In remote operation mode, the worker account running the "master"
command access the shared folder directly and the worker account running the
"slave" command access shared folder through rsync.
- Typical setup:
+ SETUP INSTRUCTIONS
- Install a MASTER, one or more SLAVES with DRIVER instances.
+ Install the MASTER INSTANCE
- mkdir /bf
- for i in master slaves driver; do \
- mkdir /d1/$i; \
- ln -s /d1/$i /bf/$i; \
- sh obmtool $i; \
- done
+ a) on a host with no slave instance
- Create a SHARED directory and a WORKER account
+ # sh openpkg-*-*.src.sh --prefix=/bf --user=bf --group=bf --tag=bf
+ # sh openpkg-*-*-*-*.sh
+ # su - bf
+ $ openpkg build -D with_bf_master=yes openpkg-tools | sh
- su - root
- ... /etc/passwd #worker:*:999:999::0:0:Build Farm
Worker:/bf/worker:/bf/master/lib/openpkg/bash
- ... /etc/group #worker:*:999:worker
- mkdir /d1/worker
- ln -s /d1/worker /bf/worker
- chown worker /bf/worker
- chgrp worker /bf/worker
+ b) on a host with a slave instance
- Initialize MASTER and adjust configuration verbose
+ # sh openpkg-*-*.src.sh --prefix=/bf --user=bf --group=bf --tag=bf
+ # sh openpkg-*-*-*-*.sh
+ # su - bf
+ $ openpkg build -D with_bf_master=yes -D with_bf_slave=yes
openpkg-tools | sh
- su - master
- openpkg bf-mk --init -V
- vi /bf/master/etc/openpkg-tools/bf.conf
+ Install a SLAVE INSTANCE on every build host
- Allow the WORKER to write the database via "openpkg bf-db"
+ # sh openpkg-*-*.src.sh --prefix=/bf --user=bf --group=bf --tag=bf
+ # sh openpkg-*-*-*-*.sh
+ # su - bf
+ $ openpkg build -D with_bf_slave=yes openpkg-tools | sh
- su - root
- mkdir /bf/master/var/openpkg-tools/bf
- chown master /bf/master/var/openpkg-tools/bf
- chgrp worker /bf/master/var/openpkg-tools/bf
- chmod 775 /bf/master/var/openpkg-tools/bf
+ Install a WORKBENCH INSTANCE on every build host
- let WORKER build SLAVES environment on SHARED directory from MASTER
config
+ # sh openpkg-*-*.src.sh --prefix=/openpkg --user=openpkg
--group=openpkg --tag=openpkg \
+ --muid="42000" --ruid="42001" --nuid="42002" \
+ --mgid="42000" --rgid="42001" --ngid="42002"
+ # sh openpkg-*-*-*-*.sh
+ # su - openpkg
+ $ echo 'openpkg_rc_all="yes"' >>~/etc/rc.conf
- su - worker /bf/master/bin/openpkg bf-mk
+ Create WORKER ACCOUNT
- enter WORKER area (and optionally repeat previous step)
+ Details are actually specific to the Unix system being used.
+ Create a user "worker" with primary group "worker" and homedir
~worker
- su - worker
- master
+ Initialize MASTER INSTANCE and adjust configuration verbose
- run WORKER to initialize screen(s)
+ # su - bf
+ $ openpkg bf-mk --init -V
+ $ vi ~/etc/openpkg-tools/bf.conf
- su - worker
- worker
+ Allow the WORKER ACCOUNT to write the configuration, if desired
- run MASTER once
+ # chgrp worker /bf/master/etc/openpkg-tools/bf.conf
+ # chmod g+w /bf/master/etc/openpkg-tools/bf.conf
- su - worker
- worker
- select MASTER screen
- master -1
+ Allow the WORKER ACCOUNT to write the database via "openpkg bf-db"
- run SLAVE in a loop
+ # mkdir /bf/master/var/openpkg-tools/bf
+ # chown master /bf/master/var/openpkg-tools/bf
+ # chgrp worker /bf/master/var/openpkg-tools/bf
+ # chmod 775 /bf/master/var/openpkg-tools/bf
- su - worker
- worker
- reattaches to screen, select SLAVE or create a new screen
- slave -l
+ Setup WORKER build environment on shared folder
- access database
+ # su - worker
+ $ /bf/bin/openpkg bf-mk
- su - root
- vi /bf/master/etc/apache/apache.conf
- adjust Apache config to listen on favorite <address>:<port>
- /bf/master/bin/openpkg rc apache start
- mozilla http://127.0.0.1/openpkg-cgi/openpkg-tools/bf-ui.cgi
+ Enter WORKER build environment
-=head1 PACKAGES
+ # su - worker
+ $ master
- Here is a list of required packages in obmtool.conf format which is
- easy to read for humans and can be used for automation verbatim.
+ Initialize screen
-##
-## obmtool.conf -- OpenPKG poor man's Boot, Build & Management Tool
Configuration
-## find obmtool at http://www.zfos.org/
-##
+ # su - worker
+ $ worker
+
+ Run MASTER once
+
+ # su - worker
+ $ worker
+ select the MASTER screen
+ $ master -1
-%common
- @hasfeature TAGFMT || exit 1 # require obmtool to support TAGFMT
+ run SLAVE in a loop
+
+ # su - worker
+ $ worker
+ reattaches to screen, select SLAVE or create a new screen
+ $ slave -l
-%master
- #openpkg build -Zu -D perl-dbi::with_dbd_sqlite perl-dbi perl-www apache
rsync cfg shtool openssh | sh build2obmtool.sh
- echo "---- boot/build ${NODE} %${CMD} ----"
- PREFIX=/bf/${CMD}
- @install openpkg-2.2.2-2.2.2 \
- --tag="${CMD}" \
- --prefix="${PREFIX}" \
- --user="${CMD}" --group="${CMD}"
- @install make-3.80-2.2.0
- @install binutils-2.14-2.2.0
- @install gcc-3.4.2-2.2.0
- @install perl-5.8.5-2.2.1
- @install cfg-0.9.7-20041219 --with=perl
- @install sqlite-2.8.15-2.2.0 --with=v3
- @install perl-openpkg-5.8.5-2.2.0
- @install perl-ds-5.8.5-2.2.0
- @install perl-time-5.8.5-2.2.0
- @install readline-5.0.0-2.2.0
- @install perl-term-5.8.5-2.2.0
- @install perl-sys-5.8.5-2.2.0
- @install openssl-0.9.7d-2.2.0
- @install perl-crypto-5.8.5-2.2.0
- @install perl-net-5.8.5-2.2.0
- @install perl-dbi-5.8.5-2.2.0 --with=dbd_sqlite
- @install sharutils-4.3.77-2.2.0
- @install ncurses-5.4.20041009-2.2.0
- @install texinfo-4.7-2.2.0
- @install diffutils-2.8.7-2.2.0
- @install pcre-5.0-2.2.0
- @install grep-2.5.1-2.2.0
- @install bzip2-1.0.2-2.2.0
- @install perl-util-5.8.5-2.2.0
- @install gzip-1.3.5-2.2.0
- @install perl-mail-5.8.5-2.2.0
- @install perl-ssl-5.8.5-2.2.0
- @install perl-parse-5.8.5-2.2.0
- @install zlib-1.2.1-2.2.0
- @install expat-1.95.8-2.2.0
- @install perl-xml-5.8.5-2.2.0
- @install perl-www-5.8.5-2.2.0
- @install gdbm-1.8.3-2.2.0
- @install apache-1.3.31-2.2.3
- @install rsync-2.6.3-2.2.0
- @install shtool-2.0.1-2.2.0
- @install fsl-1.5.0-2.2.0
- @install openssh-3.9p1-2.2.0
- @install screen-4.0.2-2.2.0
- @install openpkg-tools-0.8.28-20050124 --with=bf
-
-%slaves
- echo "---- boot/build ${NODE} %${CMD} ----"
- PREFIX=/bf/${CMD}
- @install openpkg-2.2.2-2.2.2 \
- --tag="${CMD}" \
- --prefix="${PREFIX}" \
- --user="${CMD}" --group="${CMD}"
-
-%driver
- # openpkg build -Zu make binutils gcc shtool openssh | sh
build2obmtool.sh
- echo "---- boot/build ${NODE} %${CMD} ----"
- PREFIX=/bf/${CMD}
- @install openpkg-2.2.2-2.2.2 \
- --tag="${CMD}" \
- --prefix="${PREFIX}" \
- --user="${CMD}" --group="${CMD}"
- @install openpkg-2.2.2-2.2.2
- @install make-3.80-2.2.0
- @install binutils-2.14-2.2.0
- @install gcc-3.4.2-2.2.0
- @install fsl-1.5.0-2.2.0
- @install perl-5.8.5-2.2.1
- @install shtool-2.0.1-2.2.0
- @install openssl-0.9.7d-2.2.0
- @install zlib-1.2.1-2.2.0
- @install openssh-3.9p1-2.2.0
+ access database
+
+ # su - bf
+ $ vi ~/etc/apache/apache.conf
+ adjust Apache config to listen on favorite <address>:<port>
+ $ openpkg rc apache start
+ browse to http://127.0.0.1/openpkg-cgi/openpkg-tools/bf-ui.cgi
=cut
@@ .
patch -p0 <<'@@ .'
Index: openpkg-tools/cmd/bf-ui.pl
============================================================================
$ cvs diff -u -r1.26 -r1.27 bf-ui.pl
--- openpkg-tools/cmd/bf-ui.pl 1 Jan 2006 14:04:48 -0000 1.26
+++ openpkg-tools/cmd/bf-ui.pl 21 Sep 2006 15:19:55 -0000 1.27
@@ -100,7 +100,7 @@
$osspcfg->parse($txt) || die "error parsing config file";
my $tree = $osspcfg->unpack(-index => '.*') || die "error unpacking
config file";
- foreach my $section (qw(master shared driver slaves)) {
+ foreach my $section (qw(master shared slave workbench)) {
foreach my $k (keys %{$tree->{$section}->[1]}) {
my $v = $tree->{$section}->[1]->{$k}->[1];
$v =~ s|%{([^}\.]+)}|%{$section.\1}|g; #expand shortcuts with
section omitted
@@ -138,7 +138,7 @@
# handle config
my $cfg = &readconfig($opt_config);
-my $shared = $cfg->{"shared"}->{"prefix"} || die "mandatory
setting shared.prefix undefined";
+my $shared = $cfg->{"shared"}->{"folder"} || die "mandatory
setting shared.folder undefined";
my $dbfile = $cfg->{"master"}->{"dbfile"} || die "mandatory
setting master.dbfile undefined";
my $lockretries = $cfg->{"master"}->{"lockretries"} || 250;
@@ .
patch -p0 <<'@@ .'
Index: openpkg-tools/cmd/src2make.pl
============================================================================
$ cvs diff -u -r1.20 -r1.21 src2make.pl
--- openpkg-tools/cmd/src2make.pl 21 Sep 2006 15:11:11 -0000 1.20
+++ openpkg-tools/cmd/src2make.pl 21 Sep 2006 15:19:55 -0000 1.21
@@ -968,7 +968,7 @@
$osspcfg->parse($txt) || die "error parsing config file";
my $tree = $osspcfg->unpack(-index => '.*') || die "error unpacking
config file";
- foreach my $section (qw(master shared driver slaves)) {
+ foreach my $section (qw(master shared slave workbench)) {
foreach my $k (keys %{$tree->{$section}->[1]}) {
my $v = $tree->{$section}->[1]->{$k}->[1];
$v =~ s|%{([^}\.]+)}|%{$section.\1}|g; #expand shortcuts with
section omitted
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [email protected]