<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>snmp_agent_uptime</title>
  </head>
  <body>
  <h1>snmp_agent_uptime</h1>    
  <h2>Quick instructions</h2>
    <p>
      Set up three virtual computers, SimpleArbiter with the disk image
      simpleArbiterDhcp, SNMPServer and SNMPClient. Write a program
      called upminutes. This program should output the uptime of the
      computer in minutes. Set it up on SNMPClient in the home directory
      of the user test with the password test.
    </p>
    <p>
      Make sure that the SNMP server reports it's uptime in seconds
      over SNMP under NET-SNMP-EXTEND-MIB::nsExtendOutput2Table.
    </p>
    <p>
      Write a script called beri.sh that reads the value from the
      OID 1.3.6.1.4.1.8072.1.3.2.4.1.2 on SNMPServer. Set it up on
      SNMPClient in the home directory of the user test.
    </p>
  <h2>Instructions</h2>
  <h3>Set up of VM VirtualBox</h3>
    <ol>
      <li>
        Download the following virtual images (*.vid) from the directory
        with images of virtual computers:
        <ol type="disc">
          <li>
            simpleArbiterDhcp.vdi
          </li>
          <li>
            some-bash-console.vdi – twice, one for SNMPServer
            and second for SNMPClient
          </li>          
        </ol> 
      </li>
      <li>
        VM VirtualBox WARNING! If you want to use one same virtual image
        (some-bash-console.vdi) for two virtual computers
        (SNMPServer and SNMPClient), you must <strong>change UUID</strong>
        of one image.
        <ol type="disc">
          <li>
            Use this command
            <i>vboxmanage internalcommands sethduuid name-of-disk.vdi</i>
            to change UUID (<a href="http://www.giannistsakiris.com/2009/05/06/virtualbox-how-to-change-the-uuid-of-virtual-disk-vdi/">hint</a>). 
          </li>        
        </ol>        
      </li>
      <li>
        Final view of sets VM VirtualBox machines.<br>
        <img src="../images/01.png" alt="VM VirtualBox machines" width="800">
      </li>
    </ol>
    
  <h3>Set up of SNMPServer machine</h3>
    <ol>
      <li>
	    setup network as “Bridged Adapter” -> Machine-> Settings ->Network

        Install snmpd and snmp packages and tools for inspecting the
        data available over SNMP. 
          <ol type="disc">
            <li>
              command <i>apt-get install snmpd snmp snmp-mibs-downloader</i>
            </li>
          </ol> 
      <li>
        RECOMMENDATION! Before doing any changes to your /etc/snmp/snmpd.conf
        file take a copy of original file.
          <ol type="disc">
            <li>
              command <i>cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig</i>
            </li>
          </ol> 
      </li>
      <li>      
        Set up the snmp server to allow all other computers to access it = edit
        snmpd.conf file.
          <ol type="disc">
            <li>
              command <i>nano /etc/snmp/snmpd.conf</i> 
              (you can use different editor)
            </li>
            <li>
              Check this 4 rows and make sure they look like this:<br>
              <i># Listen for connections from the local system only<br>
              # agentAddress  udp:127.0.0.1:161<br>     
              # Listen for connections on all interfaces (both IPv4 *and* IPv6)<br>
              agentAddress udp:161,udp6:[::1]:161</i>
            </li>            
          </ol> 
      </li>
      <li>      
       Add a group (community) of computers we deem to be worthy of
       accessing all data. This group will be called students = again edit
       snmpd.conf file. 
          <ol type="disc">
            <li>
              rocommunity students 0.0.0.0/0
            </li>
            <li>
              change 0.0.0.0./0 into correct address <i>ifconfig -a</i>
            </li>                           
          </ol>      
      </li>
      <li>      
        OPTIONAL CONFIGURATION. Lower in the same file you can set the
        location of the computer snmpd is running on and the name
        of the administrator.
          <ol type="disc">
            <li>        
              find under # SYSTEM INFORMATION
            </li>               
          </ol>             
      </li>
      <li>
        Make sure that the SNMP server reports it's uptime in seconds
        over SNMP under NET-SNMP-EXTEND-MIB::nsExtendOutput2Table. 
          <ol type="disc"> 
            <li>            
              create script upseconds containing this and save it where
              you want:<br>
                <i>#!/bin/bash<br>
                uptime=$(&lt;/proc/uptime)<br>
                seconds=${uptime%%.*}<br>
		echo $seconds<br>
                exit 0</i>              
            </li>
            <li>
              don't forget to make the script runnable:<br>
              command <i>chmod +x /your_path_to_script/upseconds</i>
            </li>            
            <li>        
              Then edit file <i>snmpd.conf</i> and under # EXTENDING THE AGENT
              comment all three tests and add your line of your code
              with upsecond script. It will look like this:<br>
              <i># extend test1 /bin/echo Hello, world!<br>
              # extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35<br>
              # extend-sh test3 /bin/sh /tmp/shtest<br>
              extend-sh "your_name" "your_path_to_script_upseconds"
              </i>
            </li>               
          </ol>       
      </li>      
      <li>
        You need to restart the snmp services.
          <ol type="disc">
            <li>        
              command <i>/etc/init.d/snmpd restart</i>
            </li>               
          </ol>          
      </li>
      <li>      
        You can test your configuration through localhost.
          <ol type="disc">
            <li>        
              command <i>snmpwalk localhost -c public -v1</i>
            </li>               
          </ol>         
      </li>
      <li>      
        Also test the correct return of server's uptime in seconds SNMP under
        NET-SNMP-EXTEND-MIB::nsExtendOutput2Table.
          <ol type="disc">
            <li>        
              command <i>snmpwalk -c students -v1 IPaddressOfServer
              1.3.6.1.4.1.8072.1.3.2.4.1.2</i>
            </li>
          </ol>         
      </li>                                                     
    </ol>
          
  <h3>Set up of SNMPClient machine</h3>
    <ol>
      <li>
        Install snmpd and snmp packages. 
          <ol type="disc">
            <li>
              command <i>apt-get install snmpd snmp</i>
            </li>
          </ol> 
      <li>
        RECOMMENDATION! Before doing any changes to your /etc/snmp/snmpd.conf
        file take a copy of original file.
          <ol type="disc">
            <li>
              command <i>cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig</i>
            </li>
          </ol> 
      </li>
      <li>      
        Set up the snmp client to allow all other computers to access it = edit
        snmpd.conf file.
          <ol type="disc">
            <li>
              command <i>nano /etc/snmp/snmpd.conf</i> 
              (you can use different editor)
            </li>
            <li>
              (un)comment these four lines as below:<br>
              <i># Listen for connections from the local system only<br>
              # agentAddress  udp:127.0.0.1:161<br>     
              # Listen for connections on all interfaces (both IPv4 *and* IPv6)<br>
              agentAddress udp:161,udp6:[::1]:161</i>
            </li>            
          </ol> 
      </li>
      <li>      
       Add a group (community) of computers we deem to be worthy of
       accessing all data. This group will be called students = again edit
       snmpd.conf file. 
          <ol type="disc">
            <li>
              rocommunity students 0.0.0.0/0
            </li>
            <li>
              write correct network address = command <i>ifconfig -a</i>
            </li>                           
          </ol>      
      </li>
      <li>      
        OPTIONAL CONFIGURATION. Lower in the same file you can set the
        location of the computer snmpd is running on and the name
        of the administrator.
          <ol type="disc">
            <li>        
              find under # SYSTEM INFORMATION
            </li>               
          </ol>             
      </li>
            
      <li>
        You need to restart the snmp services.
          <ol type="disc">
            <li>        
              command <i>/etc/init.d/snmpd restart</i>
            </li>               
          </ol>          
      </li>
      <li>      
        You can test your configuration through localhost.
          <ol type="disc">
            <li>        
              command <i>snmpwalk localhost -c public -v1</i>
            </li>               
          </ol>         
      </li>                  
      <li>Create the user <i>test</i> with password <i>test</i>
        <ol type="disc">
          <li>
            command <i>adduser test</i>
          </li>         
        </ol> 
      </li>
      <li>Login as user <i>test</i> and create program <i>upminutes</i>
        in the home directory. This program should output the uptime of the
        computer in minutes.
        <ol type="disc">
          <li>
            command <i>nano upminutes</i> (you can use different editor)
          </li>
            <li>
            add the source code:<br>
            <i>#!/bin/bash<br>
            uptime=$(&lt;/proc/uptime)<br>
            uptime=${uptime%%.*}<br>
            minutes=$(( uptime / 60 ))<br>
            echo $minutes<br>
            exit 0</i>
          </li>
          <li>
            don't forget to make the program runnable:<br>
            command <i>chmod +x /home/test/upminutes</i>
          </li>
          <li>
            test the program (it should output the uptime of the
            computer in minutes)<br>
            command <i>/home/test/upminutes</i>
          </li>
        </ol> 
      </li>
      <li><strong> As user <i>test</i> and create next script called
        <i>beri.sh</i> that reads the value from the OID
       1.3.6.1.4.1.8072.1.3.2.4.1.2. on SNMPServer. Set it up on SNMPClient
        in the home directory of the user test. 
        <ol type="disc">
          <li>
            command <i>nano beri.sh</i> (you can use different editor)
          </li>
            <li>
            add the source code:<br>
            <i>#!/bin/bash<br>
            snmpwalk -c students -v1 IPServerAddress 1.3.6.1.4.1.8072.1.3.2.4.1.2<br>
            exit 0</i>
          </li>
          <li>
            don't forget to make the program runnable:<br>
            command <i>chmod +x /home/test/upminutes</i>
		    you can test it with <i>./beri.sh</i>
          </li>
        </ol> 
      </li>      
    </ol>

	<h3> Setting SimpleArbiter </h3>
	User: tester
	Password: test

	apt-get install libsnmp-python
  </body>
</html>