| 1 | == GUSH Evaluation == |
| 2 | |
| 3 | GENI User Shell (GUSH) provides an execution management system that allows users to describe |
| 4 | an experiment in an XML file, and Gush uses the xml file to locate, and prepare resources |
| 5 | through interactions with GENI Clearinghouses. Gush will run and clean-up the experiment. |
| 6 | |
| 7 | Software can be checked out from the [http://gush.cs.williams.edu/svn/gush/trunk GUSH SVN Repository] |
| 8 | using username '''guest''' and password is provided out of band. Software revisions used |
| 9 | were 106, 107 and 108. The update from 106 to 107 to 108 modified the following files: |
| 10 | {{{ |
| 11 | Update from 106 to 107: |
| 12 | U gush.prefs |
| 13 | U tests/simple.xml |
| 14 | U Makefile.in |
| 15 | G main.cc |
| 16 | G Makefile |
| 17 | Updates from 107 to 108: |
| 18 | U helper-scripts/setup.pl |
| 19 | }}} |
| 20 | |
| 21 | Successful compilation was achieved with both version 107 and 108, but not 106. |
| 22 | |
| 23 | Time frame: Evaluation took place between June 1-30, 2010. |
| 24 | |
| 25 | == Gush Findings == |
| 26 | |
| 27 | List of pre-requisites is fairly extensive. Versioning information is not captured in the instructions. |
| 28 | Several attempts to compile tools on Ubuntu 9.10 (karmic) failed, due to gcc 4.4.1 differences with |
| 29 | gcc 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 | |
| 34 | Successful 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 | |
| 41 | Before 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 | |
| 47 | To reserve a port, sign up for a port at [http://planetflow.planet-lab.org/#port port registration site]. |
| 48 | Once 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 | |
| 54 | Once 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 | |
| 60 | A README.txt is enclosed which captures all pre-requisites and compilation steps |
| 61 | required to build GUSH. README.txt content: |
| 62 | |
| 63 | {{{ |
| 64 | Gush is written in a mix of C++ and Perl, and we intend for it to be runnable on |
| 65 | any UNIX-ish OS. That said, we have been using it primarily with Linux 2.6. |
| 66 | |
| 67 | Compiling Gush can be challenging, so please contact us if you experience |
| 68 | too 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 | |
| 100 | Getting 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 | |
| 117 | That should be it! Let us know if you have problems. This is still a work |
| 118 | in progress! |
| 119 | |
| 120 | For more info, please visit http://gush.cs.williams.edu |
| 121 | }}} |
| 122 | |
| 123 | Pre-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 | |
| 133 | Additionally had to install Perl modules Frontier::Client and Crypt::SSLeay. |
| 134 | |
| 135 | ''' Gush Setup ''' |
| 136 | |
| 137 | Instructions 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 |
| 140 | Please select from the following options: |
| 141 | 1. Configure known hosts |
| 142 | 2. Configure Gush preferences |
| 143 | 3. Quit |
| 144 | > 1 |
| 145 | Gush uses SSH and TCP to authenticate and run executables on remote |
| 146 | hosts. To do this, Gush must know (a) which hosts it can use, |
| 147 | and (b) how to authenticate to them. We will first handle the |
| 148 | big cases, like PlanetLab, and then you will get the chance to |
| 149 | add any other hosts you would like to use. |
| 150 | |
| 151 | Do you have a PlanetLab account (Y/N) [N]? Y |
| 152 | |
| 153 | Gush can automatically query the PlanetLab database for |
| 154 | your slice information, renew your slices, and change the |
| 155 | hosts assigned to your slice. To do this, it must have |
| 156 | your planet-lab.org login (probably your email address) |
| 157 | and password. Your password is stored in the clear in a |
| 158 | separate file on the local disk. |
| 159 | |
| 160 | Please enter your planet-lab.org login: lnevers@bbn.com |
| 161 | Please enter your planet-lab.org password: |
| 162 | Please confirm your planet-lab.org password: |
| 163 | Please wait while we fetch a recent version of the |
| 164 | PlanetLab host set ... |
| 165 | |
| 166 | |
| 167 | All done configuring PlanetLab. Writing files... |
| 168 | Please enter your PlanetLab slice: bbn_gusheval |
| 169 | Please choose a port for this slice (use a different port for each slice): 61414 |
| 170 | Please enter your PlanetLab slice: |
| 171 | Now we will configure any other hosts that you wish Gush to use. |
| 172 | You can select any host that can be reached via SSH without password |
| 173 | prompting (e.g. pubkey, kerberos tickets, ...). |
| 174 | |
| 175 | Enter a hostname of the form host:port (empty to finish): |
| 176 | |
| 177 | No more questions! Writing directory file... |
| 178 | Done. |
| 179 | |
| 180 | Please select from the following options: |
| 181 | 1. Configure known hosts |
| 182 | 2. Configure Gush preferences |
| 183 | 3. Quit |
| 184 | > 2 |
| 185 | To skip a preference, just hit enter. |
| 186 | |
| 187 | Enter your preferred ClientPath (i.e., /home/slice_name/): ./ |
| 188 | Enter your preferred ClientPrefix (i.e., ./): ./ |
| 189 | Do you plan to use PlanetLab? (Y/N) [Y]: y |
| 190 | Done. |
| 191 | |
| 192 | Please select from the following options: |
| 193 | 1. Configure known hosts |
| 194 | 2. Configure Gush preferences |
| 195 | 3. Quit |
| 196 | > 3 |
| 197 | }}} |
| 198 | |
| 199 | The 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 | |
| 226 | First, make sure that you have nodes assigned to you and a slice defined in the Planetlab site. |
| 227 | |
| 228 | You can now run gush and issue any of the supported commands. The following example shows a |
| 229 | connection to PlanetLab using the preferences defined above to all hosts in the slice. Mesh |
| 230 | information is being requested as the experiment is set up: |
| 231 | |
| 232 | {{{ |
| 233 | $ ./gush -P 15555 |
| 234 | here |
| 235 | gush> Gush has learned about the slice bbn_gusheval. |
| 236 | gush> connect slice bbn_gusheval |
| 237 | Found 12 hosts |
| 238 | Initiated connections to 12 of 12 hosts. |
| 239 | gush> bbn_gusheval@plnode-03.gpolab.bbn.com:61414 has joined the mesh. |
| 240 | bbn_gusheval@plnode-04.gpolab.bbn.com:61414 has joined the mesh. |
| 241 | bbn_gusheval@node2.planetlab.albany.edu:61414 has joined the mesh. |
| 242 | bbn_gusheval@node-2.mcgillplanetlab.org:61414 has joined the mesh. |
| 243 | bbn_gusheval@miranda.planetlab.cs.umd.edu:61414 has joined the mesh. |
| 244 | bbn_gusheval@osiris.planetlab.cs.umd.edu:61414 has joined the mesh. |
| 245 | bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414 has joined the mesh. |
| 246 | bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414 has joined the mesh. |
| 247 | bbn_gusheval@node2.lbnl.nodes.planet-lab.org:61414 has joined the mesh. |
| 248 | bbn_gusheval@nis-planet2.doshisha.ac.jp:61414 has joined the mesh. |
| 249 | For an unknown reason, we were unable to invite bbn_gusheval@dplanet2.uoc.edu:61414. |
| 250 | |
| 251 | gush> info mesh |
| 252 | Mesh: |
| 253 | bbn_gusheval@plnode-03.gpolab.bbn.com:61414: connected; (fds=6,6 last_heard=1279137801) |
| 254 | bbn_gusheval@plnode-04.gpolab.bbn.com:61414: connected; (fds=7,7 last_heard=1279137801) |
| 255 | bbn_gusheval@node2.planetlab.albany.edu:61414: connected; (fds=9,9 last_heard=1279137801) |
| 256 | bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414: connected; (fds=12,12 last_heard=1279137802) |
| 257 | bbn_gusheval@pl2.planet.cs.kent.edu:61414: connecting via TCP; (fds=-1,-1 last_heard=0) |
| 258 | bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=14,14 last_heard=1279137802) |
| 259 | bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: connected; (fds=15,15 last_heard=1279137801) |
| 260 | bbn_gusheval@osiris.planetlab.cs.umd.edu:61414: connected; (fds=16,16 last_heard=1279137801) |
| 261 | bbn_gusheval@dplanet2.uoc.edu:61414: failed; (fds=22,21 last_heard=0) |
| 262 | bbn_gusheval@nis-planet2.doshisha.ac.jp:61414: connected; (fds=17,17 last_heard=1279137804) |
| 263 | bbn_gusheval@node-2.mcgillplanetlab.org:61414: connected; (fds=19,19 last_heard=1279137801) |
| 264 | bbn_gusheval@node2.lbnl.nodes.planet-lab.org:61414: connected; (fds=20,20 last_heard=1279137803) |
| 265 | Summary: 10 mesh members; 1 nodes connecting. |
| 266 | }}} |
| 267 | |
| 268 | The connect command can also use a "pat" argument (where pat=pattern) to request a subset of nodes. |
| 269 | The next example requests 10 nodes that have the patten "planetlab" in their hostname, but only 6 |
| 270 | nodes in the slice match the specified pattern: |
| 271 | {{{ |
| 272 | lnevers@sendaria:~/gush/trunk$ ./gush -P 15555 |
| 273 | here |
| 274 | gush> Gush has learned about the slice bbn_gusheval. |
| 275 | |
| 276 | gush> connect pat @planetlab 10 |
| 277 | Initiated connections to 6 of 6 hosts. |
| 278 | gush> For an unknown reason, we were unable to invite bbn_gusheval@node2.planetlab.albany.edu:61414. |
| 279 | bbn_gusheval@node2.planetlab.albany.edu:61414 has joined the mesh. |
| 280 | bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414 has joined the mesh. |
| 281 | |
| 282 | gush> info mesh |
| 283 | Mesh: |
| 284 | bbn_gusheval@node2.planetlab.albany.edu:61414: connected; (fds=6,6 last_heard=1278010689) |
| 285 | bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414: bootstrapping; (fds=-1,-1 last_heard=0) |
| 286 | bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=12,12 last_heard=1278010695) |
| 287 | bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: bootstrapping; (fds=-1,-1 last_heard=0) |
| 288 | bbn_gusheval@osiris.planetlab.cs.umd.edu:61414: bootstrapping; (fds=-1,-1 last_heard=0) |
| 289 | bbn_gusheval@node-2.mcgillplanetlab.org:61414: bootstrapping; (fds=-1,-1 last_heard=0) |
| 290 | Summary: 2 mesh members; 4 nodes connecting. |
| 291 | |
| 292 | gush> bbn_gusheval@miranda.planetlab.cs.umd.edu:61414 has joined the mesh. |
| 293 | bbn_gusheval@osiris.planetlab.cs.umd.edu:61414 has joined the mesh. |
| 294 | bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414 has joined the mesh. |
| 295 | |
| 296 | gush> info mesh |
| 297 | Mesh: |
| 298 | bbn_gusheval@node2.planetlab.albany.edu:61414: connected; (fds=6,6 last_heard=1278010689) |
| 299 | bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414: connected; (fds=7,7 last_heard=1278010715) |
| 300 | bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=12,12 last_heard=1278010695) |
| 301 | bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: connected; (fds=14,14 last_heard=1278010700) |
| 302 | bbn_gusheval@osiris.planetlab.cs.umd.edu:61414: connected; (fds=15,15 last_heard=1278010701) |
| 303 | bbn_gusheval@node-2.mcgillplanetlab.org:61414: bootstrapping; (fds=-1,-1 last_heard=0) |
| 304 | Summary: 5 mesh members; 1 nodes connecting. |
| 305 | gush> info mesh |
| 306 | Mesh: |
| 307 | bbn_gusheval@node2.planetlab.albany.edu:61414: connected; (fds=6,6 last_heard=1278010689) |
| 308 | bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414: connected; (fds=7,7 last_heard=1278010715) |
| 309 | bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=12,12 last_heard=1278010695) |
| 310 | bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: connected; (fds=14,14 last_heard=1278010700) |
| 311 | bbn_gusheval@osiris.planetlab.cs.umd.edu:61414: connected; (fds=15,15 last_heard=1278010701) |
| 312 | bbn_gusheval@node-2.mcgillplanetlab.org:61414: handshake (fds=16,13 last_heard=0) |
| 313 | Summary: 5 mesh members; 0 nodes connecting. |
| 314 | |
| 315 | gush> info mesh |
| 316 | Mesh: |
| 317 | bbn_gusheval@node2.planetlab.albany.edu:61414: connected; (fds=6,6 last_heard=1278010689) |
| 318 | bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414: connected; (fds=7,7 last_heard=1278010715) |
| 319 | bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414: connected; (fds=12,12 last_heard=1278010695) |
| 320 | bbn_gusheval@miranda.planetlab.cs.umd.edu:61414: connected; (fds=14,14 last_heard=1278010700) |
| 321 | bbn_gusheval@osiris.planetlab.cs.umd.edu:61414: connected; (fds=15,15 last_heard=1278010701) |
| 322 | bbn_gusheval@node-2.mcgillplanetlab.org:61414: handshake (fds=16,13 last_heard=0) |
| 323 | Summary: 5 mesh members; 0 nodes connecting. |
| 324 | gush> For an unknown reason, we were unable to invite bbn_gusheval@node-2.mcgillplanetlab.org:61414. |
| 325 | |
| 326 | }}} |
| 327 | |
| 328 | Other Gush commands: |
| 329 | Command: Show slice information |
| 330 | {{{ |
| 331 | gush> info slice bbn_gusheval |
| 332 | Slice bbn_gusheval #hosts=12 exp=1279808609 and options _ _ |
| 333 | }}} |
| 334 | Command: Renew slice |
| 335 | {{{ |
| 336 | gush> slice renew bbn_gusheval |
| 337 | gush> The slice bbn_gusheval has been renewed. |
| 338 | }}} |
| 339 | Command: Execute command on each node, this example executes the hostname command. |
| 340 | {{{ |
| 341 | gush> shell "hostname" |
| 342 | gush> |
| 343 | bbn_gusheval@node2.planetlab.albany.edu:61414,14011: node2.planetlab.albany.edu |
| 344 | bbn_gusheval@miranda.planetlab.cs.umd.edu:61414,21420: miranda.planetlab.cs.umd.edu |
| 345 | bbn_gusheval@osiris.planetlab.cs.umd.edu:61414,28140: osiris.planetlab.cs.umd.edu |
| 346 | bbn_gusheval@node2.planetlab.mathcs.emory.edu:61414,3352: node2.planetlab.mathcs.emory.edu |
| 347 | bbn_gusheval@mtuplanetlab2.cs.mtu.edu:61414,21140: mtuplanetlab2.cs.mtu.edu |
| 348 | }}} |
| 349 | |
| 350 | Command: Show Node Status |
| 351 | {{{ |
| 352 | gush> info nodes |
| 353 | There 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.) |
| 366 | gush> |
| 367 | }}} |
| 368 | |
| 369 | The gush software installs a client process on each node. In an example where |
| 370 | the host sendaria was used to run gush, and the client was configured for port 61414, |
| 371 | the following process will run on each of the nodes: |
| 372 | {{{ |
| 373 | ./client -c ./ -d 5 -P 61414 -b lnevers@sendaria:15555 |
| 374 | }}} |