wiki:GiB-gettingStarted

Version 23 (modified by Vic Thomas, 12 years ago) (diff)

--

Using GENI-in-a-Box

This page describes how to install and use GENI-in-a-Box on your computer.

Install GENI-in-a-Box

Please make sure you have VirtualBox Version 4.1.16 or later installed on your computer.

  1. Start up VirtualBox and from the VirtualBox "File" menu, select "Import Appliance...".
  1. The VirtualBox Appliance Wizard will start up and guide you through the import of the GENI-in-a-Box virtual machine image you downloaded. Please accept the default VM settings during the import.
  1. When the import is done, and entry for GENI-in-a-Box will appear in the Oracle VM VirtualBox Manager window. Select this entry and click the green arrow labeled Start at the top of this window. A new window will open up and you will see Linux boot up in this window. You will automatically be logged into this Linux virtual machine when it is booted.

Get Started with a Simple Experiment

Discover Resources

We start by finding out the aggregates available to us inside GENI-in-a-Box and learning about the resources advertised by these aggregates:

  1. After you are logged into the GENI-in-a-Box virtual machine, open up a terminal window by clicking on the icon for a terminal on top of the screen.
  1. In the terminal window, use Omni to list the aggregates available to you using the command omni.py listaggregates. You should see something like this in your terminal window:
    $ omni.py listaggregates
    INFO:omni:Loading config file /home/gibuser/.gcf/omni_config
    INFO:omni:Using control framework gib_ch
    INFO:omni:Listing 1 aggregates...
    INFO:omni:  Aggregate 1:
    urn:publicid:IDN+geni:gpo:gcf:am1+authority+am 
    http://geni-in-a-box.net:8001
    INFO:omni: ------------------------------------------------------------
    INFO:omni: Completed listaggregates:
    
        Options as run:
                    framework: gib_ch
    		getversionCacheName: /home/gibuser/.gcf/get_version_cache.json
    
        Args: listaggregates
    
        Result Summary: Found 1 aggregate. URN: urn:publicid:IDN+geni:gpo:gcf:am1+authority+am; URL: http://geni-in-a-box.net:8001 
    INFO:omni: ============================================================
    $ 
    

Look at the Result Summary from Omni. You'll see that Omni found one aggregate available to you at URL http://geni-in-a-box.net:8001. This is the aggregate you will use to run your experiments.

  1. Now, let's find out the resources advertised by this aggregate using the command omni.py -a http://geni-in-a-box.net:8001 listresources:
    $ omni.py -a http://geni-in-a-box.net:8001 listresources
    INFO:omni:Loading config file /home/gibuser/.gcf/omni_config
    INFO:omni:Using control framework gib_ch
    INFO:omni:Listed resources on 1 out of 1 possible aggregates.
    INFO:omni:<?xml version="1.0" ?>
    INFO:omni:  <!-- Resources at AM:
    	URN: unspecified_AM_URN
    	URL: http://geni-in-a-box.net:8001
     -->
    INFO:omni:  <!-- Resources at AM:
    	URN: urn:publicid:IDN+geni-in-a-box.net+authority+cm
    	URL: http://localhost:8001
     --><rspec expires="2013-08-20T22:26:14Z" generated="2012-07-16T22:26:14Z" type="advertisement" xmlns="http://www.protogeni.net/resources/rspec/2" xmlns:emulab="http://www.protogeni.net/resources/rspec/ext/emulab/1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/2 http://www.protogeni.net/resources/rspec/2/ad.xsd ">      
          <node component_id="urn:publicid:IDN+geni-in-a-box.net+node+pc101" component_manager_id="urn:publicid:IDN+geni-in-a-box.net+authority+cm" component_name="pc101" exclusive="true">            
                  <hardware_type name="openVZ container">                  
                  </hardware_type>            
                  <sliver_type name="virtual-pc">                  
                      <disk_image description="Standard 32-bit Fedora 15 image" name="urn:publicid:IDN+geni-in-a-box.net+image:FEDORA15-STD" os="Fedora" version="15"/>                  
                      <disk_image default="true" description="Standard 32-bit Fedora 15 image" name="urn:publicid:IDN+geni-in-a-box.net+image:FEDORA15-STD" os="Fedora" version="15"/>                  
                  </sliver_type>            
                  <interface component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc101:eth0" role="control">                  
                          <emulab:interface name="eth0"/>                  
                  </interface>            
                  <interface component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc101:eth1" role="experimental">                  
                          <emulab:interface name="eth2"/>                  
                  </interface>            
                  <interface component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc101:eth2" role="experimental">                  
                          <emulab:interface name="eth3"/>                  
                  </interface>            
                  <interface component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc101:eth3" role="experimental">                  
                          <emulab:interface name="eth1"/>                  
                  </interface>        
                  <location country="Molvania"/>            
          </node>      
          
          ... 
    
          <node component_id="urn:publicid:IDN+geni-in-a-box.net+node+pc106" component_manager_id="urn:publicid:IDN+geni-in-a-box.net+authority+cm" component_name="pc106" exclusive="true">            
                  <hardware_type name="openVZ container">                  
                  </hardware_type>            
                  <sliver_type name="virtual-pc">                  
                      <disk_image description="Standard 32-bit Fedora 15 image" name="urn:publicid:IDN+geni-in-a-box.net+image:FEDORA15-STD" os="Fedora" version="15"/>                  
                      <disk_image default="true" description="Standard 32-bit Fedora 15 image" name="urn:publicid:IDN+geni-in-a-box.net+image:FEDORA15-STD" os="Fedora" version="15"/>                  
                  </sliver_type>            
                  <interface component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc106:eth0" role="control">                  
                          <emulab:interface name="eth0"/>                  
                  </interface>            
                  <interface component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc106:eth1" role="experimental">                  
                          <emulab:interface name="eth2"/>                  
                  </interface>            
                  <interface component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc106:eth2" role="experimental">                  
                          <emulab:interface name="eth3"/>                  
                  </interface>            
                  <interface component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc106:eth3" role="experimental">                  
                          <emulab:interface name="eth1"/>                  
                  </interface>        
                  <location country="Molvania"/>            
          </node>      
    </rspec>
    INFO:omni: ------------------------------------------------------------
    INFO:omni: Completed listresources:
    
      Options as run:
    		aggregate: ['http://geni-in-a-box.net:8001']
    		framework: gib_ch
    		getversionCacheName: /home/gibuser/.gcf/get_version_cache.json
    
      Args: listresources
    
      Result Summary: Queried resources from 1 of 1 aggregate(s).
     
    INFO:omni: ============================================================
    $ 
    

The output of the command is the advertisement rspec from the GENI-in-a-Box aggregate. You'll see the aggregate advertises six compute resources. Only two are shown here for readability reasons but you will find the complete advertisement rspec here. Look at the description of the first resource in the rspec. This compute resources is an openVZ container running Fedora 15 image (or an Ubuntu 10 image if you are using the Ubuntu flavor of GENI-in-a-Box). The resource has four network interfaces: eth0 through eth3. eth0 is a control interface and is not available to the experimenter. All six compute resources advertised by this aggregate are identical. You can therefore use this aggregate to create experiment topologies with up to six nodes and up to three links per node.

Run an Experiment

We are now ready to run an experiment using these resources. We'll start with a very simple experiment that consists of two hosts connected to one another by a single link. When the hosts come up they execute an experimenter specified script that:

  • Downloads and installs iperf on each host.
  • Runs iperf in server mode on one host and and in client mode on the other host. The outputs of the iperf commands are written to /tmp/iperf-server.log and /tmp/iperf-client.log on the respective hosts.

As a part of this experiment we will ssh into these hosts to view these logs.

The request rspec for this experiment (and other examples of request rspecs) are in the directory ~/geni-in-a-box.

$ cd geni-in-a-box
$ ls
click-example.rspec  four-nodes.rspec       islands.rspec  README.txt             two-nodes-iperf.rspec
example-scripts      install-example.rspec  out.log        three-nodes-lan.rspec

We'll use the rspec file called two-nodes-iperf.rspec. You can view it here or inside the VM. This rspec requests two hosts called left and right. Host left has one interface called left:if0 and host right has one interface called right:if0. The two interfaces are connected by a link called left-right-lan. The <install> element in the rspec asks the GENI-in-a-Box aggregate manager to download a script from the specified URL, uncompress and untar it, and save it in the /local directory. The <execute> element asks the aggregate to execute the specified script when the hosts come up. In this case the script to be executed is the one that was installed in /local.

The following steps will walk you through running this experiment:

  1. First we need to create a slice using the command omni.py createslice myslice where myslice is the name or our slice (of course you can give you slice some other name).
    $ omni.py createslice myslice
    INFO:omni:Loading config file /home/gibuser/.gcf/omni_config
    INFO:omni:Using control framework gib_ch
    INFO:omni:Created slice with Name myslice, URN urn:publicid:IDN+geni:gpo:gcf+slice+myslice, Expiration 2012-09-28 23:49:43
    INFO:omni: ------------------------------------------------------------
    INFO:omni: Completed createslice:
    
      Options as run:
    		framework: gib_ch
    		getversionCacheName: /home/gibuser/.gcf/get_version_cache.json
    
      Args: createslice myslice
    
      Result Summary: Created slice with Name myslice, URN urn:publicid:IDN+geni:gpo:gcf+slice+myslice, Expiration 2012-09-28 23:49:43
     
    INFO:omni: ============================================================
    $
    
  1. We now send our request rspec to the GENI-in-a-Box aggregate manager using the command omni.py -a http://geni-in-a-box.net:8001 createsliver myslice two-nodes-iperf.rspec. This command will take many minutes to complete because it configures and boots up the requested virtual machines, does some additional configuration, and download, installs, and runs iperf. If our request is successful, the aggregate manager will allocate the requested resources to our slice. In GENI parlance the resources allocated to our slice are called slivers. The {{createsliver}} request returns a manifest spec that provides details of the resources allocated to us. The following is a snippet of the manifest your will get back from {{createsliver}}:
    $ omni.py --api-version 2 -a http://geni-in-a-box.net:8001 createsliver myslice two-nodes-iperf.rspec
    INFO:omni:Loading config file /home/gibuser/.gcf/omni_config
    INFO:omni:Using control framework gib_ch
    WARNING:omni:Slice urn:publicid:IDN+geni:gpo:gcf+slice+myslice expires in <= 3 hours
    INFO:omni:Slice urn:publicid:IDN+geni:gpo:gcf+slice+myslice expires on 2012-10-02 16:32:42 UTC
    INFO:omni:Creating sliver(s) from rspec file two-nodes-iperf.rspec for slice urn:publicid:IDN+geni:gpo:gcf+slice+myslice
    INFO:omni:Got return from CreateSliver for slice myslice at http://geni-in-a-box.net:8001:
    INFO:omni:<?xml version="1.0" ?>
    INFO:omni:  <!-- Reserved resources for:
    	Slice: myslice
    	at AM:
    	URN: unspecified_AM_URN
    	URL: http://geni-in-a-box.net:8001
     -->
    INFO:omni:  <rspec generated="2012-09-11T16:29:16Z" generated_by="Flack" type="manifest">  
        <node client_id="left" component_id="urn:publicid:IDN+geni-in-a-box.net+node+pc101" component_manager_id="urn:publicid:IDN+geni-in-a-box.net+authority+cm" exclusive="false" sliver_id="urn:publicid:IDN+geni-in-a-box.net+sliver+101">    
            <sliver_type name="virtual-pc">      
                <disk_image name="urn:publicid:geni-in-a-box.net+image//FEDORA15-STD"/>      
            </sliver_type>    
            <services>      
                <install file_type="tar.gz" install_path="/local" url="http://groups.geni.net/geni/attachment/wiki/GiB-gettingStarted/iperf-execute-script.tar.gz?format=raw"/>      
                <execute command="/local/iperf-execute-script.sh" shell="sh"/>      
                <login authentication="ssh-keys" hostname="pc101.geni-in-a-box.net" port="22" username="alice"/>      
                <login authentication="ssh-keys" hostname="pc101.geni-in-a-box.net" port="22" username="bob"/>      
            </services>    
            <interface client_id="left:if0" component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc101:eth1" mac_address="00:0C:29:B4:DF:A7" sliver_id="urn:publicid:IDN+geni-in-a-box.net+sliver+1011">      
                <ip address="10.0.3.101"/>      
            </interface>    
            <rs:vnode name="pc101" xmlns:rs="http://www.protogeni.net/resources/rspec/ext/emulab/1"/>    
            <host name="pc101.geni-in-a-box.net"/>    
        </node>  
        ...
        <link client_id="left-right-lan">    
            <component_manager name="urn:publicid:IDN+geni-in-a-box.net+authority+cm"/>    
            <interface_ref client_id="left:if0" component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc101:eth1" sliver_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc101:eth1"/>    
            <interface_ref client_id="right:if0" component_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc102:eth1" sliver_id="urn:publicid:IDN+geni-in-a-box.net+interface+pc102:eth1"/>    
            <property dest_id="right:if0" source_id="left:if0"/>    
            <property dest_id="left:if0" source_id="right:if0"/>    
            <link_type name="lan"/>    
        </link>  
    </rspec>
    INFO:omni: ------------------------------------------------------------
    INFO:omni: Completed createsliver:
    
      Options as run:
    		aggregate: ['http://geni-in-a-box.net:8001']
    		framework: gib_ch
    		getversionCacheName: /home/gibuser/.gcf/get_version_cache.json
    
      Args: createsliver myslice two-nodes-iperf.rspec
    
      Result Summary: Got Reserved resources RSpec from geni-in-a-box-net-8001 
    INFO:omni: ============================================================
    $
    








EXTRA!!!

  1. Now, let's find out the GENI AM API version and GENI Rspecs version supported by this aggregate using the command omni.py -a http://geni-in-a-box.net:8001 get version:
    $ omni.py  -a http://geni-in-a-box.net:8001 getversion
    INFO:omni:Loading config file /home/gibuser/.gcf/omni_config
    INFO:omni:Using control framework gib_ch
    INFO:omni:AM URN: unspecified_AM_URN (url: http://geni-in-a-box.net:8001) has version:
    INFO:omni:{   'geni_ad_rspec_versions': [   {   'extensions': [],
                                          'namespace': 'http://www.geni.net/resources/rspec/3',
                                          'schema': 'http://www.geni.net/resources/rspec/3/ad.xsd',
                                          'type': 'geni',
                                          'version': '3'}],
        'geni_api': 2,
        'geni_api_versions': {   '2': 'https://127.0.0.1:8001/'},
        'geni_request_rspec_versions': [   {   'extensions': [],
                                               'namespace': 'http://www.geni.net/resources/rspec/3',
                                               'schema': 'http://www.geni.net/resources/rspec/3/request.xsd',
                                               'type': 'geni',
                                               'version': '3'}]}
    INFO:omni: ------------------------------------------------------------
    INFO:omni: Completed getversion:
    
      Options as run:
    		aggregate: ['http://geni-in-a-box.net:8001']
    		framework: gib_ch
    		getversionCacheName: /home/gibuser/.gcf/get_version_cache.json
    		noGetVersionCache: True
    
      Args: getversion
    
      Result Summary: 
    Got version for http://geni-in-a-box.net:8001
     
    INFO:omni: ============================================================
    $ 
    

The results of this command tell you that the GENI-in-a-Box aggregate manager implements the GENI AM API version 2 and GENI Rspecs version 3.

  1. In the terminal window, cd to the directory geni-in-a-box in your home directory and list the contents of that directory. You will see a number of

  1. List the contents of the directory (ls). You will see a number of example request rspec files you can use to get started. We'll walk you through an experiment using one of these rspecs in section sampleExperiment.
  1. Before you try running an experiment verify everything is set up right. Use the http://trac.gpolab.bbn.com/gcf/wiki/Omni omni] experiment tool to list the aggregates available to you: omni.py listaggregates. This command lists the aggregates registered with the slice authority that ships with GENI-in-a-Box. You should see one aggregate listed:
  1. Check the version of the GENI AM API implemented by this aggregate: omni.py --