script to prepare the host machine environment for the Qemu emulation
[tests.git] / system / env-qemu
1 #!/bin/bash
2
3
4 # Establishment of a runtime environment for a
5 # virtual  machine  under QEMU, This script permits
6 # to the virtual machine to share the
7 # network connection with a host machine under FC6.
8
9 # Default Value
10 IP_GATEWAY=0.0.0.0
11 IP_HOST=0.0.0.0
12 IP_BROADCAST=0.0.0.0
13 IP_NETMASK=0.0.0.0
14
15 INTERFACE_LAN=eth0
16 INTERFACE_BRIDGE=br0
17
18 # Fonction de mise en place du pont
19 start () {
20
21     if [ -n "$1" ]; then
22         INTERFACE_LAN=$1
23         shift
24     fi
25     set $(/sbin/ifconfig | grep $INTERFACE_LAN) >/dev/null
26     if [ -z "$1" ]; then
27         echo "Interface réseau $IF_HOTE non trouvée."
28         exit 1
29     fi
30     shift $(($# - 1))
31     echo "Using the interface" $INTERFACE_LAN
32         
33     #Restarting the udev
34     echo "Starting the udev ..."
35     /sbin/udevd restart
36     #Loding the tun/tap model
37     echo "Loading the tun module ..."
38     modprobe tun
39     set $(lsmod | grep tun) >/dev/null
40     if [ -z "$1" ]; then
41         echo "Module tun/tap not activated"
42         exit 1
43     fi
44     shift $(($# - 1))
45
46     #Giving acces in Read/Write to the tun module
47     echo "Granting the Read/Write acces to the tun module..."
48     chmod 666 /dev/net/tun
49
50
51     ##Get The BROADCAST ip @
52     set $(/sbin/ip addr show $INTERFACE_LAN | grep inet) >/dev/null 2>&1
53     if [ -n "$2" ]; then
54         IP_BROADCAST=$4
55     fi
56     shift $(($# - 1))
57     
58     #Getting the GATEWAY IP @
59     set $(netstat -rn | grep UG ) >/dev/null 2>&1
60     if [ -n "$2" ]; then
61         IP_GATEWAY=$2
62     fi
63     shift $(($# - 1))
64
65     #Getting the host IP
66     set $(ifconfig $INTERFACE_LAN 2> /dev/null | grep "inet addr:" | \
67         sed -e "s/.*addr:\([^ ]*\).*/\1/")
68     if [ -n "$1" ]; then
69         IP_HOST=$1
70     fi
71     shift $(($# - 1))
72  
73     ##Getting the Netmask address
74     set $(ifconfig $INTERFACE_LAN 2> /dev/null | grep "inet addr:" | \
75         sed -e "s/.*Mask:\([^ ]*\).*/\1/")
76     if [ -n "$1" ]; then
77         IP_NETMASK=$1
78     fi
79     shift $(($# - 1))
80  
81     # Création et paramétrage du pont
82     echo "Configure $INTERFACE_BRIDGE bridge..."
83     /usr/sbin/brctl addbr $INTERFACE_BRIDGE
84     #/usr/sbin/brctl stp $INTERFACE_BRIDGE yes
85     /usr/sbin/brctl addif $INTERFACE_BRIDGE $INTERFACE_LAN
86     echo "Activating promiscuous mode  $INTERFACE_LAN..."
87     /sbin/ifconfig $INTERFACE_LAN 0.0.0.0 promisc up
88     sleep 2
89     echo "IP address on $INTERFACE_BRIDGE..."
90     # static
91     /sbin/ifconfig $INTERFACE_BRIDGE $IP_HOST  broadcast $IP_BROADCAST  netmask $IP_NETMASK up
92     sleep 1
93         
94     #Reconfigure the Bridge IP @ in the host machine
95     echo "Configuring  the IP  Gateway @:" $IP_GATEWAY
96     route add default gw $IP_GATEWAY
97
98     
99     #wipe the host firewall otherwise the guest qemu can't acces to the LAN
100     echo "Wiping the firewall..." 
101     iptables -F
102     
103     #preparing the hard disk image for qemu install
104     if [  -e "hda_5.raw" ];then
105         rm -rf hda_5.raw
106     fi
107     echo "Creating hard disk for Qemu install..."
108     set $(qemu-img create hda_5.raw 5G) >/dev/null
109     if [ -z "$1" ];then
110         echo "Can't Create disk image..."
111     fi
112     shift $(($# - 1))
113     
114         
115     
116 }
117
118
119 #Adding a new interface to the bridge
120 add () {
121         /sbin/ifconfig $1 0.0.0.0 promisc up
122         /usr/sbin/brctl addif $INTERFACE_BRIDGE $1
123 }
124
125
126 #Stop the actual bridged network  and Restore the original network
127 stop () {
128         if [ -n "$1" ]; then
129                 INTERFACE_LAN=$1
130         fi
131         TESTPONT=$(/sbin/ifconfig | grep $INTERFACE_BRIDGE)
132         if [ -z "$TESTPONT" ]; then
133                 echo "Attention : pont réseau non trouvé. Vérifier la config réseau ..."
134                 exit 1
135         fi
136         /usr/sbin/brctl delif $INTERFACE_BRIDGE $INTERFACE_LAN
137         /sbin/ifconfig $INTERFACE_BRIDGE down
138         /usr/sbin/brctl delbr $INTERFACE_BRIDGE
139         /sbin/service network restart
140 }
141
142
143 case $1 in
144         start)
145                 start $2
146         ;;
147         stop)
148                 stop $2
149         ;;
150         add)
151                 add $2
152         ;;
153         *)
154                 echo $"Use: env-qemu {start|add|stop} [interface]"
155                 exit 1
156 esac
157
158 exit 0
159
160
161
162