8a8b59f396f8ac2875ffac3dfad923e39b60c392
[olsrd.git] / files / generateEffectiveConfigurationFile
1 #!/bin/bash
2
3 set -e
4 set -u
5
6 configFileTmp=""
7 function exitTrapHandler() {
8   local -i exitCode=${?}
9
10   if [ -n "$configFileTmp" ]; then
11     rm -f "$configFileTmp"
12   fi
13
14   if [[ ${exitCode} -ne 0 ]]; then
15     echo "Exiting with code ${exitCode}"
16   fi
17   exit ${exitCode}
18 }
19
20 trap exitTrapHandler EXIT
21
22
23 script="$0"
24 scriptDir="$(dirname "$script")"
25 pushd "$scriptDir" &> /dev/null
26 scriptDir="$(pwd)"
27 popd &> /dev/null
28 baseDir="$(dirname "$scriptDir")"
29
30 olsrd="$baseDir/olsrd"
31
32 arprefreshLib="$baseDir/lib/arprefresh/olsrd_arprefresh.so.0.1"
33 arprefreshLibDir="$(dirname "$arprefreshLib")"
34 dyngwLib="$baseDir/lib/dyn_gw/olsrd_dyn_gw.so.0.5"
35 dyngwLibDir="$(dirname "$dyngwLib")"
36 httpinfoLib="$baseDir/lib/httpinfo/olsrd_httpinfo.so.0.1"
37 httpinfoLibDir="$(dirname "$httpinfoLib")"
38 jsoninfoLib="$baseDir/lib/jsoninfo/olsrd_jsoninfo.so.0.0"
39 jsoninfoLibDir="$(dirname "$jsoninfoLib")"
40 nameserviceLib="$baseDir/lib/nameservice/olsrd_nameservice.so.0.3"
41 nameserviceLibDir="$(dirname "$nameserviceLib")"
42 p2pdinfoLib="$baseDir/lib/p2pd/olsrd_p2pd.so.0.1.0"
43 p2pdinfoLibDir="$(dirname "$p2pdinfoLib")"
44 txtinfoLib="$baseDir/lib/txtinfo/olsrd_txtinfo.so.0.1"
45 txtinfoLibDir="$(dirname "$txtinfoLib")"
46
47
48 # Check root
49 if [ ! "$(whoami)" = "root" ]; then
50   echo "ERROR: must be root."
51   exit 1
52 fi
53
54
55 # Check nc
56 set +e
57 nc="$(which nc 2> /dev/null)"
58 set -e
59 if [ -z "$nc" ]; then
60   echo "ERROR: nc doesn't seem to be installed."
61   exit 1
62 fi
63
64
65 # Check compiled
66 for i in "$olsrd" \
67          "$arprefreshLib" \
68          "$dyngwLib" \
69          "$httpinfoLib" \
70          "$jsoninfoLib" \
71          "$nameserviceLib" \
72          "$p2pdinfoLib" \
73          "$txtinfoLib"; do
74   if [ ! -r "$i" ]; then
75     echo "ERROR: $i is not readable."
76     exit 1
77   fi
78 done
79
80
81 # Check parameters
82 if [ $# -ne 2 ]; then
83   echo "ERROR: specify network interface and configuration file."
84   exit 1
85 fi
86
87 nwif="$1"
88 configFile="$2"
89
90 # Check network interfaces
91 set +e
92 nwifGrep="$(cat /proc/net/dev | grep -E "^[[:space:]]*$nwif[[:space:]]*:[[:space:]]+.*\$")"
93 set -e
94
95 if [ -z "$nwifGrep" ]; then
96   echo "ERROR: network interface $nwif doesn't exist."
97   exit 1
98 fi
99
100
101 # Check configuration file
102 if [ ! -r "$configFile" ]; then
103   echo "ERROR: configuration file $configFile is not readable."
104   exit 1
105 fi
106
107 configFileDir="$(dirname "$configFile")"
108 pushd "$configFileDir" &> /dev/null
109 configFileDir="$(pwd)"
110 popd &> /dev/null
111 configFile="$configFileDir/$(basename "$configFile")"
112
113
114 # Generate adjusted configuration file
115 regex="^([[:space:]]*[Ii][Nn][Tt][Ee][Rr][Ff][Aa][Cc][Ee][[:space:]]+)"
116 configFileTmp="$(mktemp)"
117 sed -r "s/$regex\"wlan0\"/\1\"$nwif\"/" \
118        "$configFile" \
119        > "$configFileTmp"
120
121
122 echo "Stopping all olsrd instances"
123 set +e
124 killall "$(basename "$olsrd")"
125 set -e
126
127
128 echo "Starting $(basename "$olsrd")"
129 export LD_LIBRARY_PATH="$arprefreshLibDir:$dyngwLibDir:$httpinfoLibDir:$jsoninfoLibDir:$nameserviceLibDir:$p2pdinfoLibDir:$txtinfoLibDir"
130 "$olsrd" -f "$configFileTmp" -nofork & #> /dev/null &
131
132
133 sleep 1
134 echo -n "Sleeping a bit "
135 for i in 3 2 1; do
136   echo -n "$i"
137   sleep 1
138 done
139 echo ""
140
141
142 echo "Generating effective configuration file"
143 echo "  $configFile.txt"
144 set +e
145 echo "/olsrd.conf" | \
146   nc 127.0.0.1 9090 | \
147   tail -n +6 | \
148   sed -r "s/$regex\"$nwif\"/\1\"wlan0\"/" \
149   > "$configFile.txt"
150 chown --reference="$configFile" "$configFile.txt"
151 set -e
152
153
154 echo "Stopping all $(basename "$olsrd") instances"
155 set +e
156 killall "$(basename "$olsrd")"
157 set -e
158
159
160 rm -f "$configFileTmp"
161 configFileTmp=""
162
163 sleep 1
164 echo ""