[[PageOutline]] = GUSH Evaluation = GENI User Shell (GUSH) provides an execution management system that allows users to describe an experiment that the GUSH tool uses to locate, and prepare resources. The GUSH software can be checked out from the GUSH SVN Repository using username guest and password is provided out of band. This GUSH evaluation started with the existing check out of the tools and updated to software revision 159, 160, 161, 162 and 163. Evaluation Time Frame: September 21, 2011 through the end of October 2011. = Gush Findings = Attempts to get sliver details for rspec 0.2 version failed, this was addressed by making changes to the gush parsing, waiting on feature check into repository. Attempts to start the Nebula client failed with a java exception, which turned out to be missing files that were added in svn version 160. Nebula is part of the GUSH repository but is built separately. Also Nebula documentation is still under construction. = Gush How-to = Using and existing GUSH install at revision 142 updated to the latest revision 161, if first time install follow the instructions at the [http://gush.cs.williams.edu/trac/gush/wiki/UsingGush Using Gush] wiki page. {{{ $ cd gush/trunk; svn update $ make clean (cd api && make clean) make[1]: Entering directory `/home/lnevers/gush/trunk/api' rm -f *.o libgushapi.a api-test make[1]: Leaving directory `/home/lnevers/gush/trunk/api' rm -f gush client gush-source.tar gush-bin.tar *.o \ terminal_parser.c terminal_parser.h terminal_lexer.c terminal_lexer.log $ make all <<< lots of output deleted>> }}} == Gush configuration == The configuration for each aggregate is manual and there is some naming inconsistencies which can cause problems. Following is a table which maps the directory.xml setting to the omni settings for each supported aggregate: User can now start the GUSH application by selecting ''Gush=>Start Gush'' || Aggregate Name ||(directory.xml) resource_manager type ||(omni_config) aggregate type ||( handle-geni.py) framework (-f)||( handle-geni.py) AGGREGATE_URL (-a)|| || || || !PlanetLab || "geni-plc" ||sfa || plc || !http://www.planet-lab.org:12346 || || Emulab || "geni-pg" || pg || pg || !https://www.emulab.net/protogeni/xmlrpc/am || Coordinating these across configurations and commands, because it is crucial in order to get gush working. Configuration examples for !PlanetLab and ProtoGENI, are capture in the subsequent sections. == Gush How-to with PlanetLab == First par of the evaluation focused on GUSH and !PlanetLab resources. Using the following configuration files: ''directory.xml:'' {{{ }}} ''omni_config:'' {{{ [omni] users = lnevers [plc] type=sfa authority=plc.bbn user=plc.bbn.lnevers cert=~/.gcf/plc.bbn.lnevers.gid key=~/.gcf/lnevers.pkey registry=http://www.planet-lab.org:12345 slicemgr=http://www.planet-lab.org:12347 [lnevers] urn = urn:publicid:IDN+emulab.net+user+lnevers keys=~/.ssh/id_rsa.pub }}} Started the gush tool: {{{ $ ./gush -P 15555 gush> Gush has learned about the slice bbn_gusheval. Updated information on the slice bbn_gusheval is available. connect slice bbn_gusheval Found 4 hosts Initiated connections to 4 of 4 hosts. bbn_gusheval@plnode-03.gpolab.bbn.com:61414 has joined the mesh. bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414 has joined the mesh. bbn_gusheval@plnode-04.gpolab.bbn.com:61414 has joined the mesh. bbn_gusheval@miranda.planetlab.cs.umd.edu:61414 has joined the mesh. gush> info mesh Mesh: bbn_gusheval@plnode-03.gpolab.bbn.com:61414: connected; (fds=6,6 last_heard=1318877196) bbn_gusheval@plnode-04.gpolab.bbn.com:61414: connected; (fds=7,7 last_heard=1318877201) bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=9,9 last_heard=1318877197) bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: connected; (fds=12,12 last_heard=1318877222) Summary: 4 mesh members; 0 nodes connecting. }}} == Gush How-to with ProtoGENI == Second part of the evaluation focused on GUSH and ProtoGENI resources. Using the following omni_config: {{{ }}} and the following directory.xml: {{{ [omni] users = lnevers [lnevers] urn = urn:publicid:IDN+emulab.net+user+lnevers keys=~/.ssh/id_rsa.pub [pg] type=pg ch = https://www.emulab.net:443/protogeni/xmlrpc/ch sa = https://www.emulab.net:443/protogeni/xmlrpc/sa cert = ~/.ssl/protogeni/encrypted-cleartext.pem key = ~/.ssl/protogeni/encrypted-cleartext.pem }}} Was able to connect to each of the hosts in the slice named lnevers02. Note lnevers02 used respec v0.2 resources. Gush also supports V0.1 and V2.0 rspec formats. {{{ $ ./gush -P 15555 gush> Gush has learned about the slice lnevers02. Updated information on the slice lnevers02 is available. gush> connect lnevers@pc151.emulab.net Connecting to host lnevers@pc151.emulab.net:61600. gush> connect lnevers@pc96.emulab.net Connecting to host lnevers@pc96.emulab.net:61600. gush> info mesh Mesh: lnevers@pc151.emulab.net:61600: bootstrapping; (fds=-1,-1 last_heard=0) lnevers@pc96.emulab.net:61600: bootstrapping; (fds=-1,-1 last_heard=0) Summary: 0 mesh members; 2 nodes connecting. }}} == Handle-geni.py How-to == The helper-scripts/handle-geni.py command can be useful in debugging Gush parsing issues and in determining how to connect to a host withing Gush. For example in the above PG Gush example, one can connect to each of the hosts in the slice lnevers02. The ''connect'' command argument was based on the results for the following: {{{ $ helper-scripts/handle-geni.py -f pg -a https://www.emulab.net/protogeni/xmlrpc/am sliverstatus lnevers02 INFO:omni:Loading config file omni_config INFO:omni:Using control framework pg INFO:omni:Sliver at https://www.emulab.net/protogeni/xmlrpc/am: 2011-10-17 18:24:37 }}} The quoted value of "node name" is used to connect to a host when running GUSH. == Nebula How-to with PlanetLab == The GUSH tools includes a GUI named Nebula with is part of the gush repository, but must be compiled separately at this time. The following are currently manual, but are to be automated soon: 1) Configure gush to use PlanetLab and verify configuration by starting Gush and making sure "info nodes" returns some nodes. Quit Gush. 2) Nebula needs to have a file called allsites.xml in the gush directory. This is for plotting the its map, download allsites.xml and put in gush/trunk. {{{ wget -O - -q http://www.planet-lab.org/xml/sites.xml > allsites.xml }}} 3) The Nebula client is invoked as follows: {{{ $ cd trunk/nebula $ sh run Loading plugin "classes/nebula/plugins/mission/Mission.class" Connecting to XML-RPC server on sendaria.gpolab.bbn.com:15556 Got all PlanetLab sites from Gush Got PlanetLab sites from Gush here with sliceName = bbn_gusheval here }}} The Nebula client looks as shown below. Note that the dots are all PlanetLab sites. [[Image(nebula-1.jpg)]] 4) Configure Nebula settings in Edit->Preferences. Specify gush location, slice name, port, SSH private key, and passphrase. Dialogs are shown here: [[Image(nebula-2.jpg)]] [[Image(nebula-3.jpg)]] 5)Once settings are in place you may start Gush by selecting Gush->Start Gush Note: At this point executed the Beginner tutorial in the Nebula [http://plush.cs.williams.edu/nebula/tutorial.html tutorials]. 5) Switch to the "Application View" tab to create an application to run: [[Image(nebula-4.jpg)]] 6) Create a component clock named "com12", define slice detail and click ok: [[Image(nebula-5.jpg)]] [[Image(nebula-6.jpg)]] 7) Select component block "com12" then click on process button to a a process. To modify process double clink on the newly created "process1" and define actions. In this example "touch HelloWorld.txt" is the process to run as an application: [[Image(nebula-7.jpg)]] 8. You can now run the application. Additionally used can use the Host View panels to show the hosts in the slice and connect to them: [[Image(nebula-8.jpg)]] [[Image(nebula-9.jpg)]] -------------- {{{ #!html Email us with any questions and feedback on this page! }}}