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 openpkg-cvs@openpkg.org