Bond network interfaces in linux

Short intro:

Bonding (or ‘teaming’) network interfaces is a way to bind 2 interfaces as one. This way you can configure a more redundant network connection. A normal bonded setup should of course be connected to a redundant switch (lan port1 to switch 1, lan port 2 to switch 2). It is also possible to do load balancing, but in this case traffic is low but availability should be high so i’m going for redundancy.

This setup is for a IBM Xserver running ubuntu 6.06.1 LTS server, this is a server with two Broadcom NetXtreme BCM5703X Gigabit Ethernet network interfaces which uses the ‘t3′ module.

Before proceeding check what interfaces you have and what module you are using for your network interfaces.

To get started with ‘bonding’ first you will need to look at your situation and check in what ‘mode’ you want to configure the interface, while I normally use ‘mode: 2′ this could maybe not work in your configuration so Google for a few pages that explain the differences (this is a referance base remember..)

The Configuration:

First edit /etc/modprobe.d/aliases and at the end of the file add (be sure to change the module, mode and miimon if necessary) :

1
2
3
4
alias bond0 bonding
alias eth0 t3
alias eth1 t3
options bonding mode=2 miimon=100

Then edit /etc/modprobe.d/arch/i386 (and again be sure to change the module and miimon setting if necessary):

1
2
alias bond0 bonding
options bonding mode=2 miimon=100 downdelay=200 updelay=200

First we need to check what mac interface we are going to use so use ‘ifconfig’ to get the mac for the primary adapter in your server (this is the one I normally use).

trouble@sun:$ /sbin/ifconfig eth0
eth0 Link encap:Ethernet HWaddr YOUR MAC
…..snap….

Now edit /etc/network/interfaces, disable all the settings for the current interface (except lo of course) and add the following:

1
2
3
4
5
6
7
8
9
auto bond0
iface bond0 inet static
   address 192.168.0.100
   netmask 255.255.255.0
   network 192.168.0.0
   broadcast 192.168.0.255
   gateway 192.168.0.1
   hwaddress ether YOUR MAC
   post-up ifenslave bond0 eth0 eth1

Now reboot and you should be ready to go.

Testing the config:

Test it out by starting a ping to a other host in your network and unplug one cable at a time (no unplugging both interfaces won’t work..)

Also you can check the status with:

trouble@sun:$ cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.0.0 (November 8, 2005)

Bonding Mode: load balancing (xor)
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200

Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: MAC

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: MAC

Changing the usplash theme

Already got tired of the default ubuntu usplash theme?
(* for the one’s that don’t know what the ‘usplash’ is: its that nice graphical boot screen used in ubuntu linux)

Here’s the way to change it to a brand new one (first the ‘geeky’ hardway then the easy way)

The hardway

First of course find a nice usplash theme (for some links to site’s with usplash theme’s see below) download it to your desktop and extract the downloaded file to get the .so file and move the new file to /usr/lib/usplash/.
(* note that in ubuntu you can do: sudo apt-get install usplash* to install some already default usplash themes to /usr/lib/usplash)

trouble@sun:$ cd (Your dlded theme dir)
trouble@sun:$ sudo mv yournewusplashtheme.so /usr/lib/usplash/

Then we need to link the new usplash theme to be the default:

trouble@sun:$ sudo ln -sf /usr/lib/usplash/yournewusplashtheme.so /etc/alternatives/usplash-artwork.so

And finaly reconfigure the kernel:

trouble@sun:$ sudo dpkg-reconfigure linux-image-`uname -r`

To get a preview of your just installed usplash (get out with ‘ctrl’ ‘alt’ ‘F7′):

trouble@sun:$ sudo usplash

The easy way

First install the ‘startupmanager’ available from apt-get.

trouble@sun:$ apt-get install startupmanager

Then download your new usplash theme and extract the .so file from the archive and follow the next steps:

  • startup the startup manager by going to ‘system’ -> ‘Administration’ -> StartUp-Manager or open a console and type ‘sudo startupmanager’
  • go to the ‘appearance’ tab and select ‘manage usplash themes’
  • select ‘add’
  • browse to your new usplash theme.so file
  • double click the .so file or select it and choose ‘open’
  • now select your new theme and choose ‘close’
  • press ‘close’ for the 2nd time and the new usplash will be installed

Some sites with usplash themes:

BigBrother SNMP users

Quick way of getting the amount of logged in users on a windows 2003 terminal server, from BigBrother. this is not a howto just a quick reference for myself, if someone try’s this and has problems just let me know, mayb I forgot something here.

Using larrd and rrdtool you can get the info into a nice graph.
* note that this does not work on windows 2003 SP1.


First create the snmpusers bigbro script to monitor snmp, this is a modified script of Gavin Goes

trouble@sun:$ mkdir $bbhome/ext/snmp
trouble@sun:$ vi snmpusers.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/bin/sh
 
# snmpusers v0.1
# this wil monitor the hrSystemNumUsers.0 from a win2k3 box.
#
#######################
# Original header
#######################
# BIG BROTHER - SCRIPT TO SUCK OUT CPU UTILIZATION FROM A
# WINDOWS 2000 Server running SNMP with MIB-II
# Gavin Goes - Cymple Solutions [gavin @ cymplesolutions.com]
#
# Please note that this is a very crude hack of the snmp v0.5 script
# by Sean Macguire. The script can be modified to check any OID on a
# host for comparison... (see OID check section)
#
# This program is under a BSD-style license, you may change it at
# will and redistribute, but giving credit is good manners...
 
# TO RUN THE SNMPCPU TEST ADD THE KEYWORD snmpusers TO THE "BBEXT"
# VARIABLE OF $BBHOME/ext/bbdef.sh.  THIS IS FOR SECURITY.
 
# THE EASIEST INSTALLATION OF THIS SCRIPT INVOLVES PLACING THE
# SCRIPT IN THE $BBHOME/ext directory, and adding the line:
#
#       : : snmpusers.sh
#
# TO THE $BBHOME/etc/bb-bbexttab FILE. TRY ADDING A HOST TO YOUR
# $BBHOME/etc/bb-hosts FILE FOLLOWING THIS EXAMPLE:
#
#  10.50.50.1   deadcat.domain.org # snmpusers
#
 
# BBPROG SHOULD JUST CONTAIN THE NAME OF THIS FILE
# USEFUL WHEN YOU GET ENVIRONMENT DUMPS TO LOCATE
# THE OFFENDING SCRIPT...
#
BBPROG=snmpusers; export BBPROG
 
TEST="snmpusers"
 
# BBHOME CAN BE SET MANUALLY WHEN TESTING.
# OTHERWISE IT SHOULD BE SET FROM THE BB ENVIRONMENT
#
BBHOME=/home/bigbro/bb/; export BBHOME  # FOR TESTING
 
if test "$BBHOME" = ""
then
        echo "BBHOME is not set... exiting"
        exit 1
fi
 
if test ! "$BBTMP"                      # GET DEFINITIONS IF NEEDED
then
         # echo "*** LOADING BBDEF ***"
        . $BBHOME/etc/bbdef.sh          # INCLUDE STANDARD DEFINITIONS
fi
 
#
# SET UP THE SNMP COMMANDS WE'LL NEED (AS WELL AS THE MIB DEFINITIONS
# WHICH USUALLY ARE IN /usr/local/share/snmp/mibs
# IF NOT, ACQUIRE THEM AND PLACE IN THERE
#
MIBS=ALL; export MIBS
SNMPGET="/usr/bin/snmpget"
SNMPWALK="/usr/bin/snmpwalk"
SED="/bin/sed"
 
if test ! -x "$SNMPGET"
then
        echo "Can't find snmpget! [$SNMPGET]... exiting"
        exit 1
fi
if test ! -x "$SNMPWALK"
then
        echo "Can't find snmpwalk! [$SNMPWALK]... exiting"
        exit 1
fi
 
#
# LOOK FOR THE snmpusers KEYWORD IN THE etc/bb-hosts FILE
# BUT MAKE SURE TO IGNORE COMMENTS
#
$GREP snmpusers $BBHOME/etc/bb-hosts | grep -v "^#" |
while read line
do
        set $line                       # GET ALL THE LINE ARGS
        HOST="$1"
        MACHINEMASK="$2"; export MACHINEMASK
 
        if test "$HOST" = "0.0.0.0"     # SUPPORT USING NAMES...
        then
                HOST="$MACHINEMASK"
        fi
 
        if test "$FQDN" != "TRUE"
        then
                OLDIFS="$IFS"
                IFS="."
                set $MACHINEMASK
                MACHINEMASK="$1"
                IFS="$OLDIFS"
        fi
 
        # echo "DOING HOST $MACHINEMASK"
        BOX=`echo $MACHINEMASK | $SED "s/./,/g"`
 
        # COMMUNITY WILL DEFAULT TO "public" UNLESS OTHERWISE
        # STATED IN $BBHOME/etc/bb-smtptab
 
        COMMUNITY="public"
 
        if test -f $BBHOME/etc/bb-snmptab       # IF NOT "public"
        then
                # SEARCH BY IP ADDRESS
                COMMUNITY=`grep "$HOST" $BBHOME/etc/bb-snmptab`
                if test "$COMMUNITY" != ""
                then
                        set $COMMUNITY
                        COMMUNITY="$2"
                else    # SEARCH BY NAME
                        COMMUNITY=`grep "$MACHINEMASK" $BBHOME/etc/bb-snmptab`
                        if test "$COMMUNITY" != ""
                        then
                                set $COMMUNITY
                                COMMUNITY="$2"
                        else
                                COMMUNITY="public"
                        fi
                fi
        fi
 
### OID Check section
### Modify the appropriate setting and OID to suit your needs for
### your specific device... Use a utility like GetIF to find out
### what OIDs your device can monitor
 
        # GET THE AMOUNT OF USERS FOR THIS DEVICE...
        SYSTEMUSERS=`$SNMPGET -v2c -c$COMMUNITY $HOST hrSystemNumUsers.0 2>&1`
 
                set $SYSTEMUSERS
                echo "1= $*" #just for debugging
                shift; shift; shift;
                echo "2 =$*" #just for debugging
                SYSTEMUSERS=`echo $* | $SED "s/\"//g"`
                REALUSERS="`/usr/bin/expr $SYSTEMUSERS - 1`"
 
        # Check if the value of the number of users is greater then
        # or equal to a specific value...
        if [ "$REALUSERS" -ge "50" ]
        then
                # SEND USERS MESSAGE AND EXIT
                $BB $BBDISP "status ${BOX}.${TEST} red `date` The number of users is $REALUSERS"
                continue;
        else
                COLOR="green"; TEST="snmpusers";
                $BB $BBDISP "status ${BOX}.${TEST} $COLOR `date` $LINE The number of users is $REALUSERS"
        fi
 
done

* don’t forget to chmod 755 the file.

Then add it to the bbconfig file:

trouble@sun:$ vi $bbhome/etc/bb-bbexttab
1
 : :snmp/snmpusers.sh

To get graphs create a file for larrd:

trouble@sun:$ cd /usr/local/larrd
trouble@sun:$ vi snmpusers-larrd.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/perl -w -w
#
# Set a path to the rrd tool lib
# Set as and $ENV and see what is up
use lib $ENV{'RRDPM'};
use RRDs;
 
$ds = "snmpusers";
 
@ds = ("DS:snmpusers:GAUGE:600:0:U",
       );
 
##################################
# Start of script
##################################
 
if( not $ENV{'BBHOME'} ) {
        print "$0: BBHOME is not setn";
        exit(1);
}
 
if( not -d $ENV{'BBHOME'} ) {
        print "$0: BBHOME is invalidn";
        exit(1);
}
 
if( not -d $ENV{'BBRRDS'} ) {
        print "$0: BBRRDS is not setn";
        exit(1);
}
 
##
# real work begins here
##
# go to the logs area for simplication of the list
#chdir "$ENV{'BBLOGS'}";
chdir "/home/bigbro/bbvar/logs";
 
# Glob the logs
LOG: while (  defined ($log = <*.$ds>)  ) {
        $host=$log;
        # create some handy vars
        $host =~ s/.$ds//;
        $host =~ s/,/./g;
        ($ctime) = (stat($log))[10];
 
        $colour_check="notok";
 
        # Grab lines
        open(LOG,"$log");
        while ( defined ($line = <log>) ) {
          chomp $line;
 
          # ensure colour is valid - ie don't graph purple results
          if($line =~ /green|yellow|red/) {
            $line =~ /users iss+(d+)/o;
            $users=$1;
            $colour_check="ok";
 
          } # end line colour check
 
          if ($colour_check ne "ok") {
                print "$0: WARN $host is not showing red, yellow, or green. $log skipped.n" if ($ENV{'WARN'});
                next LOG;
          }
 
        } # end while
        close(LOG);
 
        print "$0: DEBUG users: $usersn" if $ENV{'DEBUG'};
 
        # RRD for users
 
        $RRD="$ENV{'BBRRDS'}/$host.snmpusers.rrd";
 
        # if it doesn't exist, make it
        if ( not -f $RRD ) {
                        # RRAS defined in larrd.pl
                        @rras = split " ",$ENV{'RRAS'};
                        RRDs::create($RRD,@ds,@rras);
                        $ERR=RRDs::error;
                        if($ERR) {
                                print "$0: ERROR creating $RRD: $ERRn" if ($ENV{'ERROR'});
                                next;
                        }
                $ctime="N";
                print "$0: STATUS did not find $RRD, created.n" if ($ENV{'STATUS'});
        }
 
        RRDs::update("$RRD","$ctime:$users");
        $ERR=RRDs::error;
        if($ERR) {
               print "$0: WARN updating $RRD: $ERRn" if ($ENV{'WARN'});
        }
 
        # Sloppy
        ($ctime) = (stat($log))[10];
 
}
##############################################
# end of script
##############################################
</log>

Change the data list in larrd-config

trouble@sun:$ vi /usr/local/larrd/larrd-config.pl
1
@DATALIST=("la","disk","bbnet","vmstat","netstat","users","procs","memory","snmpusers");

Find your larrd-grapher.cgi and add the following section somewhere around line: 1470

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 snmpusers =&gt; {
    hourly =&gt; {
        start_sec =&gt; "e-48h",
        title =&gt; "$host # of Users Last 48 Hours",
    },
    daily =&gt; {
        start_sec =&gt; "e-12d",
        title =&gt; "$host # of Users Last 12 Days",
    },
    weekly =&gt; {
        start_sec =&gt; "e-48d",
        title =&gt; "$host # of Users Last 48 Days",
    },
    monthly =&gt; {
        start_sec =&gt; "e-576D",
        title =&gt; "$host # of Users Last 576 Days",
    },
    yaxis =&gt; "#",
    lines =&gt; sub {
        my ($RRD,$service,$graph,$p,$color)=@_;
 
        return [
#            qq{DEF:p=$host.snmpusers.rrd:la:AVERAGE},
            qq{DEF:p=$host.snmpusers.rrd:snmpusers:AVERAGE},
            qq{AREA:p#00CC00:Users},
            qq{COMMENT:n},
            qq{GPRINT:p:LAST:Users   : %5.1lf%s (cur)},
            qq{GPRINT:p:MAX: : %5.1lf%s (max)},
            qq{GPRINT:p:MIN: : %5.1lf%s (min)},
            qq{GPRINT:p:AVERAGE: : %5.1lf%s (avg)n},
        ]
    },
  }

Restart bigbro and it should work.

Page 5 of 9 «...34567...»