Changes between Initial Version and Version 1 of GIR2.1_GushProto


Ignore:
Timestamp:
03/14/11 21:56:55 (11 years ago)
Author:
lnevers@bbn.com
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • GIR2.1_GushProto

    v1 v1  
     1== GUSH Evaluation ==
     2
     3GENI User Shell (GUSH) provides an execution management system that allows users to describe
     4an experiment in an XML file, and Gush uses the xml file to locate, and prepare resources
     5through interactions with GENI Clearinghouses. Gush will run and clean-up the experiment.
     6
     7Software can be checked out from the [http://gush.cs.williams.edu/svn/gush/trunk GUSH SVN Repository]
     8using username '''guest''' and password is provided out of band. Software revisions used
     9were 106, 107 and 108. The update from 106 to 107 to 108 modified the following files:
     10{{{
     11Update from 106 to 107:
     12U    gush.prefs
     13U    tests/simple.xml
     14U    Makefile.in
     15G    main.cc
     16G    Makefile
     17Updates from 107 to 108:
     18U    helper-scripts/setup.pl
     19}}}
     20
     21Successful compilation was achieved with both version 107 and 108, but not 106.
     22
     23Time frame: Evaluation took place between June 1-30, 2010.
     24
     25== Gush Findings ==
     26
     27List of pre-requisites is fairly extensive. Versioning information is not captured in the instructions.
     28Several attempts to compile tools on Ubuntu 9.10 (karmic) failed, due to gcc 4.4.1 differences with
     29gcc 4.2.4.  Although developer has run tools on the following Operating Systems:
     30 * Linux 2.6 (Fedora, Debian, Ubuntu)
     31 * Mac OS X
     32 * FreeBSD
     33
     34Successful compilation On Ubuntu 9.10 was achieved with upgrade of GUSH to revision 107 and the following:
     35 * downgraded gcc 4.4.1 to gcc 4.2.4
     36 * downgraded g++ 4.3 to g++ 4.2
     37 * Added '#include <limits.h>' to main.cc
     38 * Added '#include <strings.h>' to main.cc
     39 * Could not configure static configuration to simplify compilation.
     40
     41Before using Gush, you must obtain an account and slice on !PlanetLab. Once you have the slice, the following must be considered for each experiment:
     42 * The gush software installs a client process on each node that is part of the experiment. 
     43 * A port must be reserved at !PlanetLab for GUSH clients to communicate with the GUSH Server.
     44
     45''' Reserving a port with !PlanetLab '''
     46
     47To reserve a port, sign up for a port at [http://planetflow.planet-lab.org/#port port registration site].
     48Once reserved, send an email to support@planet-lab.org requesting the following slice changes:
     49{{{
     50 1. the 'goodfences' vsys privilege.
     51 2. the slice tag: vsys_portreservation, with the value set to the port number reserved.
     52}}}
     53
     54Once support has made the changes to the slice, they can be seen in its definition:
     55
     56[[Image(2010-07-14_bbn_gusheval.jpg)]]
     57
     58== GUSH How-to ==
     59
     60A README.txt is enclosed which captures all pre-requisites and compilation steps
     61required to build GUSH.  README.txt content:
     62
     63{{{
     64Gush is written in a mix of C++ and Perl, and we intend for it to be runnable on
     65any UNIX-ish OS. That said, we have been using it primarily with Linux 2.6.
     66
     67Compiling Gush can be challenging, so please contact us if you experience
     68too many problems.  Gush requires the following libraries:
     69
     70    * xmlrpc-c: libxmlrpc_client++, libxmlrpc_client,
     71      libxmlrpc_server_abyss++, libxmlrpc_server++,
     72      libxmlrpc_server_abyss, libxmlrpc_server,
     73      libxmlrpc_abyss, libxmlrpc++, libxmlrpc,
     74      libxmlrpc_util, libxmlrpc_xmlparse, libxmlrpc_xmltok
     75     
     76      Note: lbxmlrpc-c3 will not work. xmlrpc-c must be
     77      installed, and to my knowledge, there is no debian package available.
     78
     79    * curl: libcurl
     80    * xml2: libxml2
     81    * zlib compression/decompression: libz
     82    * math: libm
     83    * openssl (version 0.9.8e): libssl, libcrypto
     84    * dynamic linking: libdl
     85    * readline: libreadline
     86    * curses: libcurses
     87    * intl domain names: libidn
     88    * pthreads: libpthread (NOTE: NPTL recommended)
     89
     90    The ares library (libares) for asynchronous DNS lookups is optional,
     91    though recommended for performance on PlanetLab. The boost
     92    software package is also required, as well as lex and yacc
     93    (we use flex and bison).
     94
     95    Gush uses some Perl helper scripts. If you want Gush to automatically
     96    interface with the PlanetLab Central (PLC) database for you, you will
     97    need to have Frontier::Client and Crypt::SSLeay properly installed.
     98    We'll get to that in the next step.
     99
     100Getting and building the code
     101
     102    After downloading the code from SVN, follow the instructions below
     103    from a Linux host. NOTE: This statically compiles gush and client. Remove
     104    the --with-static compile flags to compile dynamically (which may be
     105    easier to configure).
     106
     107    Compiling Gush
     108      $ cd gush
     109      $ autoconf
     110      $ ./configure --with-static-client --with-static-gush
     111      $ make dep
     112      $ make
     113
     114    Setting up Gush
     115      $ perl helper-scripts/setup.pl
     116
     117That should be it!  Let us know if you have problems.  This is still a work
     118in progress!
     119
     120For more info, please visit http://gush.cs.williams.edu
     121}}}
     122
     123Pre-requisite packages and libraries installed and the origin of each download:
     124
     125 * xmlrpc-c-1.06.40.tgz from http://sourceforge.net/projects/xmlrpc-c/
     126 * curl-7.20.1.tar.gz from http://www.softpedia.com/get/Programming/File-Editors/cURL.shtml
     127 * libxml2-git-snapshot.tar.gz from http://www.xmlsoft.org/downloads.html
     128 * zlib-1.2.5.tar.gz from http://www.zlib.net/
     129 * libdl.1.dylib from http://cogent.psyc.bbk.ac.uk/libdl/
     130 * libcureses from http://packages.ubuntu.com/en/jaunty/i386/libcurses-ocaml-dev/download
     131 * libidn  from http://www.gnu.org/software/libidn/#downloading
     132
     133Additionally had to install Perl modules Frontier::Client and Crypt::SSLeay.
     134
     135''' Gush Setup '''
     136
     137Instructions can be found at the [http://gush.cs.williams.edu/trac/gush/wiki/UsingGush Using Gush] page. Once the gush software is compiled, a setup script is provided to define several settings.  Below is capture for the settings used in this evaluation effort:
     138{{{
     139$ perl helper-scripts/setup.pl
     140Please select from the following options:
     141  1. Configure known hosts
     142  2. Configure Gush preferences
     143  3. Quit
     144> 1
     145Gush uses SSH and TCP to authenticate and run executables on remote
     146hosts. To do this, Gush must know (a) which hosts it can use,
     147and (b) how to authenticate to them. We will first handle the
     148big cases, like PlanetLab, and then you will get the chance to
     149add any other hosts you would like to use.
     150
     151Do you have a PlanetLab account (Y/N) [N]? Y
     152
     153Gush can automatically query the PlanetLab database for
     154your slice information, renew your slices, and change the
     155hosts assigned to your slice. To do this, it must have
     156your planet-lab.org login (probably your email address)
     157and password. Your password is stored in the clear in a
     158separate file on the local disk.
     159
     160Please enter your planet-lab.org login: lnevers@bbn.com
     161Please enter your planet-lab.org password:
     162Please confirm your planet-lab.org password:
     163Please wait while we fetch a recent version of the
     164PlanetLab host set ...
     165
     166
     167All done configuring PlanetLab. Writing files...
     168Please enter your PlanetLab slice: bbn_gusheval
     169Please choose a port for this slice (use a different port for each slice): 61414
     170Please enter your PlanetLab slice:
     171Now we will configure any other hosts that you wish Gush to use.
     172You can select any host that can be reached via SSH without password
     173prompting (e.g. pubkey, kerberos tickets, ...).
     174
     175Enter a hostname of the form host:port (empty to finish):
     176
     177No more questions! Writing directory file...
     178Done.
     179
     180Please select from the following options:
     181  1. Configure known hosts
     182  2. Configure Gush preferences
     183  3. Quit
     184> 2
     185To skip a preference, just hit enter.
     186
     187Enter your preferred ClientPath (i.e., /home/slice_name/): ./
     188Enter your preferred ClientPrefix (i.e., ./): ./
     189Do you plan to use PlanetLab? (Y/N) [Y]: y
     190Done.
     191
     192Please select from the following options:
     193  1. Configure known hosts
     194  2. Configure Gush preferences
     195  3. Quit
     196> 3
     197}}}
     198
     199The above script generates 2 files:
     200
     201 * gush.prefs
     202{{{
     203<preferences>
     204    <pref key="ClientPath">./</pref>
     205    <pref key="ClientPrefix">./</pref>
     206    <pref key="UsePlanetLab">true</pref>
     207</preferences>
     208}}}
     209 * directory.xml
     210{{{
     211<?xml version="1.0" encoding="UTF-8"?>
     212<gush>
     213    <resource_manager type="planetlab">
     214        <user>lnevers@bbn.com</user>
     215        <allsites>allsites.xml</allsites>
     216        <port_map slice="bbn_gusheval" port="61414"/>
     217    </resource_manager>
     218    <resource_manager type="ssh">
     219    </resource_manager>
     220</gush>
     221}}}
     222
     223
     224'''Using Gush'''
     225
     226First, make sure that you have nodes assigned to you and a slice defined in the Planetlab site.
     227
     228You can now run gush and issue any of the supported commands.  The following example shows a
     229connection to PlanetLab using the preferences defined above to all hosts in the slice. Mesh
     230information is being requested as the experiment is set up:
     231
     232{{{
     233$ ./gush -P 15555
     234here
     235gush> Gush has learned about the slice bbn_gusheval.
     236gush> connect slice bbn_gusheval
     237Found 12 hosts
     238Initiated connections to 12 of 12 hosts.
     239gush> bbn_gusheval@plnode-03.gpolab.bbn.com:61414 has joined the mesh.
     240bbn_gusheval@plnode-04.gpolab.bbn.com:61414 has joined the mesh.
     241bbn_gusheval@node2.planetlab.albany.edu:61414 has joined the mesh.
     242bbn_gusheval@node-2.mcgillplanetlab.org:61414 has joined the mesh.
     243bbn_gusheval@miranda.planetlab.cs.umd.edu:61414 has joined the mesh.
     244bbn_gusheval@osiris.planetlab.cs.umd.edu:61414 has joined the mesh.
     245bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414 has joined the mesh.
     246bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414 has joined the mesh.
     247bbn_gusheval@node2.lbnl.nodes.planet-lab.org:61414 has joined the mesh.
     248bbn_gusheval@nis-planet2.doshisha.ac.jp:61414 has joined the mesh.
     249For an unknown reason, we were unable to invite bbn_gusheval@dplanet2.uoc.edu:61414.
     250
     251gush> info mesh
     252Mesh:
     253bbn_gusheval@plnode-03.gpolab.bbn.com:61414: connected; (fds=6,6 last_heard=1279137801)
     254bbn_gusheval@plnode-04.gpolab.bbn.com:61414: connected; (fds=7,7 last_heard=1279137801)
     255bbn_gusheval@node2.planetlab.albany.edu:61414: connected; (fds=9,9 last_heard=1279137801)
     256bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414: connected; (fds=12,12 last_heard=1279137802)
     257bbn_gusheval@pl2.planet.cs.kent.edu:61414: connecting via TCP; (fds=-1,-1 last_heard=0)
     258bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=14,14 last_heard=1279137802)
     259bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: connected; (fds=15,15 last_heard=1279137801)
     260bbn_gusheval@osiris.planetlab.cs.umd.edu:61414: connected; (fds=16,16 last_heard=1279137801)
     261bbn_gusheval@dplanet2.uoc.edu:61414: failed; (fds=22,21 last_heard=0)
     262bbn_gusheval@nis-planet2.doshisha.ac.jp:61414: connected; (fds=17,17 last_heard=1279137804)
     263bbn_gusheval@node-2.mcgillplanetlab.org:61414: connected; (fds=19,19 last_heard=1279137801)
     264bbn_gusheval@node2.lbnl.nodes.planet-lab.org:61414: connected; (fds=20,20 last_heard=1279137803)
     265Summary: 10 mesh members; 1 nodes connecting.
     266}}}
     267
     268The connect command can also use a "pat" argument (where pat=pattern) to request a subset of nodes.
     269The next example requests 10 nodes that have the patten "planetlab" in their hostname, but only 6
     270nodes in the slice match the specified pattern:
     271{{{
     272lnevers@sendaria:~/gush/trunk$ ./gush -P 15555
     273here
     274gush> Gush has learned about the slice bbn_gusheval.
     275     
     276gush> connect pat @planetlab 10
     277Initiated connections to 6 of 6 hosts.
     278gush> For an unknown reason, we were unable to invite bbn_gusheval@node2.planetlab.albany.edu:61414.
     279bbn_gusheval@node2.planetlab.albany.edu:61414 has joined the mesh.
     280bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414 has joined the mesh.
     281
     282gush> info mesh
     283Mesh:
     284bbn_gusheval@node2.planetlab.albany.edu:61414: connected; (fds=6,6 last_heard=1278010689)
     285bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414: bootstrapping; (fds=-1,-1 last_heard=0)
     286bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=12,12 last_heard=1278010695)
     287bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: bootstrapping; (fds=-1,-1 last_heard=0)
     288bbn_gusheval@osiris.planetlab.cs.umd.edu:61414: bootstrapping; (fds=-1,-1 last_heard=0)
     289bbn_gusheval@node-2.mcgillplanetlab.org:61414: bootstrapping; (fds=-1,-1 last_heard=0)
     290Summary: 2 mesh members; 4 nodes connecting.
     291
     292gush> bbn_gusheval@miranda.planetlab.cs.umd.edu:61414 has joined the mesh.
     293bbn_gusheval@osiris.planetlab.cs.umd.edu:61414 has joined the mesh.
     294bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414 has joined the mesh.
     295
     296gush> info mesh
     297Mesh:
     298bbn_gusheval@node2.planetlab.albany.edu:61414: connected; (fds=6,6 last_heard=1278010689)
     299bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414: connected; (fds=7,7 last_heard=1278010715)
     300bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=12,12 last_heard=1278010695)
     301bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: connected; (fds=14,14 last_heard=1278010700)
     302bbn_gusheval@osiris.planetlab.cs.umd.edu:61414: connected; (fds=15,15 last_heard=1278010701)
     303bbn_gusheval@node-2.mcgillplanetlab.org:61414: bootstrapping; (fds=-1,-1 last_heard=0)
     304Summary: 5 mesh members; 1 nodes connecting.
     305gush> info mesh
     306Mesh:
     307bbn_gusheval@node2.planetlab.albany.edu:61414: connected; (fds=6,6 last_heard=1278010689)
     308bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414: connected; (fds=7,7 last_heard=1278010715)
     309bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=12,12 last_heard=1278010695)
     310bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: connected; (fds=14,14 last_heard=1278010700)
     311bbn_gusheval@osiris.planetlab.cs.umd.edu:61414: connected; (fds=15,15 last_heard=1278010701)
     312bbn_gusheval@node-2.mcgillplanetlab.org:61414: handshake (fds=16,13 last_heard=0)
     313Summary: 5 mesh members; 0 nodes connecting.
     314
     315gush> info mesh
     316Mesh:
     317bbn_gusheval@node2.planetlab.albany.edu:61414: connected; (fds=6,6 last_heard=1278010689)
     318bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414: connected; (fds=7,7 last_heard=1278010715)
     319bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=12,12 last_heard=1278010695)
     320bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: connected; (fds=14,14 last_heard=1278010700)
     321bbn_gusheval@osiris.planetlab.cs.umd.edu:61414: connected; (fds=15,15 last_heard=1278010701)
     322bbn_gusheval@node-2.mcgillplanetlab.org:61414: handshake (fds=16,13 last_heard=0)
     323Summary: 5 mesh members; 0 nodes connecting.
     324gush> For an unknown reason, we were unable to invite bbn_gusheval@node-2.mcgillplanetlab.org:61414.
     325
     326}}}
     327
     328Other Gush commands:
     329Command: Show slice information
     330{{{
     331gush> info slice bbn_gusheval
     332Slice bbn_gusheval #hosts=12 exp=1279808609 and options _ _
     333}}}
     334Command: Renew slice
     335{{{
     336gush> slice renew bbn_gusheval
     337gush> The slice bbn_gusheval has been renewed.
     338}}}
     339Command: Execute command on each node, this example executes the hostname command.
     340{{{
     341gush> shell "hostname"
     342gush>
     343bbn_gusheval@node2.planetlab.albany.edu:61414,14011: node2.planetlab.albany.edu
     344bbn_gusheval@miranda.planetlab.cs.umd.edu:61414,21420: miranda.planetlab.cs.umd.edu
     345bbn_gusheval@osiris.planetlab.cs.umd.edu:61414,28140: osiris.planetlab.cs.umd.edu
     346bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414,3352: node2.planetlab.mathcs.emory.edu
     347bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414,21140: mtuplanetlab2.cs.mtu.edu
     348}}}
     349
     350Command: Show Node Status
     351{{{
     352gush> info nodes
     353There are 12 known nodes:
     354[ P         ] bbn_gusheval@plnode-03.gpolab.bbn.com:61414(pref=0) (Disconnected.)
     355[ P         ] bbn_gusheval@plnode-04.gpolab.bbn.com:61414(pref=0) (Disconnected.)
     356[ P   C     ] bbn_gusheval@node2.planetlab.albany.edu:61414(pref=10) (Idle.)
     357[ P   C     ] bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414(pref=10) (Idle.)
     358[ P         ] bbn_gusheval@pl2.planet.cs.kent.edu:61414(pref=0) (Disconnected.)
     359[ P   C     ] bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414(pref=10) (Idle.)
     360[ P   C     ] bbn_gusheval@miranda.planetlab.cs.umd.edu:61414(pref=10) (Idle.)
     361[ P   C     ] bbn_gusheval@osiris.planetlab.cs.umd.edu:61414(pref=10) (Idle.)
     362[ P         ] bbn_gusheval@dplanet2.uoc.edu:61414(pref=0) (Disconnected.)
     363[ P         ] bbn_gusheval@nis-planet2.doshisha.ac.jp:61414(pref=0) (Disconnected.)
     364[ P       F ] bbn_gusheval@node-2.mcgillplanetlab.org:61414(pref=-25) (Failed.)
     365[ P         ] bbn_gusheval@node2.lbnl.nodes.planet-lab.org:61414(pref=0) (Disconnected.)
     366gush>
     367}}}
     368
     369The gush software installs a client process on each node.  In an example where
     370the host sendaria was used to run gush, and the client was configured for port 61414,
     371the following process will run on each of the nodes:
     372{{{
     373 ./client -c ./ -d 5 -P 61414 -b lnevers@sendaria:15555
     374}}}