OpenPKG CVS Repository
  http://cvs.openpkg.org/
  ____________________________________________________________________________

  Server: cvs.openpkg.org                  Name:   Thomas Lotterer
  Root:   /e/openpkg/cvs                   Email:  [EMAIL PROTECTED]
  Module: openpkg-tools                    Date:   26-Jan-2005 09:09:39
  Branch: HEAD                             Handle: 2005012608093900

  Modified files:
    openpkg-tools/cmd       bf-mk.pl

  Log:
    improve/correct manpage and bf.conf defaults; add screen prereq;
    generate convenience "worker" command;

  Summary:
    Revision    Changes     Path
    1.2         +143 -36    openpkg-tools/cmd/bf-mk.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: openpkg-tools/cmd/bf-mk.pl
  ============================================================================
  $ cvs diff -u -r1.1 -r1.2 bf-mk.pl
  --- openpkg-tools/cmd/bf-mk.pl        24 Jan 2005 15:37:51 -0000      1.1
  +++ openpkg-tools/cmd/bf-mk.pl        26 Jan 2005 08:09:39 -0000      1.2
  @@ -50,6 +50,7 @@
   my $opt_key        = 0;
   my $opt_master     = 0;
   my $opt_slave      = 0;
  +my $opt_worker     = 0;
   my $opt_oneshot    = 0;
   my $opt_loop       = 0;
   my $opt_init       = 0;
  @@ -94,6 +95,7 @@
             " -k|key             generate .ssh/ keys\n" .
             " -m|master          generate bin/master wrapper\n" .
             " -s|slave           generate bin/slave script\n" .
  +          " -w|worker          generate bin/worker script\n" .
             " -1|oneshot         run master once\n" .
             " -l|loop            run master in a loop\n" .
             " -i|init            init mode\n" .
  @@ -111,7 +113,7 @@
             "Notes on query mode";
             " with -q variables can be printed, e.g. 
\"prefix=%{master.prefix}\"\n";
             "Notes on shared setup mode";
  -          " with -[rlkms] only selected files are generated, otherwise 
all\n" .
  +          " with -[rlkmsw] only selected files are generated, otherwise 
all\n" .
             " with -o is written to given file otherwise to proper 
destination\n";
       exit(1) if (defined $level);
       exit(0);
  @@ -126,6 +128,7 @@
       'k|key'          => \$opt_key,
       'm|master'       => \$opt_master,
       's|slave'        => \$opt_slave,
  +    'w|worker'       => \$opt_worker,
       '1|oneshot'      => \$opt_oneshot,
       'l|loop'         => \$opt_loop,
       'i|init'         => \$opt_init,
  @@ -162,12 +165,13 @@
       my $shared = $cfg->{"shared"}->{"prefix"} || die "mandatory setting 
shared.prefix 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) {
  +    unless ($opt_bashrc or $opt_bashlogin or $opt_key or $opt_master or 
$opt_slave or $opt_worker) {
           $opt_bashrc = 1;
           $opt_bashlogin = 1;
           $opt_key = 1;
           $opt_master = 1;
           $opt_slave = 1;
  +        $opt_worker = 1;
       }
   
       if ($opt_oneshot) {
  @@ -194,6 +198,7 @@
           &writefile("$shared/.bash_login", $opt_outfile, 0644, 
&gen_bashlogin($cfg)) if($opt_bashrc);
           &writefile("$shared/bin/master",  $opt_outfile, 0755, 
&gen_master($cfg))    if($opt_master);
           &writefile("$shared/bin/slave",   $opt_outfile, 0755, 
&gen_slave($cfg))     if($opt_slave);
  +        &writefile("$shared/bin/worker",  $opt_outfile, 0755, 
&gen_worker($cfg))    if($opt_worker);
       }
   }
   #   die gracefully ;-)
  @@ -389,6 +394,21 @@
       my ($cfg) = @_;
       my $txt = <<'EOT';
   . .bashrc
  +echo "    Welcome to the OpenPKG build farm %{shared.prefix}"
  +echo ""
  +echo "    recreate scripts and config based on %{master.host} configuration"
  +echo "    $ master"
  +echo "    "
  +echo "    run WORKER (attach to or create screens)"
  +echo "    $ worker"
  +echo ""
  +echo "    run MASTER (define work for slaves)"
  +echo "    $ master -1 #oneshot"
  +echo "    $ master -l #loop"
  +echo ""
  +echo "    run SLAVE (do the work)"
  +echo "    $ slave -1 #oneshot"
  +echo "    $ slave -l #loop"
   EOT
       return &subst($cfg, $txt);
   }
  @@ -429,19 +449,6 @@
       exit 1
   }
   
  -assert ()
  -{
  -    [ ".%{shared.prefix}" != . ] || die "SHARED directory not configured"
  -    [ -d "%{shared.prefix}" ] || die "shared prefix \"%{shared.prefix}\" 
does not exist on this machine"
  -    cd %{shared.prefix} || die "cannot change directory to shared prefix 
\"%{shared.prefix}\""
  -    [ -x "%{driver.shtool}" ] || die "driver shtool(1) \"%{driver.shtool}\" 
not executable"
  -    [ -x "%{driver.sudo}" ] || die "driver sudo(1) \"%{driver.sudo}\" not 
executable"
  -    [ ".%{slaves.prefix}" != . ] || die "SLAVES prefix not configured"
  -    [ -d "%{slaves.prefix}" ] || die "slave prefix \"%{slaves.prefix}\" does 
not exist on this machine"
  -    [ -d "%{slaves.ltmp}" ] || die "large temporary disks space 
\"%{slaves.ltmp}\" missing"
  -    [ ".%{slaves.bfdb}" != . ] || die "SLAVES bfdb not configured"
  -}
  -
   oneshot ()
   {
       #   creating SHARED directory structure for SLAVE
  @@ -528,9 +535,6 @@
   }
   
   #main()
  -assert
  -
  -#   configuration queried from SLAVE
   HOST=`%{driver.hostname} | %{driver.sed} -e 's;\..*$;;'`
   ARCH=`%{slaves.rpm} --eval '%{l_host_arch}'`
   OS=`%{slaves.rpm} --eval '%{l_host_os}'`
  @@ -550,6 +554,96 @@
       return &subst($cfg, $txt);
   }
   
  +sub gen_worker ($)
  +{
  +    my ($cfg) = @_;
  +    my $txt = <<'EOT';
  +#!%{driver.sh}
  +##
  +##  This file was created by "openpkg bf-mk" and will be overwritten on
  +##  any configuration change. Manual edits are a waste of time.
  +##
  +
  +warn ()
  +{
  +    echo "$0:WARNING: $1"
  +}
  +
  +die ()
  +{
  +    echo "$0:ERROR: $1"
  +    exit 1
  +}
  +
  +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 =
  +}
  +
  +cmd_create ()
  +{
  +    %{driver.shtool} echo -e "%B++ [EMAIL PROTECTED]:%{shared.prefix}: 
create screens%b"
  +    instances=`cd %{shared.prefix}/src && echo *-*-*`
  +    screenrc="%{shared.prefix}/tmp/master/screenrc"
  +    ( echo "vbell off"
  +      echo "screen -t \"$HOST [MASTER]\" %{driver.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}"
  +      done
  +      echo "select 0"
  +    ) >$screenrc
  +    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 
$screenrc
  +}
  +
  +usage ()
  +{
  +    level="$1";
  +    if [ ".$1" != . ]; then level="$level:"; fi
  +
  +    ( echo "$0:$level Usage: $0 [options]"
  +      echo "Available options:"
  +      echo " -a|attach          attach to screen"
  +      echo " -c|create          create screens"
  +      echo " -H|help            print out this usage page"
  +      echo "To reconfigure settings, change bf.conf on the MASTER"
  +      echo " and regenerate environment using \"master\""
  +    ) >&2
  +    if [ ".$1" != . ]; then exit 1; fi
  +    exit 0
  +}
  +
  +#main()
  +HOST=`%{driver.hostname} | %{driver.sed} -e 's;\..*$;;'`
  +ARCH=`%{slaves.rpm} --eval '%{l_host_arch}'`
  +OS=`%{slaves.rpm} --eval '%{l_host_os}'`
  +
  +cmd=""
  +if [ ".$1" = ".-a" -o ".$1" = ".--attach" ]; then cmd="attach"; fi
  +if [ ".$1" = ".-c" -o ".$1" = ".--create" ]; then cmd="create"; fi
  +if [ ".$1" = ".-H" -o ".$1" = ".--help" ];   then cmd="help"; fi
  +if [ ".$cmd" = .help ]; then usage; fi
  +
  +# fallback to command autodetection
  +if [ ".$cmd" = . ]; then
  +    if [ ".`%{master.screen} -list | %{master.grep} openpkg-buildfarm`" != . 
]; then
  +        cmd="attach"
  +    else
  +        cmd="create"
  +    fi
  +fi
  +
  +if [ ".$cmd" = . ]; then usage "ERROR"; fi
  +cmd_$cmd
  +exit 1
  +EOT
  +    return &subst($cfg, $txt);
  +}
  +
   sub init_bfconf ()
   {
       my $txt = <<'EOT';
  @@ -558,8 +652,8 @@
   ##
   
   master {
  -    #   OpenPKG instance on SLAVES doing the build
  -    #   openpkg-team using "/openpkg"
  +    #   OpenPKG instance on MASTER doing the build
  +    #   openpkg-team using prefix="/openpkg-bf/sw" on host="bf.openpkg.org"
       #
       prefix      "@l_prefix@";
       openpkg     "%{prefix}/bin/openpkg";
  @@ -572,10 +666,12 @@
       db          "%{prefix}/var/openpkg-tools/bf/db.sqlite";
       rsync       "%{prefix}/bin/rsync";
       screen      "%{prefix}/bin/screen";
  -    shell       "%{prefix}/bin/bash";
  -    sshkeygen   "%{prefix}/bin/ssh-keygen";
  +    grep        "%{prefix}/bin/grep";
  +    sh          "%{prefix}/bin/bash";
  +    ssh         "%{prefix}/bin/ssh";
       sshadd      "%{prefix}/bin/ssh-add";
       sshagent    "%{prefix}/bin/ssh-agent";
  +    sshkeygen   "%{prefix}/bin/ssh-keygen";
       host        "master.example.com";
   
       #   database file
  @@ -645,21 +741,21 @@
   driver {
       #   Place to find common (development) tools used by SLAVES
       #   Might be a OpenPKG instance but can be OS stuff if available
  -    #   openpkg-team using "/usr/opkg"
  +    #   openpkg-team using OpenPKG instance at "/usr/opkg"
       #
       prefix      "/bf/driver";
  -    gcc         "%{prefix}/bin/gcc";
  -    ld          "%{prefix}/bin/ld";
  -    make        "%{prefix}/bin/make";
  -    sh          "/bin/sh";
  -    shtool      "%{prefix}/lib/openpkg/shtool";
  -    sudo        "%{prefix}/bin/sudo";
  -    sudoers     "%{prefix}/etc/sudo/sudoers";
  -    hostname    "hostname";
  -    sed         "sed";
       cp          "cp";
  +    gcc         "gcc";
  +    hostname    "hostname";
  +    ld          "ld";
       ln          "ln";
  +    make        "make";
       rm          "rm";
  +    sed         "sed";
  +    sh          "/bin/sh";
  +    shtool      "shtool";
  +    sudo        "sudo";
  +    sudoers     "/etc/sudoers";
   };
   
   EOT
  @@ -696,7 +792,7 @@
     master oneshot: -1
     master loop:    -l
     query mode:     -q
  -  setup mode:     [-rlkms]
  +  setup mode:     [-rlkmsw]
   
   =head1 DESCRIPTION
   
  @@ -735,6 +831,7 @@
         [-k|key]           generate .ssh/ keys
         [-m|master]        generate bin/master wrapper
         [-s|slave]         generate bin/slave script
  +      [-w|worker]        generate bin/worker script
   
     common options
   
  @@ -834,15 +931,24 @@
           su - worker
           master
   
  +    run WORKER to initialize screen(s)
  +
  +        su - worker
  +        worker
  +
       run MASTER once
   
           su - worker
  +        worker
  +        select MASTER screen
           master -1
   
  -    run SLAVE once
  +    run SLAVE in a loop
   
           su - worker
  -        slave -1
  +        worker
  +        reattaches to screen, select SLAVE or create a new screen
  +        slave -l
   
       access database
   
  @@ -889,7 +995,6 @@
       @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 openpkg-tools-0.8.28-20050124 --with=bf
       @install sharutils-4.3.77-2.2.0
       @install ncurses-5.4.20041009-2.2.0
       @install texinfo-4.7-2.2.0
  @@ -912,6 +1017,8 @@
       @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} ----"
  @@ .
______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
CVS Repository Commit List                     openpkg-cvs@openpkg.org

Reply via email to