Browse Source

Reorganizing mesh

Bob Mottram 9 years ago
parent
commit
889c9c757e
4 changed files with 1764 additions and 1739 deletions
  1. 543
    1035
      src/freedombone
  2. 271
    374
      src/freedombone-client
  3. 32
    330
      src/freedombone-image-customise
  4. 918
    0
      src/freedombone-mesh-install

+ 543
- 1035
src/freedombone
File diff suppressed because it is too large
View File


+ 271
- 374
src/freedombone-client View File

@@ -112,369 +112,266 @@ function configure_ssh_client {
112 112
   echo ''
113 113
 }
114 114
 
115
-function mesh_babel {
116
-  if [ ! -f /tmp/meshtype ]; then
117
-      sudo apt-get -y install babeld
118
-      sudo apt-get -y install irssi mumble
119
-      if [ ! -f /usr/bin/toxic ]; then
120
-          sudo apt-get -y install toxic
121
-          echo "n
122
-/nick $USER
123
-/exit
124
-" | /usr/bin/toxic -d
125
-      fi
126
-
127
-      CURR_DIR=$(pwd)
128
-      if [ ! -f ~/develop/toxid ]; then
129
-          if [ ! -f ~/develop ]; then
130
-              mkdir ~/develop
131
-          fi
132
-          cd ~/develop
133
-          git clone $TOXID_REPO ~/develop/toxid
134
-      fi
135
-      cd ~/develop/toxid
136
-      sudo make install
137
-      cd $CURR_DIR
138
-  fi
139
-
140
-  babel_script=/tmp/babel
141
-
142
-  echo '#!/bin/bash' > $babel_script
143
-  echo '' >> $babel_script
144
-  echo 'if [[ $1 == "ls" || $1 == "list" ]]; then' >> $babel_script
145
-  echo '    avahi-browse -atl' >> $babel_script
146
-  echo '    exit 0' >> $babel_script
147
-  echo 'fi' >> $babel_script
148
-  echo '' >> $babel_script
149
-  echo 'if [[ $1 == "start" ]]; then' >> $babel_script
150
-  echo '    if [ -f /tmp/meshtype ] ; then' >> $babel_script
151
-  echo '        echo "Mesh already running"' >> $babel_script
152
-  echo '        return' >> $babel_script
153
-  echo '    fi' >> $batman_script
154
-  echo '    # install avahi' >> $babel_script
155
-  echo '    apt-get -y install avahi-utils avahi-autoipd avahi-daemon avahi-dnsconfd bittornado' >> $babel_script
156
-  echo '    sed -i "s|#host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $babel_script
157
-  echo '    sed -i "s|host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $babel_script
158
-  echo '    if [ -f /bin/systemctl ]; then' >> $babel_script
159
-  echo '        systemctl restart avahi-daemon' >> $babel_script
160
-  echo '    else' >> $babel_script
161
-  echo '        service avahi-daemon restart' >> $babel_script
162
-  echo '    fi' >> $babel_script
163
-  echo '    echo "babel" > /tmp/meshtype' >> $babel_script
164
-  echo 'fi' >> $babel_script
165
-  echo '' >> $babel_script
166
-  echo "IFACE=$WIFI_INTERFACE" >> $babel_script
167
-  echo 'if [[ $IFACE == "wlan0" ]]; then' >> $babel_script
168
-  echo '    if grep -q "wlan1" /proc/net/dev; then' >> $babel_script
169
-  echo '        IFACE=wlan1' >> $babel_script
170
-  echo '    fi' >> $babel_script
171
-  echo 'fi' >> $babel_script
172
-  echo 'if [[ $IFACE == "wlan0" ]]; then' >> $babel_script
173
-  echo '    if grep -q "wlan2" /proc/net/dev; then' >> $babel_script
174
-  echo '        IFACE=wlan2' >> $babel_script
175
-  echo '    fi' >> $babel_script
176
-  echo 'fi' >> $babel_script
177
-  echo 'if [[ $IFACE == "wlan0" ]]; then' >> $babel_script
178
-  echo '    if grep -q "wlan3" /proc/net/dev; then' >> $babel_script
179
-  echo '        IFACE=wlan3' >> $babel_script
180
-  echo '    fi' >> $babel_script
181
-  echo 'fi' >> $babel_script
182
-  echo '' >> $babel_script
183
-  echo 'if [[ ! grep -q "$IFACE" /proc/net/dev || $1 == "stop" ]]; then' >> $babel_script
184
-  echo '    if ! grep -q "$IFACE" /proc/net/dev; then' >> $babel_script
185
-  echo '        echo "Interface $IFACE was not found"' >> $babel_script
186
-  echo '    else' >> $babel_script
187
-  echo '        echo "Stopping"' >> $babel_script
188
-  echo '    fi' >> $babel_script
189
-  echo '    ifconfig $IFACE down' >> $babel_script
190
-  echo '    pkill babeld' >> $babel_script
191
-  echo '    if [ -f /bin/systemctl ]; then' >> $babel_script
192
-  echo '        systemctl restart network-manager' >> $babel_script
193
-  echo '    else' >> $babel_script
194
-  echo '        service network-manager restart' >> $babel_script
195
-  echo '    fi' >> $babel_script
196
-  echo '    exit 1' >> $babel_script
197
-  echo 'fi' >> $babel_script
198
-  echo '' >> $babel_script
199
-  echo 'if [ -f /bin/systemctl ]; then' >> $babel_script
200
-  echo '    systemctl stop network-manager' >> $babel_script
201
-  echo 'else' >> $babel_script
202
-  echo '    service network-manager stop' >> $babel_script
203
-  echo 'fi' >> $babel_script
204
-  echo 'ifconfig $IFACE down' >> $babel_script
205
-  echo -n 'iwconfig $IFACE mode ad-hoc channel ' >> $babel_script
206
-  echo "$WIFI_CHANNEL essid \"$ESSID\"" >> $babel_script
207
-  echo 'ifconfig $IFACE up' >> $babel_script
208
-  echo -n 'ifconfig $IFACE:avahi ' >> $babel_script
209
-  echo -n "$LOCAL_NETWORK_STATIC_IP_ADDRESS netmask " >> $babel_script
210
-  echo '255.255.255.0 broadcast 192.168.13.255' >> $babel_script
211
-  echo -n 'babeld -D $IFACE:avahi -p ' >> $babel_script
212
-  echo -n "$BABEL_PORT -d 5 " >> $babel_script
213
-  echo '$IFACE' >> $babel_script
214
-  echo 'exit 0' >> $babel_script
215
-  chmod +x $babel_script
216
-  sudo mv $babel_script /usr/bin/babel
217
-}
218 115
 
219 116
 function mesh_batman {
220
-  if [ ! -f /tmp/meshtype ]; then
221
-      sudo apt-get -y install iproute bridge-utils libnetfilter-conntrack3 batctl
222
-      sudo apt-get -y install python-dev libevent-dev ebtables python-pip
223
-      sudo apt-get -y install wireless-tools rfkill
224
-      sudo apt-get -y install irssi mumble
225
-      if [ ! -f /usr/bin/toxic ]; then
226
-          sudo apt-get -y install toxic
227
-          echo "n
117
+	if [ ! -f /tmp/meshtype ]; then
118
+		sudo apt-get -y install iproute bridge-utils libnetfilter-conntrack3 batctl
119
+		sudo apt-get -y install python-dev libevent-dev ebtables python-pip
120
+		sudo apt-get -y install wireless-tools rfkill
121
+		sudo apt-get -y install irssi mumble
122
+		if [ ! -f /usr/bin/toxic ]; then
123
+			sudo apt-get -y install toxic
124
+			echo "n
228 125
 /nick $USER
229 126
 /exit
230 127
 " | /usr/bin/toxic -d
231
-      fi
232
-  fi
128
+		fi
129
+	fi
233 130
 
234
-  batman_script=/tmp/batman
131
+	BATMAN_SCRIPT=/tmp/batman
235 132
 
236
-  echo '#!/bin/bash' > $batman_script
237
-  echo '' >> $batman_script
238
-  echo 'if [[ $1 == "start" ]]; then' >> $batman_script
239
-  echo '    # install avahi' >> $batman_script
240
-  echo '    apt-get -y install avahi-utils avahi-autoipd avahi-daemon avahi-dnsconfd bittornado' >> $batman_script
241
-  echo '    sed -i "s|#host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $batman_script
242
-  echo '    sed -i "s|host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $batman_script
243
-  echo '    sed -i "s|use-ipv4=.*|use-ipv4=yes|g" /etc/avahi/avahi-daemon.conf' >> $batman_script
244
-  echo '    sed -i "s|use-ipv6=.*|use-ipv6=no|g" /etc/avahi/avahi-daemon.conf' >> $batman_script
245
-  echo '    sed -i "s|#disallow-other-stacks=.*|disallow-other-stacks=yes|g" /etc/avahi/avahi-daemon.conf' >> $batman_script
246
-  echo '    sed -i "s|hosts:.*|hosts:          files mdns4_minimal dns mdns4 mdns|g" /etc/nsswitch.conf' >> $batman_script
247
-  echo '    if [ -f /bin/systemctl ]; then' >> $batman_script
248
-  echo '        systemctl restart avahi-daemon' >> $batman_script
249
-  echo '    else' >> $batman_script
250
-  echo '        service avahi-daemon restart' >> $batman_script
251
-  echo '    fi' >> $batman_script
252
-  echo 'fi' >> $batman_script
253
-  echo '' >> $batman_script
254
-  echo '# Mesh definition' >> $batman_script
255
-  echo "ESSID=$ESSID" >> $batman_script
256
-  echo "CELLID=$BATMAN_CELLID" >> $batman_script
257
-  echo "CHANNEL=$WIFI_CHANNEL" >> $batman_script
258
-  echo '' >> $batman_script
259
-  echo '# Ethernet bridge definition (bridged to bat0)' >> $batman_script
260
-  echo 'BRIDGE=br-mesh' >> $batman_script
261
-  echo "IFACE=$WIFI_INTERFACE" >> $batman_script
262
-  echo 'EIFACE=eth0' >> $batman_script
263
-  echo '' >> $batman_script
264
-  echo 'if [[ $IFACE == "wlan0" ]]; then' >> $batman_script
265
-  echo '    if grep -q "wlan1" /proc/net/dev; then' >> $batman_script
266
-  echo '        IFACE=wlan1' >> $batman_script
267
-  echo '    fi' >> $batman_script
268
-  echo 'fi' >> $batman_script
269
-  echo 'if [[ $IFACE == "wlan0" ]]; then' >> $batman_script
270
-  echo '    if grep -q "wlan2" /proc/net/dev; then' >> $batman_script
271
-  echo '        IFACE=wlan2' >> $batman_script
272
-  echo '    fi' >> $batman_script
273
-  echo 'fi' >> $batman_script
274
-  echo 'if [[ $IFACE == "wlan0" ]]; then' >> $batman_script
275
-  echo '    if grep -q "wlan3" /proc/net/dev; then' >> $batman_script
276
-  echo '        IFACE=wlan3' >> $batman_script
277
-  echo '    fi' >> $batman_script
278
-  echo 'fi' >> $batman_script
279
-  echo '' >> $batman_script
280
-  echo 'if [ -e /etc/default/batctl ]; then' >> $batman_script
281
-  echo '    . /etc/default/batctl' >> $batman_script
282
-  echo 'fi' >> $batman_script
283
-  echo '' >> $batman_script
284
-  echo 'start() {' >> $batman_script
285
-  echo '    if [ -f /tmp/meshtype ] ; then' >> $batman_script
286
-  echo '        echo "Mesh already running"' >> $batman_script
287
-  echo '        return' >> $batman_script
288
-  echo '    fi' >> $batman_script
289
-  echo '    if [ -z "$IFACE" ] ; then' >> $batman_script
290
-  echo '        echo "error: unable to find wifi interface, not enabling batman-adv mesh"' >> $batman_script
291
-  echo '        return' >> $batman_script
292
-  echo '    fi' >> $batman_script
293
-  echo '    echo "info: enabling batman-adv mesh network $ESSID on $IFACE"' >> $batman_script
133
+	echo '#!/bin/bash' > $BATMAN_SCRIPT
134
+	echo '' >> $BATMAN_SCRIPT
135
+	echo 'if [[ $1 == "start" ]]; then' >> $BATMAN_SCRIPT
136
+	echo '    # install avahi' >> $BATMAN_SCRIPT
137
+	echo '    apt-get -y install avahi-utils avahi-autoipd avahi-daemon avahi-dnsconfd bittornado' >> $BATMAN_SCRIPT
138
+	echo '    sed -i "s|#host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $BATMAN_SCRIPT
139
+	echo '    sed -i "s|host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $BATMAN_SCRIPT
140
+	echo '    sed -i "s|use-ipv4=.*|use-ipv4=yes|g" /etc/avahi/avahi-daemon.conf' >> $BATMAN_SCRIPT
141
+	echo '    sed -i "s|use-ipv6=.*|use-ipv6=no|g" /etc/avahi/avahi-daemon.conf' >> $BATMAN_SCRIPT
142
+	echo '    sed -i "s|#disallow-other-stacks=.*|disallow-other-stacks=yes|g" /etc/avahi/avahi-daemon.conf' >> $BATMAN_SCRIPT
143
+	echo '    sed -i "s|hosts:.*|hosts:          files mdns4_minimal dns mdns4 mdns|g" /etc/nsswitch.conf' >> $BATMAN_SCRIPT
144
+	echo '    if [ -f /bin/systemctl ]; then' >> $BATMAN_SCRIPT
145
+	echo '        systemctl restart avahi-daemon' >> $BATMAN_SCRIPT
146
+	echo '    else' >> $BATMAN_SCRIPT
147
+	echo '        service avahi-daemon restart' >> $BATMAN_SCRIPT
148
+	echo '    fi' >> $BATMAN_SCRIPT
149
+	echo 'fi' >> $BATMAN_SCRIPT
150
+	echo '' >> $BATMAN_SCRIPT
151
+	echo '# Mesh definition' >> $BATMAN_SCRIPT
152
+	echo "ESSID=$ESSID" >> $BATMAN_SCRIPT
153
+	echo "CELLID=$BATMAN_CELLID" >> $BATMAN_SCRIPT
154
+	echo "CHANNEL=$WIFI_CHANNEL" >> $BATMAN_SCRIPT
155
+	echo '' >> $BATMAN_SCRIPT
156
+	echo '# Ethernet bridge definition (bridged to bat0)' >> $BATMAN_SCRIPT
157
+	echo 'BRIDGE=br-mesh' >> $BATMAN_SCRIPT
158
+	echo "IFACE=$WIFI_INTERFACE" >> $BATMAN_SCRIPT
159
+	echo 'EIFACE=eth0' >> $BATMAN_SCRIPT
160
+	echo '' >> $BATMAN_SCRIPT
161
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $BATMAN_SCRIPT
162
+	echo '    if grep -q "wlan1" /proc/net/dev; then' >> $BATMAN_SCRIPT
163
+	echo '        IFACE=wlan1' >> $BATMAN_SCRIPT
164
+	echo '    fi' >> $BATMAN_SCRIPT
165
+	echo 'fi' >> $BATMAN_SCRIPT
166
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $BATMAN_SCRIPT
167
+	echo '    if grep -q "wlan2" /proc/net/dev; then' >> $BATMAN_SCRIPT
168
+	echo '        IFACE=wlan2' >> $BATMAN_SCRIPT
169
+	echo '    fi' >> $BATMAN_SCRIPT
170
+	echo 'fi' >> $BATMAN_SCRIPT
171
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $BATMAN_SCRIPT
172
+	echo '    if grep -q "wlan3" /proc/net/dev; then' >> $BATMAN_SCRIPT
173
+	echo '        IFACE=wlan3' >> $BATMAN_SCRIPT
174
+	echo '    fi' >> $BATMAN_SCRIPT
175
+	echo 'fi' >> $BATMAN_SCRIPT
176
+	echo '' >> $BATMAN_SCRIPT
177
+	echo 'if [ -e /etc/default/batctl ]; then' >> $BATMAN_SCRIPT
178
+	echo '    . /etc/default/batctl' >> $BATMAN_SCRIPT
179
+	echo 'fi' >> $BATMAN_SCRIPT
180
+	echo '' >> $BATMAN_SCRIPT
181
+	echo 'start() {' >> $BATMAN_SCRIPT
182
+	echo '    if [ -f /tmp/meshtype ] ; then' >> $BATMAN_SCRIPT
183
+	echo '        echo "Mesh already running"' >> $BATMAN_SCRIPT
184
+	echo '        return' >> $BATMAN_SCRIPT
185
+	echo '    fi' >> $BATMAN_SCRIPT
186
+	echo '    if [ -z "$IFACE" ] ; then' >> $BATMAN_SCRIPT
187
+	echo '        echo "error: unable to find wifi interface, not enabling batman-adv mesh"' >> $BATMAN_SCRIPT
188
+	echo '        return' >> $BATMAN_SCRIPT
189
+	echo '    fi' >> $BATMAN_SCRIPT
190
+	echo '    echo "info: enabling batman-adv mesh network $ESSID on $IFACE"' >> $BATMAN_SCRIPT
294 191
 
295
-  echo '    if [ -f /bin/systemctl ]; then' >> $batman_script
296
-  echo '        systemctl stop network-manager' >> $batman_script
297
-  echo '    else' >> $batman_script
298
-  echo '        service network-manager stop' >> $batman_script
299
-  echo '    fi' >> $batman_script
300
-  echo '    sleep 5' >> $batman_script
301
-  echo '' >> $batman_script
302
-  echo "    # remove an avahi service which isn't used" >> $batman_script
303
-  echo '    if [ -f /etc/avahi/services/udisks.service ]; then' >> $batman_script
304
-  echo '        sudo rm /etc/avahi/services/udisks.service' >> $batman_script
305
-  echo '    fi' >> $batman_script
306
-  echo '' >> $batman_script
307
-  echo '    # Might have to re-enable wifi' >> $batman_script
308
-  echo '    rfkill unblock $(rfkill list|awk -F: "/phy/ {print $1}") || true' >> $batman_script
309
-  echo '' >> $batman_script
310
-  echo '    ifconfig $IFACE down' >> $batman_script
311
-  echo '    ifconfig $IFACE mtu 1532' >> $batman_script
312
-  echo '    iwconfig $IFACE enc off' >> $batman_script
313
-  echo '    iwconfig $IFACE mode ad-hoc essid $ESSID channel $CHANNEL' >> $batman_script
314
-  echo '    sleep 1' >> $batman_script
315
-  echo '    iwconfig $IFACE ap $CELLID' >> $batman_script
316
-  echo '' >> $batman_script
317
-  echo '    modprobe batman-adv' >> $batman_script
318
-  echo '    batctl if add $IFACE' >> $batman_script
319
-  echo '    ifconfig $IFACE up' >> $batman_script
320
-  echo '    avahi-autoipd --force-bind --daemonize --wait $BRIDGE' >> $batman_script
321
-  echo '    avahi-autoipd --force-bind --daemonize --wait $IFACE' >> $batman_script
322
-  echo '    ifconfig bat0 up promisc' >> $batman_script
323
-  echo '' >> $batman_script
324
-  echo '    #Use persistent HWAddr' >> $batman_script
325
-  echo '    ether_new=$(ifconfig eth0 | grep HWaddr | sed -e "s/.*HWaddr //")' >> $batman_script
326
-  echo '    if [ ! -f /var/lib/mesh-node/bat0 ]; then' >> $batman_script
327
-  echo '        mkdir /var/lib/mesh-node' >> $batman_script
328
-  echo '        echo "${ether_new}" > /var/lib/mesh-node/bat0' >> $batman_script
329
-  echo '    else' >> $batman_script
330
-  echo '        ether=$(cat /var/lib/mesh-node/bat0)' >> $batman_script
331
-  echo '        ifconfig bat0 hw ether ${ether}' >> $batman_script
332
-  echo '    fi' >> $batman_script
333
-  echo '' >> $batman_script
334
-  echo '    if [ "$EIFACE" ] ; then' >> $batman_script
335
-  echo '        brctl addbr $BRIDGE' >> $batman_script
336
-  echo '        brctl addif $BRIDGE bat0' >> $batman_script
337
-  echo '        brctl addif $BRIDGE $EIFACE' >> $batman_script
338
-  echo '        ifconfig bat0 0.0.0.0' >> $batman_script
339
-  echo '        ifconfig $EIFACE 0.0.0.0' >> $batman_script
340
-  echo '        ifconfig $EIFACE up promisc' >> $batman_script
341
-  echo '        ifconfig $BRIDGE up' >> $batman_script
342
-  echo '    fi' >> $batman_script
343
-  echo '' >> $batman_script
344
-  echo '    iptables -A INPUT -p tcp --dport 548 -j ACCEPT' >> $batman_script
345
-  echo '    iptables -A INPUT -p udp --dport 548 -j ACCEPT' >> $batman_script
346
-  echo '    iptables -A INPUT -p tcp --dport 5353 -j ACCEPT' >> $batman_script
347
-  echo '    iptables -A INPUT -p udp --dport 5353 -j ACCEPT' >> $batman_script
348
-  echo '    iptables -A INPUT -p tcp --dport 5354 -j ACCEPT' >> $batman_script
349
-  echo '    iptables -A INPUT -p udp --dport 5354 -j ACCEPT' >> $batman_script
350
-  echo "    iptables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $batman_script
351
-  echo "    iptables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT" >> $batman_script
352
-  echo "    iptables -A INPUT -p udp --dport $TRACKER_PORT -j ACCEPT" >> $batman_script
353
-  echo "    iptables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $batman_script
354
-  echo "    iptables -A INPUT -p tcp --dport $IPFS_PORT -j ACCEPT" >> $batman_script
355
-  echo "    iptables -A INPUT -p udp --dport 1900 -j ACCEPT" >> $batman_script
356
-  echo "    iptables -A INPUT -p tcp --dport 80 -j ACCEPT" >> $batman_script
357
-  echo "    iptables -A INPUT -p udp -m udp -j ACCEPT" >> $batman_script
358
-  echo '' >> $batman_script
359
-  echo '    if [ -f /bin/systemctl ]; then' >> $batman_script
360
-  echo '        systemctl restart avahi-daemon' >> $batman_script
361
-  echo '    else' >> $batman_script
362
-  echo '        service avahi-daemon restart' >> $batman_script
363
-  echo '    fi' >> $batman_script
364
-  echo '    echo "batman" > /tmp/meshtype' >> $batman_script
365
-  echo '}' >> $batman_script
366
-  echo '' >> $batman_script
367
-  echo 'stop() {' >> $batman_script
368
-  echo '    if [ -z "$IFACE" ]; then' >> $batman_script
369
-  echo '        echo "error: unable to find wifi interface, not enabling batman-adv mesh"' >> $batman_script
370
-  echo '        return' >> $batman_script
371
-  echo '    fi' >> $batman_script
372
-  echo '    if [ "$EIFACE" ]; then' >> $batman_script
373
-  echo '        brctl delif $BRIDGE bat0' >> $batman_script
374
-  echo '        brctl delif $BRIDGE $EIFACE' >> $batman_script
375
-  echo '        ifconfig $BRIDGE down || true' >> $batman_script
376
-  echo '        brctl delbr $BRIDGE' >> $batman_script
377
-  echo '        ifconfig $EIFACE down -promisc' >> $batman_script
378
-  echo '    fi' >> $batman_script
379
-  echo '' >> $batman_script
380
-  echo '    avahi-autoipd -k $BRIDGE' >> $batman_script
381
-  echo '    avahi-autoipd -k $IFACE' >> $batman_script
382
-  echo '    ifconfig bat0 down -promisc' >> $batman_script
383
-  echo '' >> $batman_script
384
-  echo '    batctl if del $IFACE' >> $batman_script
385
-  echo '    rmmod batman-adv' >> $batman_script
386
-  echo '    ifconfig $IFACE mtu 1500' >> $batman_script
387
-  echo '    ifconfig $IFACE down' >> $batman_script
388
-  echo '    iwconfig $IFACE mode managed' >> $batman_script
389
-  echo '' >> $batman_script
390
-  echo '    iptables -D INPUT -p tcp --dport 548 -j ACCEPT' >> $batman_script
391
-  echo '    iptables -D INPUT -p udp --dport 548 -j ACCEPT' >> $batman_script
392
-  echo '    iptables -D INPUT -p tcp --dport 5353 -j ACCEPT' >> $batman_script
393
-  echo '    iptables -D INPUT -p udp --dport 5353 -j ACCEPT' >> $batman_script
394
-  echo '    iptables -D INPUT -p tcp --dport 5354 -j ACCEPT' >> $batman_script
395
-  echo '    iptables -D INPUT -p udp --dport 5354 -j ACCEPT' >> $batman_script
396
-  echo "    iptables -D INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $batman_script
397
-  echo "    iptables -D INPUT -p udp --dport $ZERONET_PORT -j ACCEPT" >> $batman_script
398
-  echo "    iptables -D INPUT -p udp --dport $TRACKER_PORT -j ACCEPT" >> $batman_script
399
-  echo "    iptables -D INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $batman_script
400
-  echo "    iptables -D INPUT -p tcp --dport $IPFS_PORT -j ACCEPT" >> $batman_script
401
-  echo "    iptables -D INPUT -p udp --dport 1900 -j ACCEPT" >> $batman_script
402
-  echo "    iptables -D INPUT -p tcp --dport 80 -j ACCEPT" >> $batman_script
403
-  echo "    iptables -D INPUT -p udp -m udp -j ACCEPT" >> $batman_script
404
-  echo '' >> $batman_script
405
-  echo '    if [ -f /bin/systemctl ]; then' >> $batman_script
406
-  echo '        systemctl restart network-manager' >> $batman_script
407
-  echo '    else' >> $batman_script
408
-  echo '        service network-manager restart' >> $batman_script
409
-  echo '    fi' >> $batman_script
410
-  echo '    ' >> $batman_script
411
-  echo '    # restore tox bootstrap nodes for the internet' >> $batman_script
412
-  echo '    if [ -f /usr/share/toxic/DHTnodes.internet ]; then' >> $batman_script
413
-  echo '        mv /usr/share/toxic/DHTnodes.internet /usr/share/toxic/DHTnodes' >> $batman_script
414
-  echo '    fi' >> $batman_script
415
-  echo '    if [ -f /usr/local/share/toxic/DHTnodes.internet ]; then' >> $batman_script
416
-  echo '        mv /usr/local/share/toxic/DHTnodes.internet /usr/local/share/toxic/DHTnodes' >> $batman_script
417
-  echo '    fi' >> $batman_script
418
-  echo '' >> $batman_script
419
-  echo '    if [ -f /bin/systemctl ]; then' >> $batman_script
420
-  echo '        systemctl stop avahi-daemon' >> $batman_script
421
-  echo '    else' >> $batman_script
422
-  echo '        service avahi-daemon stop' >> $batman_script
423
-  echo '    fi' >> $batman_script
424
-  echo '' >> $batman_script
425
-  echo '    sudo rm -f /tmp/meshtype' >> $batman_script
426
-  echo '' >> $batman_script
427
-  echo '    # kill processes' >> $batman_script
428
-  echo '    zeronet_proc=$(ps aux | grep zeronet | grep -v grep | awk -F " " "{print $2}" | head -n1)' >> $batman_script
429
-  echo '    if [ "$zeronet_proc" ]; then' >> $batman_script
430
-  echo '        kill -9 $zeronet_proc 2> /dev/null' >> $batman_script
431
-  echo '    fi' >> $batman_script
432
-  echo '    tracker_proc=$(ps aux | grep bttrack | grep -v grep | awk -F " " "{print $2}" | head -n1)' >> $batman_script
433
-  echo '    if [ "$tracker_proc" ]; then' >> $batman_script
434
-  echo '        kill -9 $tracker_proc 2> /dev/null' >> $batman_script
435
-  echo '    fi' >> $batman_script
436
-  echo '    if [ ! -f /etc/systemd/system/ipfs.service ]; then' >> $batman_script
437
-  echo '        ipfs_proc=$(ps aux | grep ipfs | grep -v grep | awk -F " " "{print $2}" | head -n1)' >> $batman_script
438
-  echo '        if [ "$ipfs_proc" ]; then' >> $batman_script
439
-  echo '            kill -9 $ipfs_proc 2> /dev/null' >> $batman_script
440
-  echo '        fi' >> $batman_script
441
-  echo '    fi' >> $batman_script
442
-  echo '}' >> $batman_script
443
-  echo '' >> $batman_script
444
-  echo 'if ! grep -q "$IFACE" /proc/net/dev; then' >> $batman_script
445
-  echo '    echo "Interface $IFACE was not found"' >> $batman_script
446
-  echo '    stop' >> $batman_script
447
-  echo '    exit 1' >> $batman_script
448
-  echo 'fi' >> $batman_script
449
-  echo '' >> $batman_script
450
-  echo 'case "$1" in' >> $batman_script
451
-  echo '    start|stop)' >> $batman_script
452
-  echo '        $1' >> $batman_script
453
-  echo '        ;;' >> $batman_script
454
-  echo '    restart)' >> $batman_script
455
-  echo '        stop' >> $batman_script
456
-  echo '        sleep 10' >> $batman_script
457
-  echo '        start' >> $batman_script
458
-  echo '        ;;' >> $batman_script
459
-  echo '    status)' >> $batman_script
460
-  echo '        batctl o' >> $batman_script
461
-  echo '        ;;' >> $batman_script
462
-  echo '    ping)' >> $batman_script
463
-  echo '        batctl ping $2' >> $batman_script
464
-  echo '        ;;' >> $batman_script
465
-  echo '    ls|list)' >> $batman_script
466
-  echo '        avahi-browse -atl' >> $batman_script
467
-  echo '        ;;' >> $batman_script
468
-  echo '    *)' >> $batman_script
469
-  echo '    echo "error: invalid parameter $1"' >> $batman_script
470
-  echo '    echo "usage: $0 {start|stop|restart|status|ping|ls|list}"' >> $batman_script
471
-  echo '    exit 2' >> $batman_script
472
-  echo '    ;;' >> $batman_script
473
-  echo 'esac' >> $batman_script
474
-  echo 'exit 0' >> $batman_script
475
-  chmod +x $batman_script
476
-  sudo cp -f $batman_script /usr/bin/batman
477
-  rm $batman_script
192
+	echo '    if [ -f /bin/systemctl ]; then' >> $BATMAN_SCRIPT
193
+	echo '        systemctl stop network-manager' >> $BATMAN_SCRIPT
194
+	echo '    else' >> $BATMAN_SCRIPT
195
+	echo '        service network-manager stop' >> $BATMAN_SCRIPT
196
+	echo '    fi' >> $BATMAN_SCRIPT
197
+	echo '    sleep 5' >> $BATMAN_SCRIPT
198
+	echo '' >> $BATMAN_SCRIPT
199
+	echo "    # remove an avahi service which isn't used" >> $BATMAN_SCRIPT
200
+	echo '    if [ -f /etc/avahi/services/udisks.service ]; then' >> $BATMAN_SCRIPT
201
+	echo '        sudo rm /etc/avahi/services/udisks.service' >> $BATMAN_SCRIPT
202
+	echo '    fi' >> $BATMAN_SCRIPT
203
+	echo '' >> $BATMAN_SCRIPT
204
+	echo '    # Might have to re-enable wifi' >> $BATMAN_SCRIPT
205
+	echo '    rfkill unblock $(rfkill list|awk -F: "/phy/ {print $1}") || true' >> $BATMAN_SCRIPT
206
+	echo '' >> $BATMAN_SCRIPT
207
+	echo '    ifconfig $IFACE down' >> $BATMAN_SCRIPT
208
+	echo '    ifconfig $IFACE mtu 1532' >> $BATMAN_SCRIPT
209
+	echo '    iwconfig $IFACE enc off' >> $BATMAN_SCRIPT
210
+	echo '    iwconfig $IFACE mode ad-hoc essid $ESSID channel $CHANNEL' >> $BATMAN_SCRIPT
211
+	echo '    sleep 1' >> $BATMAN_SCRIPT
212
+	echo '    iwconfig $IFACE ap $CELLID' >> $BATMAN_SCRIPT
213
+	echo '' >> $BATMAN_SCRIPT
214
+	echo '    modprobe batman-adv' >> $BATMAN_SCRIPT
215
+	echo '    batctl if add $IFACE' >> $BATMAN_SCRIPT
216
+	echo '    ifconfig $IFACE up' >> $BATMAN_SCRIPT
217
+	echo '    avahi-autoipd --force-bind --daemonize --wait $BRIDGE' >> $BATMAN_SCRIPT
218
+	echo '    avahi-autoipd --force-bind --daemonize --wait $IFACE' >> $BATMAN_SCRIPT
219
+	echo '    ifconfig bat0 up promisc' >> $BATMAN_SCRIPT
220
+	echo '' >> $BATMAN_SCRIPT
221
+	echo '    #Use persistent HWAddr' >> $BATMAN_SCRIPT
222
+	echo '    ether_new=$(ifconfig eth0 | grep HWaddr | sed -e "s/.*HWaddr //")' >> $BATMAN_SCRIPT
223
+	echo '    if [ ! -f /var/lib/mesh-node/bat0 ]; then' >> $BATMAN_SCRIPT
224
+	echo '        mkdir /var/lib/mesh-node' >> $BATMAN_SCRIPT
225
+	echo '        echo "${ether_new}" > /var/lib/mesh-node/bat0' >> $BATMAN_SCRIPT
226
+	echo '    else' >> $BATMAN_SCRIPT
227
+	echo '        ether=$(cat /var/lib/mesh-node/bat0)' >> $BATMAN_SCRIPT
228
+	echo '        ifconfig bat0 hw ether ${ether}' >> $BATMAN_SCRIPT
229
+	echo '    fi' >> $BATMAN_SCRIPT
230
+	echo '' >> $BATMAN_SCRIPT
231
+	echo '    if [ "$EIFACE" ] ; then' >> $BATMAN_SCRIPT
232
+	echo '        brctl addbr $BRIDGE' >> $BATMAN_SCRIPT
233
+	echo '        brctl addif $BRIDGE bat0' >> $BATMAN_SCRIPT
234
+	echo '        brctl addif $BRIDGE $EIFACE' >> $BATMAN_SCRIPT
235
+	echo '        ifconfig bat0 0.0.0.0' >> $BATMAN_SCRIPT
236
+	echo '        ifconfig $EIFACE 0.0.0.0' >> $BATMAN_SCRIPT
237
+	echo '        ifconfig $EIFACE up promisc' >> $BATMAN_SCRIPT
238
+	echo '        ifconfig $BRIDGE up' >> $BATMAN_SCRIPT
239
+	echo '    fi' >> $BATMAN_SCRIPT
240
+	echo '' >> $BATMAN_SCRIPT
241
+	echo '    iptables -A INPUT -p tcp --dport 548 -j ACCEPT' >> $BATMAN_SCRIPT
242
+	echo '    iptables -A INPUT -p udp --dport 548 -j ACCEPT' >> $BATMAN_SCRIPT
243
+	echo '    iptables -A INPUT -p tcp --dport 5353 -j ACCEPT' >> $BATMAN_SCRIPT
244
+	echo '    iptables -A INPUT -p udp --dport 5353 -j ACCEPT' >> $BATMAN_SCRIPT
245
+	echo '    iptables -A INPUT -p tcp --dport 5354 -j ACCEPT' >> $BATMAN_SCRIPT
246
+	echo '    iptables -A INPUT -p udp --dport 5354 -j ACCEPT' >> $BATMAN_SCRIPT
247
+	echo "    iptables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $BATMAN_SCRIPT
248
+	echo "    iptables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT" >> $BATMAN_SCRIPT
249
+	echo "    iptables -A INPUT -p udp --dport $TRACKER_PORT -j ACCEPT" >> $BATMAN_SCRIPT
250
+	echo "    iptables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $BATMAN_SCRIPT
251
+	echo "    iptables -A INPUT -p tcp --dport $IPFS_PORT -j ACCEPT" >> $BATMAN_SCRIPT
252
+	echo "    iptables -A INPUT -p udp --dport 1900 -j ACCEPT" >> $BATMAN_SCRIPT
253
+	echo "    iptables -A INPUT -p tcp --dport 80 -j ACCEPT" >> $BATMAN_SCRIPT
254
+	echo "    iptables -A INPUT -p udp -m udp -j ACCEPT" >> $BATMAN_SCRIPT
255
+	echo '' >> $BATMAN_SCRIPT
256
+	echo '    if [ -f /bin/systemctl ]; then' >> $BATMAN_SCRIPT
257
+	echo '        systemctl restart avahi-daemon' >> $BATMAN_SCRIPT
258
+	echo '    else' >> $BATMAN_SCRIPT
259
+	echo '        service avahi-daemon restart' >> $BATMAN_SCRIPT
260
+	echo '    fi' >> $BATMAN_SCRIPT
261
+	echo '    echo "batman" > /tmp/meshtype' >> $BATMAN_SCRIPT
262
+	echo '}' >> $BATMAN_SCRIPT
263
+	echo '' >> $BATMAN_SCRIPT
264
+	echo 'stop() {' >> $BATMAN_SCRIPT
265
+	echo '    if [ -z "$IFACE" ]; then' >> $BATMAN_SCRIPT
266
+	echo '        echo "error: unable to find wifi interface, not enabling batman-adv mesh"' >> $BATMAN_SCRIPT
267
+	echo '        return' >> $BATMAN_SCRIPT
268
+	echo '    fi' >> $BATMAN_SCRIPT
269
+	echo '    if [ "$EIFACE" ]; then' >> $BATMAN_SCRIPT
270
+	echo '        brctl delif $BRIDGE bat0' >> $BATMAN_SCRIPT
271
+	echo '        brctl delif $BRIDGE $EIFACE' >> $BATMAN_SCRIPT
272
+	echo '        ifconfig $BRIDGE down || true' >> $BATMAN_SCRIPT
273
+	echo '        brctl delbr $BRIDGE' >> $BATMAN_SCRIPT
274
+	echo '        ifconfig $EIFACE down -promisc' >> $BATMAN_SCRIPT
275
+	echo '    fi' >> $BATMAN_SCRIPT
276
+	echo '' >> $BATMAN_SCRIPT
277
+	echo '    avahi-autoipd -k $BRIDGE' >> $BATMAN_SCRIPT
278
+	echo '    avahi-autoipd -k $IFACE' >> $BATMAN_SCRIPT
279
+	echo '    ifconfig bat0 down -promisc' >> $BATMAN_SCRIPT
280
+	echo '' >> $BATMAN_SCRIPT
281
+	echo '    batctl if del $IFACE' >> $BATMAN_SCRIPT
282
+	echo '    rmmod batman-adv' >> $BATMAN_SCRIPT
283
+	echo '    ifconfig $IFACE mtu 1500' >> $BATMAN_SCRIPT
284
+	echo '    ifconfig $IFACE down' >> $BATMAN_SCRIPT
285
+	echo '    iwconfig $IFACE mode managed' >> $BATMAN_SCRIPT
286
+	echo '' >> $BATMAN_SCRIPT
287
+	echo '    iptables -D INPUT -p tcp --dport 548 -j ACCEPT' >> $BATMAN_SCRIPT
288
+	echo '    iptables -D INPUT -p udp --dport 548 -j ACCEPT' >> $BATMAN_SCRIPT
289
+	echo '    iptables -D INPUT -p tcp --dport 5353 -j ACCEPT' >> $BATMAN_SCRIPT
290
+	echo '    iptables -D INPUT -p udp --dport 5353 -j ACCEPT' >> $BATMAN_SCRIPT
291
+	echo '    iptables -D INPUT -p tcp --dport 5354 -j ACCEPT' >> $BATMAN_SCRIPT
292
+	echo '    iptables -D INPUT -p udp --dport 5354 -j ACCEPT' >> $BATMAN_SCRIPT
293
+	echo "    iptables -D INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $BATMAN_SCRIPT
294
+	echo "    iptables -D INPUT -p udp --dport $ZERONET_PORT -j ACCEPT" >> $BATMAN_SCRIPT
295
+	echo "    iptables -D INPUT -p udp --dport $TRACKER_PORT -j ACCEPT" >> $BATMAN_SCRIPT
296
+	echo "    iptables -D INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $BATMAN_SCRIPT
297
+	echo "    iptables -D INPUT -p tcp --dport $IPFS_PORT -j ACCEPT" >> $BATMAN_SCRIPT
298
+	echo "    iptables -D INPUT -p udp --dport 1900 -j ACCEPT" >> $BATMAN_SCRIPT
299
+	echo "    iptables -D INPUT -p tcp --dport 80 -j ACCEPT" >> $BATMAN_SCRIPT
300
+	echo "    iptables -D INPUT -p udp -m udp -j ACCEPT" >> $BATMAN_SCRIPT
301
+	echo '' >> $BATMAN_SCRIPT
302
+	echo '    if [ -f /bin/systemctl ]; then' >> $BATMAN_SCRIPT
303
+	echo '        systemctl restart network-manager' >> $BATMAN_SCRIPT
304
+	echo '    else' >> $BATMAN_SCRIPT
305
+	echo '        service network-manager restart' >> $BATMAN_SCRIPT
306
+	echo '    fi' >> $BATMAN_SCRIPT
307
+	echo '    ' >> $BATMAN_SCRIPT
308
+	echo '    # restore tox bootstrap nodes for the internet' >> $BATMAN_SCRIPT
309
+	echo '    if [ -f /usr/share/toxic/DHTnodes.internet ]; then' >> $BATMAN_SCRIPT
310
+	echo '        mv /usr/share/toxic/DHTnodes.internet /usr/share/toxic/DHTnodes' >> $BATMAN_SCRIPT
311
+	echo '    fi' >> $BATMAN_SCRIPT
312
+	echo '    if [ -f /usr/local/share/toxic/DHTnodes.internet ]; then' >> $BATMAN_SCRIPT
313
+	echo '        mv /usr/local/share/toxic/DHTnodes.internet /usr/local/share/toxic/DHTnodes' >> $BATMAN_SCRIPT
314
+	echo '    fi' >> $BATMAN_SCRIPT
315
+	echo '' >> $BATMAN_SCRIPT
316
+	echo '    if [ -f /bin/systemctl ]; then' >> $BATMAN_SCRIPT
317
+	echo '        systemctl stop avahi-daemon' >> $BATMAN_SCRIPT
318
+	echo '    else' >> $BATMAN_SCRIPT
319
+	echo '        service avahi-daemon stop' >> $BATMAN_SCRIPT
320
+	echo '    fi' >> $BATMAN_SCRIPT
321
+	echo '' >> $BATMAN_SCRIPT
322
+	echo '    sudo rm -f /tmp/meshtype' >> $BATMAN_SCRIPT
323
+	echo '' >> $BATMAN_SCRIPT
324
+	echo '    # kill processes' >> $BATMAN_SCRIPT
325
+	echo '    zeronet_proc=$(ps aux | grep zeronet | grep -v grep | awk -F " " "{print $2}" | head -n1)' >> $BATMAN_SCRIPT
326
+	echo '    if [ "$zeronet_proc" ]; then' >> $BATMAN_SCRIPT
327
+	echo '        kill -9 $zeronet_proc 2> /dev/null' >> $BATMAN_SCRIPT
328
+	echo '    fi' >> $BATMAN_SCRIPT
329
+	echo '    tracker_proc=$(ps aux | grep bttrack | grep -v grep | awk -F " " "{print $2}" | head -n1)' >> $BATMAN_SCRIPT
330
+	echo '    if [ "$tracker_proc" ]; then' >> $BATMAN_SCRIPT
331
+	echo '        kill -9 $tracker_proc 2> /dev/null' >> $BATMAN_SCRIPT
332
+	echo '    fi' >> $BATMAN_SCRIPT
333
+	echo '    if [ ! -f /etc/systemd/system/ipfs.service ]; then' >> $BATMAN_SCRIPT
334
+	echo '        ipfs_proc=$(ps aux | grep ipfs | grep -v grep | awk -F " " "{print $2}" | head -n1)' >> $BATMAN_SCRIPT
335
+	echo '        if [ "$ipfs_proc" ]; then' >> $BATMAN_SCRIPT
336
+	echo '            kill -9 $ipfs_proc 2> /dev/null' >> $BATMAN_SCRIPT
337
+	echo '        fi' >> $BATMAN_SCRIPT
338
+	echo '    fi' >> $BATMAN_SCRIPT
339
+	echo '}' >> $BATMAN_SCRIPT
340
+	echo '' >> $BATMAN_SCRIPT
341
+	echo 'if ! grep -q "$IFACE" /proc/net/dev; then' >> $BATMAN_SCRIPT
342
+	echo '    echo "Interface $IFACE was not found"' >> $BATMAN_SCRIPT
343
+	echo '    stop' >> $BATMAN_SCRIPT
344
+	echo '    exit 1' >> $BATMAN_SCRIPT
345
+	echo 'fi' >> $BATMAN_SCRIPT
346
+	echo '' >> $BATMAN_SCRIPT
347
+	echo 'case "$1" in' >> $BATMAN_SCRIPT
348
+	echo '    start|stop)' >> $BATMAN_SCRIPT
349
+	echo '        $1' >> $BATMAN_SCRIPT
350
+	echo '        ;;' >> $BATMAN_SCRIPT
351
+	echo '    restart)' >> $BATMAN_SCRIPT
352
+	echo '        stop' >> $BATMAN_SCRIPT
353
+	echo '        sleep 10' >> $BATMAN_SCRIPT
354
+	echo '        start' >> $BATMAN_SCRIPT
355
+	echo '        ;;' >> $BATMAN_SCRIPT
356
+	echo '    status)' >> $BATMAN_SCRIPT
357
+	echo '        batctl o' >> $BATMAN_SCRIPT
358
+	echo '        ;;' >> $BATMAN_SCRIPT
359
+	echo '    ping)' >> $BATMAN_SCRIPT
360
+	echo '        batctl ping $2' >> $BATMAN_SCRIPT
361
+	echo '        ;;' >> $BATMAN_SCRIPT
362
+	echo '    ls|list)' >> $BATMAN_SCRIPT
363
+	echo '        avahi-browse -atl' >> $BATMAN_SCRIPT
364
+	echo '        ;;' >> $BATMAN_SCRIPT
365
+	echo '    *)' >> $BATMAN_SCRIPT
366
+	echo '    echo "error: invalid parameter $1"' >> $BATMAN_SCRIPT
367
+	echo '    echo "usage: $0 {start|stop|restart|status|ping|ls|list}"' >> $BATMAN_SCRIPT
368
+	echo '    exit 2' >> $BATMAN_SCRIPT
369
+	echo '    ;;' >> $BATMAN_SCRIPT
370
+	echo 'esac' >> $BATMAN_SCRIPT
371
+	echo 'exit 0' >> $BATMAN_SCRIPT
372
+	chmod +x $BATMAN_SCRIPT
373
+	sudo cp -f $BATMAN_SCRIPT /usr/bin/batman
374
+	rm $BATMAN_SCRIPT
478 375
 }
479 376
 
480 377
 function show_help {
@@ -486,30 +383,30 @@ function show_help {
486 383
 
487 384
 while [[ $# > 1 ]]
488 385
 do
489
-key="$1"
386
+    key="$1"
490 387
 
491
-case $key in
492
-    -h|--help)
493
-    show_help
494
-    ;;
495
-    --essid)
496
-    shift
497
-    ESSID="$1"
498
-    ;;
499
-    --channel)
388
+    case $key in
389
+        -h|--help)
390
+            show_help
391
+            ;;
392
+        --essid)
393
+            shift
394
+            ESSID="$1"
395
+            ;;
396
+        --channel)
397
+            shift
398
+            WIFI_CHANNEL=${1}
399
+            ;;
400
+        *)
401
+            # unknown option
402
+            ;;
403
+    esac
500 404
     shift
501
-    WIFI_CHANNEL=${1}
502
-    ;;
503
-    *)
504
-    # unknown option
505
-    ;;
506
-esac
507
-shift
508 405
 done
509 406
 
510 407
 echo $'Configuring client'
511 408
 configure_ssh_client
512
-mesh_batman
513
-mesh_babel
409
+${PROJECT_NAME}-mesh-install batman_client
410
+${PROJECT_NAME}-mesh-install babel_client
514 411
 echo $'Configuration complete'
515 412
 exit 0

+ 32
- 330
src/freedombone-image-customise View File

@@ -378,335 +378,37 @@ atheros_wifi() {
378 378
     fi
379 379
 }
380 380
 
381
-mesh_avahi() {
382
-    chroot "$rootdir" apt-get -y install avahi-utils avahi-autoipd avahi-dnsconfd
383
-
384
-    decarray=( 1 2 3 4 5 6 7 8 9 0 )
385
-    PEER_ID=${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}
386
-    sed -i "s|#host-name=.*|host-name=P$PEER_ID|g" $rootdir/etc/avahi/avahi-daemon.conf
387
-
388
-    if [ ! -d $rootdir/etc/avahi/services ]; then
389
-        mkdir -p $rootdir/etc/avahi/services
390
-    fi
391
-
392
-    # remove an avahi service which isn't used
393
-    if [ -f $rootdir/etc/avahi/services/udisks.service ]; then
394
-        rm $rootdir/etc/avahi/services/udisks.service
395
-    fi
396
-
397
-    # Add an ssh service
398
-    echo '<?xml version="1.0" standalone="no"?><!--*-nxml-*-->' > $rootdir/etc/avahi/services/ssh.service
399
-    echo '<!DOCTYPE service-group SYSTEM "avahi-service.dtd">' >> $rootdir/etc/avahi/services/ssh.service
400
-    echo '<service-group>' >> $rootdir/etc/avahi/services/ssh.service
401
-    echo '  <name replace-wildcards="yes">%h SSH</name>' >> $rootdir/etc/avahi/services/ssh.service
402
-    echo '  <service>' >> $rootdir/etc/avahi/services/ssh.service
403
-    echo '    <type>_ssh._tcp</type>' >> $rootdir/etc/avahi/services/ssh.service
404
-    echo "    <port>$SSH_PORT</port>" >> $rootdir/etc/avahi/services/ssh.service
405
-    echo '  </service>' >> $rootdir/etc/avahi/services/ssh.service
406
-    echo '</service-group>' >> $rootdir/etc/avahi/services/ssh.service
407
-
408
-    # keep the daemon running
409
-    WATCHDOG_SCRIPT_NAME="keepon"
410
-    echo '' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
411
-    echo '# keep avahi daemon running' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
412
-    echo 'AVAHI_RUNNING=$(pgrep avahi-daemon > /dev/null && echo Running)' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
413
-    echo 'if [ ! $AVAHI_RUNNING ]; then' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
414
-    echo '  systemctl start avahi-daemon' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
415
-    echo '  echo -n $CURRENT_DATE >> $LOGFILE' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
416
-    echo '  echo " Avahi daemon restarted" >> $LOGFILE' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
417
-    echo 'fi' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
418
-    chmod +x $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
419
-}
420
-
421
-mesh_batman() {
422
-    chroot "$rootdir" apt-get -y install iproute bridge-utils libnetfilter-conntrack3 batctl
423
-    chroot "$rootdir" apt-get -y install python-dev libevent-dev ebtables python-pip git
424
-    chroot "$rootdir" apt-get -y install wireless-tools rfkill
425
-
426
-    if ! grep -q "batman_adv" $rootdir/etc/modules; then
427
-        echo 'batman_adv' >> $rootdir/etc/modules
428
-    fi
429
-
430
-    if [ -f /usr/local/bin/${PROJECT_NAME}-mesh-batman ]; then
431
-        cp /usr/local/bin/${PROJECT_NAME}-mesh-batman $rootdir/var/lib/batman
432
-    else
433
-        cp /usr/bin/${PROJECT_NAME}-mesh-batman $rootdir/var/lib/batman
434
-    fi
435
-
436
-    echo '[Unit]' > $rootdir/etc/systemd/system/batman.service
437
-    echo 'Description=B.A.T.M.A.N. Advanced' >> $rootdir/etc/systemd/system/batman.service
438
-    echo '' >> $rootdir/etc/systemd/system/batman.service
439
-    echo '[Service]' >> $rootdir/etc/systemd/system/batman.service
440
-    echo 'Type=oneshot' >> $rootdir/etc/systemd/system/batman.service
441
-    echo "ExecStart=/var/lib/batman start" >> $rootdir/etc/systemd/system/batman.service
442
-    echo "ExecStop=/var/lib/batman stop" >> $rootdir/etc/systemd/system/batman.service
443
-    echo 'RemainAfterExit=yes' >> $rootdir/etc/systemd/system/batman.service
444
-    echo '' >> $rootdir/etc/systemd/system/batman.service
445
-    echo '# Allow time for the server to start/stop' >> $rootdir/etc/systemd/system/batman.service
446
-    echo 'TimeoutSec=300' >> $rootdir/etc/systemd/system/batman.service
447
-    echo '' >> $rootdir/etc/systemd/system/batman.service
448
-    echo '[Install]' >> $rootdir/etc/systemd/system/batman.service
449
-    echo 'WantedBy=multi-user.target' >> $rootdir/etc/systemd/system/batman.service
450
-    chroot "$rootdir" systemctl enable batman
451
-}
452
-
453
-mesh_firewall() {
454
-    TOX_PORT=33445
455
-    ZERONET_PORT=15441
456
-    FIREWALL_FILENAME=$rootdir/etc/systemd/system/meshfirewall.service
457
-    MESH_FIREWALL_SCRIPT=/usr/bin/mesh-firewall
458
-
459
-    echo '#!/bin/bash' > $rootdir/$MESH_FIREWALL_SCRIPT
460
-    echo 'iptables -P INPUT ACCEPT' >> $rootdir/$MESH_FIREWALL_SCRIPT
461
-    echo 'ip6tables -P INPUT ACCEPT' >> $rootdir/$MESH_FIREWALL_SCRIPT
462
-    echo 'iptables -F' >> $rootdir/$MESH_FIREWALL_SCRIPT
463
-    echo 'ip6tables -F' >> $rootdir/$MESH_FIREWALL_SCRIPT
464
-    echo 'iptables -t nat -F' >> $rootdir/$MESH_FIREWALL_SCRIPT
465
-    echo 'ip6tables -t nat -F' >> $rootdir/$MESH_FIREWALL_SCRIPT
466
-    echo 'iptables -X' >> $rootdir/$MESH_FIREWALL_SCRIPT
467
-    echo 'ip6tables -X' >> $rootdir/$MESH_FIREWALL_SCRIPT
468
-    echo 'iptables -P INPUT DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
469
-    echo 'ip6tables -P INPUT DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
470
-    echo 'iptables -A INPUT -i lo -j ACCEPT' >> $rootdir/$MESH_FIREWALL_SCRIPT
471
-    echo 'iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT' >> $rootdir/$MESH_FIREWALL_SCRIPT
472
-    echo '' >> $rootdir/$MESH_FIREWALL_SCRIPT
473
-    echo '# Make sure incoming tcp connections are SYN packets' >> $rootdir/$MESH_FIREWALL_SCRIPT
474
-    echo 'iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
475
-    echo '' >> $rootdir/$MESH_FIREWALL_SCRIPT
476
-    echo '# Drop packets with incoming fragments' >> $rootdir/$MESH_FIREWALL_SCRIPT
477
-    echo 'iptables -A INPUT -f -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
478
-    echo '' >> $rootdir/$MESH_FIREWALL_SCRIPT
479
-    echo '# Drop bogons' >> $rootdir/$MESH_FIREWALL_SCRIPT
480
-    echo 'iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
481
-    echo 'iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
482
-    echo 'iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
483
-    echo '' >> $rootdir/$MESH_FIREWALL_SCRIPT
484
-    echo '# Incoming malformed NULL packets:' >> $rootdir/$MESH_FIREWALL_SCRIPT
485
-    echo 'iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
486
-    echo '' >> $rootdir/$MESH_FIREWALL_SCRIPT
487
-    echo "iptables -A INPUT -p tcp --dport $TOX_PORT -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
488
-    echo "iptables -A INPUT -i $WIFI_INTERFACE -p udp --dport $ZERONET_PORT -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
489
-    echo "iptables -A INPUT -i $WIFI_INTERFACE -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
490
-    echo "iptables -A INPUT -i $WIFI_INTERFACE -p udp --dport $TRACKER_PORT -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
491
-    echo "iptables -A INPUT -i $WIFI_INTERFACE -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
492
-    echo "iptables -A INPUT -i $WIFI_INTERFACE -p udp --dport 1900 -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
493
-    chmod +x $rootdir/$MESH_FIREWALL_SCRIPT
494
-
495
-    echo '[Unit]' > $FIREWALL_FILENAME
496
-    echo 'Description=Mesh Firewall' >> $FIREWALL_FILENAME
497
-    echo '' >> $FIREWALL_FILENAME
498
-    echo '[Service]' >> $FIREWALL_FILENAME
499
-    echo 'Type=oneshot' >> $FIREWALL_FILENAME
500
-    echo "ExecStart=$MESH_FIREWALL_SCRIPT" >> $FIREWALL_FILENAME
501
-    echo 'RemainAfterExit=no' >> $FIREWALL_FILENAME
502
-    echo '' >> $FIREWALL_FILENAME
503
-    echo 'TimeoutSec=30' >> $FIREWALL_FILENAME
504
-    echo '' >> $FIREWALL_FILENAME
505
-    echo '[Install]' >> $FIREWALL_FILENAME
506
-    echo 'WantedBy=multi-user.target' >> $FIREWALL_FILENAME
507
-    chroot "$rootdir" systemctl enable meshfirewall
508
-}
509
-
510
-mesh_tox_node() {
511
-    TOX_REPO='git://github.com/irungentoo/toxcore.git'
512
-    TOX_COMMIT='73b2144edcfd1ca617e9054479b66ab0c0361a14'
513
-    # These are some default nodes, but you can replace them with trusted nodes
514
-    # as you prefer. See https://wiki.tox.im/Nodes
515
-    TOX_NODES=
516
-    #TOX_NODES=(
517
-    #  '192.254.75.102,2607:5600:284::2,33445,951C88B7E75C867418ACDB5D273821372BB5BD652740BCDF623A4FA293E75D2F,Tox RELENG,US'
518
-    #  '144.76.60.215,2a01:4f8:191:64d6::1,33445,04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F,sonOfRa,DE'
519
-    #)
520
-
521
-    chroot "$rootdir" apt-get -y install build-essential libtool autotools-dev
522
-    chroot "$rootdir" apt-get -y install automake checkinstall check git yasm
523
-    chroot "$rootdir" apt-get -y install libsodium13 libsodium-dev libcap2-bin
524
-    chroot "$rootdir" apt-get -y install libconfig9 libconfig-dev
525
-
526
-    chroot "$rootdir" git clone $TOX_REPO $INSTALL_DIR/toxcore
527
-    chroot "$rootdir" cd $INSTALL_DIR/toxcore
528
-    chroot "$rootdir" git checkout $TOX_COMMIT -b $TOX_COMMIT
529
-
530
-    chroot "$rootdir" autoreconf -i
531
-    chroot "$rootdir" ./configure --enable-daemon
532
-    chroot "$rootdir" make
533
-    chroot "$rootdir" make install
534
-    chroot "$rootdir" cp /usr/local/lib/libtoxcore* /usr/lib/
535
-
536
-    if [ ! -f $rootdir/usr/local/bin/tox-bootstrapd ]; then
537
-        echo $"File not found /usr/local/bin/tox-bootstrapd"
538
-        return
539
-    fi
540
-
541
-    chroot "$rootdir" useradd --home-dir /var/lib/tox-bootstrapd --create-home --system --shell /sbin/nologin --comment $"Account to run Tox's DHT bootstrap daemon" --user-group tox-bootstrapd
542
-    chroot "$rootdir" chmod 700 /var/lib/tox-bootstrapd
543
-    if [ ! -f $rootdir/$INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf ]; then
544
-        echo $"File not found $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf"
545
-    fi
546
-    # remove Maildir
547
-    if [ -d $rootdir/var/lib/tox-bootstrapd/Maildir ]; then
548
-        rm -rf $rootdir/var/lib/tox-bootstrapd/Maildir
549
-    fi
550
-
551
-    # create configuration file
552
-    echo "port = $TOX_PORT" > $rootdir/etc/tox-bootstrapd.conf
553
-    echo 'keys_file_path = "/var/lib/tox-bootstrapd/keys"' >> $rootdir/etc/tox-bootstrapd.conf
554
-    echo 'pid_file_path = "/var/run/tox-bootstrapd/tox-bootstrapd.pid"' >> $rootdir/etc/tox-bootstrapd.conf
555
-    echo 'enable_ipv6 = true' >> $rootdir/etc/tox-bootstrapd.conf
556
-    echo 'enable_ipv4_fallback = true' >> $rootdir/etc/tox-bootstrapd.conf
557
-    echo 'enable_lan_discovery = true' >> $rootdir/etc/tox-bootstrapd.conf
558
-    echo 'enable_tcp_relay = true' >> $rootdir/etc/tox-bootstrapd.conf
559
-    echo "tcp_relay_ports = [443, 3389, $TOX_PORT]" >> $rootdir/etc/tox-bootstrapd.conf
560
-    echo 'enable_motd = true' >> $rootdir/etc/tox-bootstrapd.conf
561
-    echo 'motd = "tox-bootstrapd"' >> $rootdir/etc/tox-bootstrapd.conf
562
-
563
-    if [ $TOX_NODES ]; then
564
-        echo 'bootstrap_nodes = (' >> $rootdir/etc/tox-bootstrapd.conf
565
-        toxcount=0
566
-        while [ "x${TOX_NODES[toxcount]}" != "x" ]
567
-        do
568
-            toxval_ipv4=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $1}')
569
-            toxval_ipv6=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $2}')
570
-            toxval_port=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $3}')
571
-            toxval_pubkey=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $4}')
572
-            toxval_maintainer=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $5}')
573
-            echo "{ // $toxval_maintainer" >> $rootdir/etc/tox-bootstrapd.conf
574
-            if [[ $toxval_ipv6 != 'NONE' ]]; then
575
-                echo "  address = \"$toxval_ipv6\"" >> $rootdir/etc/tox-bootstrapd.conf
576
-            else
577
-                echo "  address = \"$toxval_ipv4\"" >> $rootdir/etc/tox-bootstrapd.conf
578
-            fi
579
-            echo "  port = $toxval_port" >> $rootdir/etc/tox-bootstrapd.conf
580
-            echo "  public_key = \"$toxval_pubkey\"" >> $rootdir/etc/tox-bootstrapd.conf
581
-            toxcount=$(( $toxcount + 1 ))
582
-            if [ "x${TOX_NODES[toxcount]}" != "x" ]; then
583
-                echo "}," >> $rootdir/etc/tox-bootstrapd.conf
584
-            else
585
-                echo "}" >> $rootdir/etc/tox-bootstrapd.conf
586
-            fi
587
-        done
588
-        echo ')' >> $rootdir/etc/tox-bootstrapd.conf
589
-    fi
590
-
591
-    if [ ! -f $rootdir/$INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.service ]; then
592
-        echo $"File not found $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.service"
593
-    fi
594
-    cp $rootdir/$INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.service $rootdir/etc/systemd/system/
595
-
596
-    chroot "$rootdir" systemctl enable tox-bootstrapd.service
597
-}
598
-
599
-function mesh_tox_client {
600
-    chroot "$rootdir" apt-get -y install libncursesw5-dev libconfig-dev libqrencode-dev libcurl4-openssl-dev
601
-
602
-    chroot "$rootdir" git clone $TOXIC_REPO $INSTALL_DIR/toxic
603
-    chroot "$rootdir" cd $INSTALL_DIR/toxic
604
-    chroot "$rootdir" git checkout $TOXIC_COMMIT -b $TOXIC_COMMIT
605
-    echo "Toxic commit:$TOXIC_COMMIT" >> $rootdir$COMPLETION_FILE
606
-
607
-    chroot "$rootdir" make
608
-    chroot "$rootdir" make install
609
-}
610
-
611
-function mesh_zeronet {
612
-    ZERONET_REPO='https://github.com/HelloZeroNet/ZeroNet.git'
613
-    ZERONET_COMMIT='675bd462556c541d65e2d95f91f899146a373aad'
614
-
615
-    chroot "$rootdir" apt-get -y install python python-msgpack python-gevent
616
-    chroot "$rootdir" apt-get -y install python-pip bittornado
617
-    chroot "$rootdir" pip install msgpack-python --upgrade
618
-
619
-    chroot "$rootdir" useradd -d /opt/zeronet/ -s /bin/false zeronet
620
-    git clone $ZERONET_REPO $rootdir/opt/zeronet
621
-    if [ ! -d $rootdir/opt/zeronet ]; then
622
-        echo 'WARNING: Unable to clone zeronet'
623
-        return
624
-    fi
625
-    cd $rootdir/opt/zeronet
626
-    git checkout $ZERONET_COMMIT -b $ZERONET_COMMIT
627
-    echo "ZeroNet commit:$ZERONET_COMMIT" >> $rootdir$COMPLETION_FILE
628
-    chown -R zeronet:zeronet $rootdir/opt/zeronet
629
-
630
-    # Hack to ensure that the file access port is opened
631
-    # This is because zeronet normally relies on an internet site
632
-    # to do this, but on a purely local mesh the internet isn't available
633
-    sed -i 's|fileserver_port = 0|fileserver_port = config.fileserver_port\n            sys.modules["main"].file_server.port_opened = True|g' $rootdir/opt/zeronet/src/Site/Site.py
634
-
635
-    echo '[Unit]' > $rootdir/etc/systemd/system/zeronet.service
636
-    echo 'Description=Zeronet Server' >> $rootdir/etc/systemd/system/zeronet.service
637
-    echo 'After=syslog.target' >> $rootdir/etc/systemd/system/zeronet.service
638
-    echo 'After=network.target' >> $rootdir/etc/systemd/system/zeronet.service
639
-    echo '[Service]' >> $rootdir/etc/systemd/system/zeronet.service
640
-    echo 'Type=simple' >> $rootdir/etc/systemd/system/zeronet.service
641
-    echo 'User=zeronet' >> $rootdir/etc/systemd/system/zeronet.service
642
-    echo 'Group=zeronet' >> $rootdir/etc/systemd/system/zeronet.service
643
-    echo 'WorkingDirectory=/opt/zeronet' >> $rootdir/etc/systemd/system/zeronet.service
644
-    echo 'ExecStart=/usr/bin/python zeronet.py --ip_external replace.local --trackers_file /opt/zeronet/bootstrap' >> $rootdir/etc/systemd/system/zeronet.service
645
-    echo '' >> $rootdir/etc/systemd/system/zeronet.service
646
-    echo 'TimeoutSec=300' >> $rootdir/etc/systemd/system/zeronet.service
647
-    echo '' >> $rootdir/etc/systemd/system/zeronet.service
648
-    echo '[Install]' >> $rootdir/etc/systemd/system/zeronet.service
649
-    echo 'WantedBy=multi-user.target' >> $rootdir/etc/systemd/system/zeronet.service
650
-
651
-    echo '[Unit]' > $rootdir/etc/systemd/system/tracker.service
652
-    echo 'Description=Torrent Tracker' >> $rootdir/etc/systemd/system/tracker.service
653
-    echo 'After=syslog.target' >> $rootdir/etc/systemd/system/tracker.service
654
-    echo 'After=network.target' >> $rootdir/etc/systemd/system/tracker.service
655
-    echo '[Service]' >> $rootdir/etc/systemd/system/tracker.service
656
-    echo 'Type=simple' >> $rootdir/etc/systemd/system/tracker.service
657
-    echo 'User=tracker' >> $rootdir/etc/systemd/system/tracker.service
658
-    echo 'Group=tracker' >> $rootdir/etc/systemd/system/tracker.service
659
-    echo 'WorkingDirectory=/opt/tracker' >> $rootdir/etc/systemd/system/tracker.service
660
-    echo "ExecStart=/usr/bin/bttrack --port $TRACKER_PORT --dfile /opt/tracker/dstate --logfile /opt/tracker/tracker.log --nat_check 0 --scrape_allowed full --ipv6_enabled 0" >> $rootdir/etc/systemd/system/tracker.service
661
-    echo '' >> $rootdir/etc/systemd/system/tracker.service
662
-    echo 'TimeoutSec=300' >> $rootdir/etc/systemd/system/tracker.service
663
-    echo '' >> $rootdir/etc/systemd/system/tracker.service
664
-    echo '[Install]' >> $rootdir/etc/systemd/system/tracker.service
665
-    echo 'WantedBy=multi-user.target' >> $rootdir/etc/systemd/system/tracker.service
666
-
667
-    chroot "$rootdir" useradd -d /opt/tracker/ -s /bin/false tracker
668
-    if [ ! -d $rootdir/opt/tracker ]; then
669
-        mkdir $rootdir/opt/tracker
670
-    fi
671
-    chown -R tracker:tracker $rootdir/opt/tracker
672
-
673
-    # publish regularly
674
-    echo "* *     * * *   root    zeronetavahi > /dev/null" >> $rootdir/etc/crontab
675
-
676
-    chroot "$rootdir" systemctl enable tracker.service
677
-    chroot "$rootdir" systemctl enable zeronet.service
678
-}
679 381
 
680 382
 initialise_mesh() {
681 383
     if [[ $VARIANT != "mesh" ]]; then
682 384
         return
683 385
     fi
684
-    mesh_firewall
685
-    mesh_avahi
686
-    mesh_batman
687
-    mesh_tox_node
688
-    mesh_tox_client
689
-    mesh_zeronet
690
-
691
-    MESH_SERVICE='mesh-setup.service'
692
-    MESH_SETUP_DAEMON=$rootdir/etc/systemd/system/$MESH_SERVICE
693
-
694
-    echo '[Unit]' > $MESH_SETUP_DAEMON
695
-    echo 'Description=Initial mesh router configuration' >> $MESH_SETUP_DAEMON
696
-    echo 'After=syslog.target' >> $MESH_SETUP_DAEMON
697
-    echo 'After=network.target' >> $MESH_SETUP_DAEMON
698
-    echo '[Service]' >> $MESH_SETUP_DAEMON
699
-    echo 'Type=simple' >> $MESH_SETUP_DAEMON
700
-    echo 'User=root' >> $MESH_SETUP_DAEMON
701
-    echo 'Group=root' >> $MESH_SETUP_DAEMON
702
-    echo 'WorkingDirectory=/root' >> $MESH_SETUP_DAEMON
703
-    echo "ExecStart=/usr/local/bin/${PROJECT_NAME}-image-mesh > /var/log/mesh-setup.log" >> $MESH_SETUP_DAEMON
704
-    echo '' >> $MESH_SETUP_DAEMON
705
-    echo 'TimeoutSec=99999' >> $MESH_SETUP_DAEMON
706
-    echo '' >> $MESH_SETUP_DAEMON
707
-    echo '[Install]' >> $MESH_SETUP_DAEMON
708
-    echo 'WantedBy=multi-user.target' >> $MESH_SETUP_DAEMON
709
-    chroot "$rootdir" systemctl enable $MESH_SERVICE
386
+    freedombone-mesh-install -f firewall -r "${rootdir}"
387
+	freedombone-mesh-install -f avahi -r "${rootdir}"
388
+	freedombone-mesh-install -f batman -r "${rootdir}"
389
+	freedombone-mesh-install -f tox_node -r "${rootdir}"
390
+	freedombone-mesh-install -f tox_client -r "${rootdir}"
391
+	freedombone-mesh-install -f zeronet -r "${rootdir}"
392
+
393
+	MESH_SERVICE='mesh-setup.service'
394
+	MESH_SETUP_DAEMON=$rootdir/etc/systemd/system/$MESH_SERVICE
395
+
396
+	echo '[Unit]' > $MESH_SETUP_DAEMON
397
+	echo 'Description=Initial mesh router configuration' >> $MESH_SETUP_DAEMON
398
+	echo 'After=syslog.target' >> $MESH_SETUP_DAEMON
399
+	echo 'After=network.target' >> $MESH_SETUP_DAEMON
400
+	echo '[Service]' >> $MESH_SETUP_DAEMON
401
+	echo 'Type=simple' >> $MESH_SETUP_DAEMON
402
+	echo 'User=root' >> $MESH_SETUP_DAEMON
403
+	echo 'Group=root' >> $MESH_SETUP_DAEMON
404
+	echo 'WorkingDirectory=/root' >> $MESH_SETUP_DAEMON
405
+	echo "ExecStart=/usr/local/bin/${PROJECT_NAME}-image-mesh > /var/log/mesh-setup.log" >> $MESH_SETUP_DAEMON
406
+	echo '' >> $MESH_SETUP_DAEMON
407
+	echo 'TimeoutSec=99999' >> $MESH_SETUP_DAEMON
408
+	echo '' >> $MESH_SETUP_DAEMON
409
+	echo '[Install]' >> $MESH_SETUP_DAEMON
410
+	echo 'WantedBy=multi-user.target' >> $MESH_SETUP_DAEMON
411
+	chroot "$rootdir" systemctl enable $MESH_SERVICE
710 412
 }
711 413
 
712 414
 # Set to true/false to control if eatmydata is used during build
@@ -737,12 +439,12 @@ case "$MACHINE" in
737 439
     virtualbox)
738 440
         # hide irrelevant console keyboard messages.
739 441
         echo "echo \"4 4 1 7\" > /proc/sys/kernel/printk" \
740
-            >> /etc/init.d/rc.local
442
+             >> /etc/init.d/rc.local
741 443
         ;;
742 444
     qemu)
743 445
         # hide irrelevant console keyboard messages.
744 446
         echo "echo \"4 4 1 7\" > /proc/sys/kernel/printk" \
745
-            >> /etc/init.d/rc.local
447
+             >> /etc/init.d/rc.local
746 448
         ;;
747 449
 esac
748 450
 
@@ -800,17 +502,17 @@ fi
800 502
 case "$MACHINE" in
801 503
     beaglebone)
802 504
         dd if=$rootdir/usr/lib/u-boot/am335x_boneblack/MLO of="$image" \
803
-           count=1 seek=1 conv=notrunc bs=128k
505
+		   count=1 seek=1 conv=notrunc bs=128k
804 506
         dd if=$rootdir/usr/lib/u-boot/am335x_boneblack/u-boot.img of="$image" \
805
-           count=2 seek=1 conv=notrunc bs=384k
507
+		   count=2 seek=1 conv=notrunc bs=384k
806 508
         ;;
807 509
     cubieboard2)
808 510
         dd if=$rootdir/usr/lib/u-boot/Cubieboard2/u-boot-sunxi-with-spl.bin of="$image" \
809
-           seek=8 conv=notrunc bs=1k
511
+		   seek=8 conv=notrunc bs=1k
810 512
         ;;
811 513
     a20-olinuxino-lime)
812 514
         dd if=$rootdir/usr/lib/u-boot/A20-OLinuXino-Lime/u-boot-sunxi-with-spl.bin \
813
-           of="$image" seek=8 conv=notrunc bs=1k
515
+		   of="$image" seek=8 conv=notrunc bs=1k
814 516
         ;;
815 517
 esac
816 518
 

+ 918
- 0
src/freedombone-mesh-install View File

@@ -0,0 +1,918 @@
1
+#!/bin/bash
2
+#
3
+# .---.                  .              .
4
+# |                      |              |
5
+# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
6
+# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
7
+# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
8
+#
9
+#                    Freedom in the Cloud
10
+#
11
+# Installs mesh applications. This avoids duplicated functions
12
+# within freedombone and freedombone-image-customize and also
13
+# for client installs
14
+#
15
+# License
16
+# =======
17
+#
18
+# This program is free software: you can redistribute it and/or modify
19
+# it under the terms of the GNU Affero General Public License as published by
20
+# the Free Software Foundation, either version 3 of the License, or
21
+# (at your option) any later version.
22
+#
23
+# This program is distributed in the hope that it will be useful,
24
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
25
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26
+# GNU Affero General Public License for more details.
27
+#
28
+# You should have received a copy of the GNU Affero General Public License
29
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
30
+
31
+PROJECT_NAME='freedombone'
32
+INSTALL_DIR=/root/build
33
+COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
34
+
35
+export TEXTDOMAIN=${PROJECT_NAME}-mesh-install
36
+export TEXTDOMAINDIR="/usr/share/locale"
37
+
38
+# for mesh installs
39
+TRACKER_PORT=6969
40
+
41
+ZERONET_PORT=15441
42
+
43
+WIFI_CHANNEL=2
44
+WIFI_INTERFACE='wlan0'
45
+
46
+# B.A.T.M.A.N settings
47
+BATMAN_CELLID='02:BA:00:00:03:01'
48
+ESSID='mesh'
49
+
50
+# Babel
51
+BABEL_PORT=6696
52
+
53
+rootdir=''
54
+FN=
55
+CHROOT_PREFIX=''
56
+FRIENDS_MIRRORS_SERVER=
57
+
58
+TOXID_REPO="https://github.com/bashrc/toxid"
59
+TOX_PORT=33445
60
+TOX_REPO="git://github.com/irungentoo/toxcore.git"
61
+TOX_COMMIT='73b2144edcfd1ca617e9054479b66ab0c0361a14'
62
+# These are some default nodes, but you can replace them with trusted nodes
63
+# as you prefer. See https://wiki.tox.im/Nodes
64
+TOX_NODES=
65
+#TOX_NODES=(
66
+#  '192.254.75.102,2607:5600:284::2,33445,951C88B7E75C867418ACDB5D273821372BB5BD652740BCDF623A4FA293E75D2F,Tox RELENG,US'
67
+#  '144.76.60.215,2a01:4f8:191:64d6::1,33445,04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F,sonOfRa,DE'
68
+#)
69
+ZERONET_REPO="https://github.com/HelloZeroNet/ZeroNet.git"
70
+ZERONET_COMMIT='675bd462556c541d65e2d95f91f899146a373aad'
71
+
72
+function show_help {
73
+	echo ''
74
+	echo $"${PROJECT_NAME}-mesh-install -f [function] -r [rootdir]"
75
+	echo ''
76
+	echo $'Runs a mesh network install function'
77
+	echo ''
78
+	echo $'  -h --help                   Show help'
79
+	echo $'  -f --function [name]        Name of the function to be run'
80
+	echo $'  -r --rootdir [directory]    Root directory'
81
+	echo $'  -w --wifi [interface]       e.g. wlan0'
82
+	echo ''
83
+	exit 0
84
+}
85
+
86
+function git_clone {
87
+	repo_url="$1"
88
+	destination_dir="$2"
89
+	if [[ "$repo_url" == "ssh:"* ]]; then
90
+		if [ "${FRIENDS_MIRRORS_SERVER}" ]; then
91
+			if [ ${#FRIENDS_MIRRORS_SERVER} -gt 2 ]; then
92
+				if [ "$FRIENDS_MIRRORS_PASSWORD" ]; then
93
+					if [ ${#FRIENDS_MIRRORS_PASSWORD} -gt 2 ]; then
94
+						sshpass -p "$FRIENDS_MIRRORS_PASSWORD" git clone "$repo_url" "$destination_dir"
95
+						return
96
+					fi
97
+				fi
98
+			fi
99
+		fi
100
+	fi
101
+	git clone "$repo_url" "$destination_dir"
102
+}
103
+
104
+function mesh_babel {
105
+	$CHROOT_PREFIX apt-get -y install babeld
106
+
107
+	babel_script=${rootdir}/var/lib/babel
108
+
109
+	echo '#!/bin/bash' > $babel_script
110
+	echo '' >> $babel_script
111
+	echo 'if [[ $1 == "ls" || $1 == "list" ]]; then' >> $babel_script
112
+	echo '    avahi-browse -atl' >> $babel_script
113
+	echo '    exit 0' >> $babel_script
114
+	echo 'fi' >> $babel_script
115
+	echo '' >> $babel_script
116
+	echo 'if [[ $1 == "start" ]]; then' >> $babel_script
117
+	echo '    sed -i "s|#host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $babel_script
118
+	echo '    sed -i "s|host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $babel_script
119
+	echo '    sed -i "s|use-ipv4=.*|use-ipv4=yes|g" /etc/avahi/avahi-daemon.conf' >> $babel_script
120
+	echo '    sed -i "s|use-ipv6=.*|use-ipv6=no|g" /etc/avahi/avahi-daemon.conf' >> $babel_script
121
+	echo '    sed -i "s|hosts:.*|hosts:          files mdns4_minimal dns mdns4 mdns|g" /etc/nsswitch.conf' >> $babel_script
122
+	echo '    systemctl restart avahi-daemon' >> $babel_script
123
+	echo 'fi' >> $babel_script
124
+	echo '' >> $babel_script
125
+	echo "IFACE=$WIFI_INTERFACE" >> $babel_script
126
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $babel_script
127
+	echo '    if grep -q "wlan1" /proc/net/dev; then' >> $babel_script
128
+	echo '        IFACE=wlan1' >> $babel_script
129
+	echo '    fi' >> $babel_script
130
+	echo 'fi' >> $babel_script
131
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $babel_script
132
+	echo '    if grep -q "wlan2" /proc/net/dev; then' >> $babel_script
133
+	echo '        IFACE=wlan2' >> $babel_script
134
+	echo '    fi' >> $babel_script
135
+	echo 'fi' >> $babel_script
136
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $babel_script
137
+	echo '    if grep -q "wlan3" /proc/net/dev; then' >> $babel_script
138
+	echo '        IFACE=wlan3' >> $babel_script
139
+	echo '    fi' >> $babel_script
140
+	echo 'fi' >> $babel_script
141
+	echo '' >> $babel_script
142
+	echo 'if [[ ! grep -q "$IFACE" /proc/net/dev || $1 == "stop" ]]; then' >> $babel_script
143
+	echo '    if ! grep -q "$IFACE" /proc/net/dev; then' >> $babel_script
144
+	echo '        echo "Interface $IFACE was not found"' >> $babel_script
145
+	echo '    else' >> $babel_script
146
+	echo '        echo "Stopping"' >> $babel_script
147
+	echo '    fi' >> $babel_script
148
+	echo '    ifconfig $IFACE down' >> $babel_script
149
+	echo '    pkill babeld' >> $babel_script
150
+	echo '    systemctl restart network-manager' >> $babel_script
151
+	echo '    exit 1' >> $babel_script
152
+	echo 'fi' >> $babel_script
153
+	echo '' >> $babel_script
154
+	echo 'systemctl stop network-manager' >> $babel_script
155
+	echo 'ifconfig $IFACE down' >> $babel_script
156
+	echo -n 'iwconfig $IFACE mode ad-hoc channel ' >> $babel_script
157
+	echo "$WIFI_CHANNEL essid \"$ESSID\"" >> $babel_script
158
+	echo 'ifconfig $IFACE up' >> $babel_script
159
+	echo -n 'ifconfig $IFACE:avahi ' >> $babel_script
160
+	echo -n "$LOCAL_NETWORK_STATIC_IP_ADDRESS netmask " >> $babel_script
161
+	echo '255.255.255.0 broadcast 192.168.13.255' >> $babel_script
162
+	echo -n 'babeld -D $IFACE:avahi -p ' >> $babel_script
163
+	echo -n "$BABEL_PORT -d 5 " >> $babel_script
164
+	echo '$IFACE' >> $babel_script
165
+	echo 'exit 0' >> $babel_script
166
+	chmod +x $babel_script
167
+
168
+	echo '[Unit]' > ${rootdir}/etc/systemd/system/babel.service
169
+	echo 'Description=Babel Mesh' >> ${rootdir}/etc/systemd/system/babel.service
170
+	echo '' >> ${rootdir}/etc/systemd/system/babel.service
171
+	echo '[Service]' >> ${rootdir}/etc/systemd/system/babel.service
172
+	echo 'Type=oneshot' >> ${rootdir}/etc/systemd/system/babel.service
173
+	echo "ExecStart=$babel_script start" >> ${rootdir}/etc/systemd/system/babel.service
174
+	echo "ExecStop=$babel_script stop" >> ${rootdir}/etc/systemd/system/babel.service
175
+	echo 'RemainAfterExit=yes' >> ${rootdir}/etc/systemd/system/babel.service
176
+	echo '' >> ${rootdir}/etc/systemd/system/babel.service
177
+	echo '# Allow time for the server to start/stop' >> ${rootdir}/etc/systemd/system/babel.service
178
+	echo 'TimeoutSec=300' >> ${rootdir}/etc/systemd/system/babel.service
179
+	echo '' >> ${rootdir}/etc/systemd/system/babel.service
180
+	echo '[Install]' >> /etc/systemd/system/babel.service
181
+	echo 'WantedBy=multi-user.target' >> ${rootdir}/etc/systemd/system/babel.service
182
+	$CHROOT_PREFIX systemctl enable babel
183
+}
184
+
185
+function mesh_avahi {
186
+	$CHROOT_PREFIX apt-get -y install avahi-utils avahi-autoipd avahi-dnsconfd
187
+
188
+	decarray=( 1 2 3 4 5 6 7 8 9 0 )
189
+	PEER_ID=${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}${decarray[$RANDOM%10]}
190
+	sed -i "s|#host-name=.*|host-name=P$PEER_ID|g" $rootdir/etc/avahi/avahi-daemon.conf
191
+
192
+	if [ ! -d $rootdir/etc/avahi/services ]; then
193
+		mkdir -p $rootdir/etc/avahi/services
194
+	fi
195
+
196
+	# remove an avahi service which isn't used
197
+	if [ -f $rootdir/etc/avahi/services/udisks.service ]; then
198
+		rm $rootdir/etc/avahi/services/udisks.service
199
+	fi
200
+
201
+	# Add an ssh service
202
+	echo '<?xml version="1.0" standalone="no"?><!--*-nxml-*-->' > $rootdir/etc/avahi/services/ssh.service
203
+	echo '<!DOCTYPE service-group SYSTEM "avahi-service.dtd">' >> $rootdir/etc/avahi/services/ssh.service
204
+	echo '<service-group>' >> $rootdir/etc/avahi/services/ssh.service
205
+	echo '  <name replace-wildcards="yes">%h SSH</name>' >> $rootdir/etc/avahi/services/ssh.service
206
+	echo '  <service>' >> $rootdir/etc/avahi/services/ssh.service
207
+	echo '    <type>_ssh._tcp</type>' >> $rootdir/etc/avahi/services/ssh.service
208
+	echo "    <port>$SSH_PORT</port>" >> $rootdir/etc/avahi/services/ssh.service
209
+	echo '  </service>' >> $rootdir/etc/avahi/services/ssh.service
210
+	echo '</service-group>' >> $rootdir/etc/avahi/services/ssh.service
211
+
212
+	# keep the daemon running
213
+	WATCHDOG_SCRIPT_NAME="keepon"
214
+	echo '' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
215
+	echo '# keep avahi daemon running' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
216
+	echo 'AVAHI_RUNNING=$(pgrep avahi-daemon > /dev/null && echo Running)' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
217
+	echo 'if [ ! $AVAHI_RUNNING ]; then' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
218
+	echo '  systemctl start avahi-daemon' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
219
+	echo '  echo -n $CURRENT_DATE >> $LOGFILE' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
220
+	echo '  echo " Avahi daemon restarted" >> $LOGFILE' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
221
+	echo 'fi' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
222
+	chmod +x $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
223
+}
224
+
225
+function mesh_babel_client {
226
+	if [ ! -f ${rootdir}/tmp/meshtype ]; then
227
+		$CHROOT_PREFIX sudo apt-get -y install babeld
228
+		$CHROOT_PREFIX sudo apt-get -y install irssi mumble
229
+		if [ ! -f /usr/bin/toxic ]; then
230
+			$CHROOT_PREFIX sudo apt-get -y install toxic
231
+			echo "n
232
+/nick $USER
233
+/exit
234
+" | ${rootdir}/usr/bin/toxic -d
235
+		fi
236
+
237
+		CURR_DIR=$(pwd)
238
+		if [ ! -f ~/develop/toxid ]; then
239
+			if [ ! -f ~/develop ]; then
240
+				mkdir ~/develop
241
+			fi
242
+			cd ~/develop
243
+			git_clone $TOXID_REPO ~/develop/toxid
244
+		fi
245
+		cd ~/develop/toxid
246
+		sudo make install
247
+		cd $CURR_DIR
248
+	fi
249
+
250
+	babel_script=${rootdir}/tmp/babel
251
+
252
+	echo '#!/bin/bash' > $babel_script
253
+	echo '' >> $babel_script
254
+	echo 'if [[ $1 == "ls" || $1 == "list" ]]; then' >> $babel_script
255
+	echo '    avahi-browse -atl' >> $babel_script
256
+	echo '    exit 0' >> $babel_script
257
+	echo 'fi' >> $babel_script
258
+	echo '' >> $babel_script
259
+	echo 'if [[ $1 == "start" ]]; then' >> $babel_script
260
+	echo '    if [ -f /tmp/meshtype ] ; then' >> $babel_script
261
+	echo '        echo "Mesh already running"' >> $babel_script
262
+	echo '        return' >> $babel_script
263
+	echo '    fi' >> $batman_script
264
+	echo '    # install avahi' >> $babel_script
265
+	echo '    apt-get -y install avahi-utils avahi-autoipd avahi-daemon avahi-dnsconfd bittornado' >> $babel_script
266
+	echo '    sed -i "s|#host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $babel_script
267
+	echo '    sed -i "s|host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $babel_script
268
+	echo '    if [ -f /bin/systemctl ]; then' >> $babel_script
269
+	echo '        systemctl restart avahi-daemon' >> $babel_script
270
+	echo '    else' >> $babel_script
271
+	echo '        service avahi-daemon restart' >> $babel_script
272
+	echo '    fi' >> $babel_script
273
+	echo '    echo "babel" > /tmp/meshtype' >> $babel_script
274
+	echo 'fi' >> $babel_script
275
+	echo '' >> $babel_script
276
+	echo "IFACE=$WIFI_INTERFACE" >> $babel_script
277
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $babel_script
278
+	echo '    if grep -q "wlan1" /proc/net/dev; then' >> $babel_script
279
+	echo '        IFACE=wlan1' >> $babel_script
280
+	echo '    fi' >> $babel_script
281
+	echo 'fi' >> $babel_script
282
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $babel_script
283
+	echo '    if grep -q "wlan2" /proc/net/dev; then' >> $babel_script
284
+	echo '        IFACE=wlan2' >> $babel_script
285
+	echo '    fi' >> $babel_script
286
+	echo 'fi' >> $babel_script
287
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $babel_script
288
+	echo '    if grep -q "wlan3" /proc/net/dev; then' >> $babel_script
289
+	echo '        IFACE=wlan3' >> $babel_script
290
+	echo '    fi' >> $babel_script
291
+	echo 'fi' >> $babel_script
292
+	echo '' >> $babel_script
293
+	echo 'if [[ ! grep -q "$IFACE" /proc/net/dev || $1 == "stop" ]]; then' >> $babel_script
294
+	echo '    if ! grep -q "$IFACE" /proc/net/dev; then' >> $babel_script
295
+	echo '        echo "Interface $IFACE was not found"' >> $babel_script
296
+	echo '    else' >> $babel_script
297
+	echo '        echo "Stopping"' >> $babel_script
298
+	echo '    fi' >> $babel_script
299
+	echo '    ifconfig $IFACE down' >> $babel_script
300
+	echo '    pkill babeld' >> $babel_script
301
+	echo '    if [ -f /bin/systemctl ]; then' >> $babel_script
302
+	echo '        systemctl restart network-manager' >> $babel_script
303
+	echo '    else' >> $babel_script
304
+	echo '        service network-manager restart' >> $babel_script
305
+	echo '    fi' >> $babel_script
306
+	echo '    exit 1' >> $babel_script
307
+	echo 'fi' >> $babel_script
308
+	echo '' >> $babel_script
309
+	echo 'if [ -f /bin/systemctl ]; then' >> $babel_script
310
+	echo '    systemctl stop network-manager' >> $babel_script
311
+	echo 'else' >> $babel_script
312
+	echo '    service network-manager stop' >> $babel_script
313
+	echo 'fi' >> $babel_script
314
+	echo 'ifconfig $IFACE down' >> $babel_script
315
+	echo -n 'iwconfig $IFACE mode ad-hoc channel ' >> $babel_script
316
+	echo "$WIFI_CHANNEL essid \"$ESSID\"" >> $babel_script
317
+	echo 'ifconfig $IFACE up' >> $babel_script
318
+	echo -n 'ifconfig $IFACE:avahi ' >> $babel_script
319
+	echo -n "$LOCAL_NETWORK_STATIC_IP_ADDRESS netmask " >> $babel_script
320
+	echo '255.255.255.0 broadcast 192.168.13.255' >> $babel_script
321
+	echo -n 'babeld -D $IFACE:avahi -p ' >> $babel_script
322
+	echo -n "$BABEL_PORT -d 5 " >> $babel_script
323
+	echo '$IFACE' >> $babel_script
324
+	echo 'exit 0' >> $babel_script
325
+	chmod +x $babel_script
326
+	sudo mv $babel_script ${rootdir}/usr/bin/babel
327
+}
328
+
329
+
330
+function mesh_batman {
331
+	$CHROOT_PREFIX apt-get -y install iproute bridge-utils libnetfilter-conntrack3 batctl
332
+	$CHROOT_PREFIX apt-get -y install python-dev libevent-dev ebtables python-pip git
333
+	$CHROOT_PREFIX apt-get -y install wireless-tools rfkill
334
+
335
+	if ! grep -q "batman_adv" $rootdir/etc/modules; then
336
+		echo 'batman_adv' >> $rootdir/etc/modules
337
+	fi
338
+
339
+	BATMAN_SCRIPT=$rootdir/var/lib/batman
340
+
341
+	if [ -f /usr/local/bin/${PROJECT_NAME}-mesh-batman ]; then
342
+		cp /usr/local/bin/${PROJECT_NAME}-mesh-batman $BATMAN_SCRIPT
343
+	else
344
+		cp /usr/bin/${PROJECT_NAME}-mesh-batman $BATMAN_SCRIPT
345
+	fi
346
+
347
+	BATMAN_DAEMON=$rootdir/etc/systemd/system/batman.service
348
+	echo '[Unit]' > $BATMAN_DAEMON
349
+	echo 'Description=B.A.T.M.A.N. Advanced' >> $BATMAN_DAEMON
350
+	echo '' >> $BATMAN_DAEMON
351
+	echo '[Service]' >> $BATMAN_DAEMON
352
+	echo 'Type=oneshot' >> $BATMAN_DAEMON
353
+	echo "ExecStart=/var/lib/batman start" >> $BATMAN_DAEMON
354
+	echo "ExecStop=/var/lib/batman stop" >> $BATMAN_DAEMON
355
+	echo 'RemainAfterExit=yes' >> $BATMAN_DAEMON
356
+	echo '' >> $BATMAN_DAEMON
357
+	echo '# Allow time for the server to start/stop' >> $BATMAN_DAEMON
358
+	echo 'TimeoutSec=300' >> $BATMAN_DAEMON
359
+	echo '' >> $BATMAN_DAEMON
360
+	echo '[Install]' >> $BATMAN_DAEMON
361
+	echo 'WantedBy=multi-user.target' >> $BATMAN_DAEMON
362
+	$CHROOT_PREFIX systemctl enable batman
363
+}
364
+
365
+function mesh_firewall {
366
+	FIREWALL_FILENAME=${rootdir}/etc/systemd/system/meshfirewall.service
367
+	MESH_FIREWALL_SCRIPT=${rootdir}/usr/bin/mesh-firewall
368
+
369
+	echo '#!/bin/bash' > $MESH_FIREWALL_SCRIPT
370
+	echo 'iptables -P INPUT ACCEPT' >> $MESH_FIREWALL_SCRIPT
371
+	echo 'ip6tables -P INPUT ACCEPT' >> $MESH_FIREWALL_SCRIPT
372
+	echo 'iptables -F' >> $MESH_FIREWALL_SCRIPT
373
+	echo 'ip6tables -F' >> $MESH_FIREWALL_SCRIPT
374
+	echo 'iptables -t nat -F' >> $MESH_FIREWALL_SCRIPT
375
+	echo 'ip6tables -t nat -F' >> $MESH_FIREWALL_SCRIPT
376
+	echo 'iptables -X' >> $MESH_FIREWALL_SCRIPT
377
+	echo 'ip6tables -X' >> $MESH_FIREWALL_SCRIPT
378
+	echo 'iptables -P INPUT DROP' >> $MESH_FIREWALL_SCRIPT
379
+	echo 'ip6tables -P INPUT DROP' >> $MESH_FIREWALL_SCRIPT
380
+	echo 'iptables -A INPUT -i lo -j ACCEPT' >> $MESH_FIREWALL_SCRIPT
381
+	echo 'iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT' >> $MESH_FIREWALL_SCRIPT
382
+	echo '' >> $MESH_FIREWALL_SCRIPT
383
+	echo '# Make sure incoming tcp connections are SYN packets' >> $MESH_FIREWALL_SCRIPT
384
+	echo 'iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP' >> $MESH_FIREWALL_SCRIPT
385
+	echo '' >> $MESH_FIREWALL_SCRIPT
386
+	echo '# Drop packets with incoming fragments' >> $MESH_FIREWALL_SCRIPT
387
+	echo 'iptables -A INPUT -f -j DROP' >> $MESH_FIREWALL_SCRIPT
388
+	echo '' >> $MESH_FIREWALL_SCRIPT
389
+	echo '# Drop bogons' >> $MESH_FIREWALL_SCRIPT
390
+	echo 'iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP' >> $MESH_FIREWALL_SCRIPT
391
+	echo 'iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP' >> $MESH_FIREWALL_SCRIPT
392
+	echo 'iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP' >> $MESH_FIREWALL_SCRIPT
393
+	echo '' >> $MESH_FIREWALL_SCRIPT
394
+	echo '# Incoming malformed NULL packets:' >> $MESH_FIREWALL_SCRIPT
395
+	echo 'iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP' >> $MESH_FIREWALL_SCRIPT
396
+	echo '' >> $MESH_FIREWALL_SCRIPT
397
+	echo "iptables -A INPUT -p tcp --dport $TOX_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT
398
+	echo "iptables -A INPUT -i $WIFI_INTERFACE -p udp --dport $ZERONET_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT
399
+	echo "iptables -A INPUT -i $WIFI_INTERFACE -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT
400
+	echo "iptables -A INPUT -i $WIFI_INTERFACE -p udp --dport $TRACKER_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT
401
+	echo "iptables -A INPUT -i $WIFI_INTERFACE -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $MESH_FIREWALL_SCRIPT
402
+	echo "iptables -A INPUT -i $WIFI_INTERFACE -p udp --dport 1900 -j ACCEPT" >> $MESH_FIREWALL_SCRIPT
403
+	chmod +x $MESH_FIREWALL_SCRIPT
404
+
405
+	echo '[Unit]' > $FIREWALL_FILENAME
406
+	echo 'Description=Mesh Firewall' >> $FIREWALL_FILENAME
407
+	echo '' >> $FIREWALL_FILENAME
408
+	echo '[Service]' >> $FIREWALL_FILENAME
409
+	echo 'Type=oneshot' >> $FIREWALL_FILENAME
410
+	echo 'ExecStart=/usr/bin/mesh-firewall' >> $FIREWALL_FILENAME
411
+	echo 'RemainAfterExit=no' >> $FIREWALL_FILENAME
412
+	echo '' >> $FIREWALL_FILENAME
413
+	echo 'TimeoutSec=30' >> $FIREWALL_FILENAME
414
+	echo '' >> $FIREWALL_FILENAME
415
+	echo '[Install]' >> $FIREWALL_FILENAME
416
+	echo 'WantedBy=multi-user.target' >> $FIREWALL_FILENAME
417
+	$CHROOT_PREFIX systemctl enable meshfirewall
418
+}
419
+
420
+function mesh_tox_node {
421
+	$CHROOT_PREFIX apt-get -y install build-essential libtool autotools-dev
422
+	$CHROOT_PREFIX apt-get -y install automake checkinstall check git yasm
423
+	$CHROOT_PREFIX apt-get -y install libsodium13 libsodium-dev libcap2-bin
424
+	$CHROOT_PREFIX apt-get -y install libconfig9 libconfig-dev
425
+
426
+	$CHROOT_PREFIX git_clone $TOX_REPO $INSTALL_DIR/toxcore
427
+	$CHROOT_PREFIX cd $INSTALL_DIR/toxcore
428
+	$CHROOT_PREFIX git checkout $TOX_COMMIT -b $TOX_COMMIT
429
+
430
+	$CHROOT_PREFIX autoreconf -i
431
+	$CHROOT_PREFIX ./configure --enable-daemon
432
+	if [ ! "$?" = "0" ]; then
433
+		return
434
+	fi
435
+	$CHROOT_PREFIX make
436
+	if [ ! "$?" = "0" ]; then
437
+		return
438
+	fi
439
+	$CHROOT_PREFIX make install
440
+	$CHROOT_PREFIX cp /usr/local/lib/libtoxcore* /usr/lib/
441
+
442
+	if [ ! -f $rootdir/usr/local/bin/tox-bootstrapd ]; then
443
+		echo $"File not found /usr/local/bin/tox-bootstrapd"
444
+		return
445
+	fi
446
+
447
+	$CHROOT_PREFIX useradd --home-dir /var/lib/tox-bootstrapd --create-home --system --shell /sbin/nologin --comment $"Account to run Tox's DHT bootstrap daemon" --user-group tox-bootstrapd
448
+	$CHROOT_PREFIX chmod 700 /var/lib/tox-bootstrapd
449
+	if [ ! -f $rootdir/$INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf ]; then
450
+		echo $"File not found $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf"
451
+	fi
452
+	# remove Maildir
453
+	if [ -d $rootdir/var/lib/tox-bootstrapd/Maildir ]; then
454
+		rm -rf $rootdir/var/lib/tox-bootstrapd/Maildir
455
+	fi
456
+
457
+	# create configuration file
458
+	TOX_BOOTSTRAP_CONFIG=${rootdir}/etc/tox-bootstrapd.conf
459
+	echo "port = $TOX_PORT" > $TOX_BOOTSTRAP_CONFIG
460
+	echo 'keys_file_path = "/var/lib/tox-bootstrapd/keys"' >> $TOX_BOOTSTRAP_CONFIG
461
+	echo 'pid_file_path = "/var/run/tox-bootstrapd/tox-bootstrapd.pid"' >> $TOX_BOOTSTRAP_CONFIG
462
+	echo 'enable_ipv6 = true' >> $TOX_BOOTSTRAP_CONFIG
463
+	echo 'enable_ipv4_fallback = true' >> $TOX_BOOTSTRAP_CONFIG
464
+	echo 'enable_lan_discovery = true' >> $TOX_BOOTSTRAP_CONFIG
465
+	echo 'enable_tcp_relay = true' >> $TOX_BOOTSTRAP_CONFIG
466
+	echo "tcp_relay_ports = [443, 3389, $TOX_PORT]" >> $TOX_BOOTSTRAP_CONFIG
467
+	echo 'enable_motd = true' >> $TOX_BOOTSTRAP_CONFIG
468
+	echo 'motd = "tox-bootstrapd"' >> $TOX_BOOTSTRAP_CONFIG
469
+
470
+	if [ $TOX_NODES ]; then
471
+		echo 'bootstrap_nodes = (' >> $TOX_BOOTSTRAP_CONFIG
472
+		toxcount=0
473
+		while [ "x${TOX_NODES[toxcount]}" != "x" ]
474
+		do
475
+			toxval_ipv4=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $1}')
476
+			toxval_ipv6=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $2}')
477
+			toxval_port=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $3}')
478
+			toxval_pubkey=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $4}')
479
+			toxval_maintainer=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $5}')
480
+			echo "{ // $toxval_maintainer" >> $TOX_BOOTSTRAP_CONFIG
481
+			if [[ $toxval_ipv6 != 'NONE' ]]; then
482
+				echo "  address = \"$toxval_ipv6\"" >> $TOX_BOOTSTRAP_CONFIG
483
+			else
484
+				echo "  address = \"$toxval_ipv4\"" >> $TOX_BOOTSTRAP_CONFIG
485
+			fi
486
+			echo "  port = $toxval_port" >> $TOX_BOOTSTRAP_CONFIG
487
+			echo "  public_key = \"$toxval_pubkey\"" >> $TOX_BOOTSTRAP_CONFIG
488
+			toxcount=$(( $toxcount + 1 ))
489
+			if [ "x${TOX_NODES[toxcount]}" != "x" ]; then
490
+				echo "}," >> $TOX_BOOTSTRAP_CONFIG
491
+			else
492
+				echo "}" >> $TOX_BOOTSTRAP_CONFIG
493
+			fi
494
+		done
495
+		echo ')' >> $TOX_BOOTSTRAP_CONFIG
496
+	fi
497
+
498
+	if [ ! -f $rootdir/$INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.service ]; then
499
+		echo $"File not found $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.service"
500
+		return
501
+	fi
502
+	cp $rootdir/$INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.service $rootdir/etc/systemd/system/
503
+
504
+	$CHROOT_PREFIX systemctl daemon-reload
505
+	$CHROOT_PREFIX systemctl enable tox-bootstrapd.service
506
+}
507
+
508
+function mesh_tox_client {
509
+	$CHROOT_PREFIX apt-get -y install libncursesw5-dev libconfig-dev libqrencode-dev libcurl4-openssl-dev
510
+
511
+	$CHROOT_PREFIX git_clone $TOXIC_REPO $INSTALL_DIR/toxic
512
+	$CHROOT_PREFIX cd $INSTALL_DIR/toxic
513
+	$CHROOT_PREFIX git checkout $TOXIC_COMMIT -b $TOXIC_COMMIT
514
+	echo "Toxic commit:$TOXIC_COMMIT" >> $rootdir$COMPLETION_FILE
515
+
516
+	$CHROOT_PREFIX make
517
+	if [ ! -f $INSTALL_DIR/toxic/build/toxic ]; then
518
+		exit 74872
519
+	fi
520
+	$CHROOT_PREFIX make install
521
+}
522
+
523
+function mesh_zeronet {
524
+	$CHROOT_PREFIX apt-get -y install python python-msgpack python-gevent
525
+	$CHROOT_PREFIX apt-get -y install python-pip bittornado
526
+	$CHROOT_PREFIX pip install msgpack-python --upgrade
527
+
528
+	$CHROOT_PREFIX useradd -d /opt/zeronet/ -s /bin/false zeronet
529
+	git_clone $ZERONET_REPO $rootdir/opt/zeronet
530
+	if [ ! -d $rootdir/opt/zeronet ]; then
531
+		echo 'WARNING: Unable to clone zeronet'
532
+		return
533
+	fi
534
+	cd $rootdir/opt/zeronet
535
+	git checkout $ZERONET_COMMIT -b $ZERONET_COMMIT
536
+	if ! grep -q "ZeroNet commit" $COMPLETION_FILE; then
537
+		echo "ZeroNet commit:$ZERONET_COMMIT" >> $rootdir$COMPLETION_FILE
538
+	else
539
+		sed -i "s/ZeroNet commit.*/ZeroNet commit:$ZERONET_COMMIT/g" $COMPLETION_FILE
540
+	fi
541
+	chown -R zeronet:zeronet $rootdir/opt/zeronet
542
+
543
+	# Hack to ensure that the file access port is opened
544
+	# This is because zeronet normally relies on an internet site
545
+	# to do this, but on a purely local mesh the internet isn't available
546
+	sed -i 's|fileserver_port = 0|fileserver_port = config.fileserver_port\n            sys.modules["main"].file_server.port_opened = True|g' $rootdir/opt/zeronet/src/Site/Site.py
547
+
548
+	ZERPNET_DAEMON=$rootdir/etc/systemd/system/zeronet.service
549
+	echo '[Unit]' > $ZERONET_DAEMON
550
+	echo 'Description=Zeronet Server' >> $ZERONET_DAEMON
551
+	echo 'After=syslog.target' >> $ZERONET_DAEMON
552
+	echo 'After=network.target' >> $ZERONET_DAEMON
553
+	echo '[Service]' >> $ZERONET_DAEMON
554
+	echo 'Type=simple' >> $ZERONET_DAEMON
555
+	echo 'User=zeronet' >> $ZERONET_DAEMON
556
+	echo 'Group=zeronet' >> $ZERONET_DAEMON
557
+	echo 'WorkingDirectory=/opt/zeronet' >> $ZERONET_DAEMON
558
+	echo 'ExecStart=/usr/bin/python zeronet.py --ip_external replace.local --trackers_file /opt/zeronet/bootstrap' >> $ZERONET_DAEMON
559
+	echo '' >> $ZERONET_DAEMON
560
+	echo 'TimeoutSec=300' >> $ZERONET_DAEMON
561
+	echo '' >> $ZERONET_DAEMON
562
+	echo '[Install]' >> $ZERONET_DAEMON
563
+	echo 'WantedBy=multi-user.target' >> $ZERONET_DAEMON
564
+
565
+	TRACKER_DAEMON=$rootdir/etc/systemd/system/tracker.service
566
+	echo '[Unit]' > $TRACKER_DAEMON
567
+	echo 'Description=Torrent Tracker' >> $TRACKER_DAEMON
568
+	echo 'After=syslog.target' >> $TRACKER_DAEMON
569
+	echo 'After=network.target' >> $TRACKER_DAEMON
570
+	echo '[Service]' >> $TRACKER_DAEMON
571
+	echo 'Type=simple' >> $TRACKER_DAEMON
572
+	echo 'User=tracker' >> $TRACKER_DAEMON
573
+	echo 'Group=tracker' >> $TRACKER_DAEMON
574
+	echo 'WorkingDirectory=/opt/tracker' >> $TRACKER_DAEMON
575
+	echo "ExecStart=/usr/bin/bttrack --port $TRACKER_PORT --dfile /opt/tracker/dstate --logfile /opt/tracker/tracker.log --nat_check 0 --scrape_allowed full --ipv6_enabled 0" >> $TRACKER_DAEMON
576
+	echo '' >> $TRACKER_DAEMON
577
+	echo 'TimeoutSec=300' >> $TRACKER_DAEMON
578
+	echo '' >> $TRACKER_DAEMON
579
+	echo '[Install]' >> $TRACKER_DAEMON
580
+	echo 'WantedBy=multi-user.target' >> $TRACKER_DAEMON
581
+
582
+	$CHROOT_PREFIX useradd -d /opt/tracker/ -s /bin/false tracker
583
+	if [ ! -d $rootdir/opt/tracker ]; then
584
+		mkdir $rootdir/opt/tracker
585
+	fi
586
+	chown -R tracker:tracker $rootdir/opt/tracker
587
+
588
+	# publish regularly
589
+	echo "* *     * * *   root    zeronetavahi > /dev/null" >> $rootdir/etc/crontab
590
+
591
+	$CHROOT_PREFIX systemctl enable tracker.service
592
+	$CHROOT_PREFIX systemctl enable zeronet.service
593
+}
594
+
595
+function mesh_batman_client {
596
+	if [ ! -f ${rootdir}/tmp/meshtype ]; then
597
+		$CHROOT_PREFIX sudo apt-get -y install iproute bridge-utils libnetfilter-conntrack3 batctl
598
+		$CHROOT_PREFIX sudo apt-get -y install python-dev libevent-dev ebtables python-pip
599
+		$CHROOT_PREFIX sudo apt-get -y install wireless-tools rfkill
600
+		$CHROOT_PREFIX sudo apt-get -y install irssi mumble
601
+		if [ ! -f /usr/bin/toxic ]; then
602
+			$CHROOT_PREFIX sudo apt-get -y install toxic
603
+			echo "n
604
+/nick $USER
605
+/exit
606
+" | ${rootdir}/usr/bin/toxic -d
607
+		fi
608
+	fi
609
+
610
+	BATMAN_SCRIPT=${rootdir}/tmp/batman
611
+
612
+	echo '#!/bin/bash' > $BATMAN_SCRIPT
613
+	echo '' >> $BATMAN_SCRIPT
614
+	echo 'if [[ $1 == "start" ]]; then' >> $BATMAN_SCRIPT
615
+	echo '    # install avahi' >> $BATMAN_SCRIPT
616
+	echo '    apt-get -y install avahi-utils avahi-autoipd avahi-daemon avahi-dnsconfd bittornado' >> $BATMAN_SCRIPT
617
+	echo '    sed -i "s|#host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $BATMAN_SCRIPT
618
+	echo '    sed -i "s|host-name=.*|host-name=$(hostname)|g" /etc/avahi/avahi-daemon.conf' >> $BATMAN_SCRIPT
619
+	echo '    sed -i "s|use-ipv4=.*|use-ipv4=yes|g" /etc/avahi/avahi-daemon.conf' >> $BATMAN_SCRIPT
620
+	echo '    sed -i "s|use-ipv6=.*|use-ipv6=no|g" /etc/avahi/avahi-daemon.conf' >> $BATMAN_SCRIPT
621
+	echo '    sed -i "s|#disallow-other-stacks=.*|disallow-other-stacks=yes|g" /etc/avahi/avahi-daemon.conf' >> $BATMAN_SCRIPT
622
+	echo '    sed -i "s|hosts:.*|hosts:          files mdns4_minimal dns mdns4 mdns|g" /etc/nsswitch.conf' >> $BATMAN_SCRIPT
623
+	echo '    if [ -f /bin/systemctl ]; then' >> $BATMAN_SCRIPT
624
+	echo '        systemctl restart avahi-daemon' >> $BATMAN_SCRIPT
625
+	echo '    else' >> $BATMAN_SCRIPT
626
+	echo '        service avahi-daemon restart' >> $BATMAN_SCRIPT
627
+	echo '    fi' >> $BATMAN_SCRIPT
628
+	echo 'fi' >> $BATMAN_SCRIPT
629
+	echo '' >> $BATMAN_SCRIPT
630
+	echo '# Mesh definition' >> $BATMAN_SCRIPT
631
+	echo "ESSID=$ESSID" >> $BATMAN_SCRIPT
632
+	echo "CELLID=$BATMAN_CELLID" >> $BATMAN_SCRIPT
633
+	echo "CHANNEL=$WIFI_CHANNEL" >> $BATMAN_SCRIPT
634
+	echo '' >> $BATMAN_SCRIPT
635
+	echo '# Ethernet bridge definition (bridged to bat0)' >> $BATMAN_SCRIPT
636
+	echo 'BRIDGE=br-mesh' >> $BATMAN_SCRIPT
637
+	echo "IFACE=$WIFI_INTERFACE" >> $BATMAN_SCRIPT
638
+	echo 'EIFACE=eth0' >> $BATMAN_SCRIPT
639
+	echo '' >> $BATMAN_SCRIPT
640
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $BATMAN_SCRIPT
641
+	echo '    if grep -q "wlan1" /proc/net/dev; then' >> $BATMAN_SCRIPT
642
+	echo '        IFACE=wlan1' >> $BATMAN_SCRIPT
643
+	echo '    fi' >> $BATMAN_SCRIPT
644
+	echo 'fi' >> $BATMAN_SCRIPT
645
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $BATMAN_SCRIPT
646
+	echo '    if grep -q "wlan2" /proc/net/dev; then' >> $BATMAN_SCRIPT
647
+	echo '        IFACE=wlan2' >> $BATMAN_SCRIPT
648
+	echo '    fi' >> $BATMAN_SCRIPT
649
+	echo 'fi' >> $BATMAN_SCRIPT
650
+	echo 'if [[ $IFACE == "wlan0" ]]; then' >> $BATMAN_SCRIPT
651
+	echo '    if grep -q "wlan3" /proc/net/dev; then' >> $BATMAN_SCRIPT
652
+	echo '        IFACE=wlan3' >> $BATMAN_SCRIPT
653
+	echo '    fi' >> $BATMAN_SCRIPT
654
+	echo 'fi' >> $BATMAN_SCRIPT
655
+	echo '' >> $BATMAN_SCRIPT
656
+	echo 'if [ -e /etc/default/batctl ]; then' >> $BATMAN_SCRIPT
657
+	echo '    . /etc/default/batctl' >> $BATMAN_SCRIPT
658
+	echo 'fi' >> $BATMAN_SCRIPT
659
+	echo '' >> $BATMAN_SCRIPT
660
+	echo 'start() {' >> $BATMAN_SCRIPT
661
+	echo '    if [ -f /tmp/meshtype ] ; then' >> $BATMAN_SCRIPT
662
+	echo '        echo "Mesh already running"' >> $BATMAN_SCRIPT
663
+	echo '        return' >> $BATMAN_SCRIPT
664
+	echo '    fi' >> $BATMAN_SCRIPT
665
+	echo '    if [ -z "$IFACE" ] ; then' >> $BATMAN_SCRIPT
666
+	echo '        echo "error: unable to find wifi interface, not enabling batman-adv mesh"' >> $BATMAN_SCRIPT
667
+	echo '        return' >> $BATMAN_SCRIPT
668
+	echo '    fi' >> $BATMAN_SCRIPT
669
+	echo '    echo "info: enabling batman-adv mesh network $ESSID on $IFACE"' >> $BATMAN_SCRIPT
670
+
671
+	echo '    if [ -f /bin/systemctl ]; then' >> $BATMAN_SCRIPT
672
+	echo '        systemctl stop network-manager' >> $BATMAN_SCRIPT
673
+	echo '    else' >> $BATMAN_SCRIPT
674
+	echo '        service network-manager stop' >> $BATMAN_SCRIPT
675
+	echo '    fi' >> $BATMAN_SCRIPT
676
+	echo '    sleep 5' >> $BATMAN_SCRIPT
677
+	echo '' >> $BATMAN_SCRIPT
678
+	echo "    # remove an avahi service which isn't used" >> $BATMAN_SCRIPT
679
+	echo '    if [ -f /etc/avahi/services/udisks.service ]; then' >> $BATMAN_SCRIPT
680
+	echo '        sudo rm /etc/avahi/services/udisks.service' >> $BATMAN_SCRIPT
681
+	echo '    fi' >> $BATMAN_SCRIPT
682
+	echo '' >> $BATMAN_SCRIPT
683
+	echo '    # Might have to re-enable wifi' >> $BATMAN_SCRIPT
684
+	echo '    rfkill unblock $(rfkill list|awk -F: "/phy/ {print $1}") || true' >> $BATMAN_SCRIPT
685
+	echo '' >> $BATMAN_SCRIPT
686
+	echo '    ifconfig $IFACE down' >> $BATMAN_SCRIPT
687
+	echo '    ifconfig $IFACE mtu 1532' >> $BATMAN_SCRIPT
688
+	echo '    iwconfig $IFACE enc off' >> $BATMAN_SCRIPT
689
+	echo '    iwconfig $IFACE mode ad-hoc essid $ESSID channel $CHANNEL' >> $BATMAN_SCRIPT
690
+	echo '    sleep 1' >> $BATMAN_SCRIPT
691
+	echo '    iwconfig $IFACE ap $CELLID' >> $BATMAN_SCRIPT
692
+	echo '' >> $BATMAN_SCRIPT
693
+	echo '    modprobe batman-adv' >> $BATMAN_SCRIPT
694
+	echo '    batctl if add $IFACE' >> $BATMAN_SCRIPT
695
+	echo '    ifconfig $IFACE up' >> $BATMAN_SCRIPT
696
+	echo '    avahi-autoipd --force-bind --daemonize --wait $BRIDGE' >> $BATMAN_SCRIPT
697
+	echo '    avahi-autoipd --force-bind --daemonize --wait $IFACE' >> $BATMAN_SCRIPT
698
+	echo '    ifconfig bat0 up promisc' >> $BATMAN_SCRIPT
699
+	echo '' >> $BATMAN_SCRIPT
700
+	echo '    #Use persistent HWAddr' >> $BATMAN_SCRIPT
701
+	echo '    ether_new=$(ifconfig eth0 | grep HWaddr | sed -e "s/.*HWaddr //")' >> $BATMAN_SCRIPT
702
+	echo '    if [ ! -f /var/lib/mesh-node/bat0 ]; then' >> $BATMAN_SCRIPT
703
+	echo '        mkdir /var/lib/mesh-node' >> $BATMAN_SCRIPT
704
+	echo '        echo "${ether_new}" > /var/lib/mesh-node/bat0' >> $BATMAN_SCRIPT
705
+	echo '    else' >> $BATMAN_SCRIPT
706
+	echo '        ether=$(cat /var/lib/mesh-node/bat0)' >> $BATMAN_SCRIPT
707
+	echo '        ifconfig bat0 hw ether ${ether}' >> $BATMAN_SCRIPT
708
+	echo '    fi' >> $BATMAN_SCRIPT
709
+	echo '' >> $BATMAN_SCRIPT
710
+	echo '    if [ "$EIFACE" ] ; then' >> $BATMAN_SCRIPT
711
+	echo '        brctl addbr $BRIDGE' >> $BATMAN_SCRIPT
712
+	echo '        brctl addif $BRIDGE bat0' >> $BATMAN_SCRIPT
713
+	echo '        brctl addif $BRIDGE $EIFACE' >> $BATMAN_SCRIPT
714
+	echo '        ifconfig bat0 0.0.0.0' >> $BATMAN_SCRIPT
715
+	echo '        ifconfig $EIFACE 0.0.0.0' >> $BATMAN_SCRIPT
716
+	echo '        ifconfig $EIFACE up promisc' >> $BATMAN_SCRIPT
717
+	echo '        ifconfig $BRIDGE up' >> $BATMAN_SCRIPT
718
+	echo '    fi' >> $BATMAN_SCRIPT
719
+	echo '' >> $BATMAN_SCRIPT
720
+	echo '    iptables -A INPUT -p tcp --dport 548 -j ACCEPT' >> $BATMAN_SCRIPT
721
+	echo '    iptables -A INPUT -p udp --dport 548 -j ACCEPT' >> $BATMAN_SCRIPT
722
+	echo '    iptables -A INPUT -p tcp --dport 5353 -j ACCEPT' >> $BATMAN_SCRIPT
723
+	echo '    iptables -A INPUT -p udp --dport 5353 -j ACCEPT' >> $BATMAN_SCRIPT
724
+	echo '    iptables -A INPUT -p tcp --dport 5354 -j ACCEPT' >> $BATMAN_SCRIPT
725
+	echo '    iptables -A INPUT -p udp --dport 5354 -j ACCEPT' >> $BATMAN_SCRIPT
726
+	echo "    iptables -A INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $BATMAN_SCRIPT
727
+	echo "    iptables -A INPUT -p udp --dport $ZERONET_PORT -j ACCEPT" >> $BATMAN_SCRIPT
728
+	echo "    iptables -A INPUT -p udp --dport $TRACKER_PORT -j ACCEPT" >> $BATMAN_SCRIPT
729
+	echo "    iptables -A INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $BATMAN_SCRIPT
730
+	echo "    iptables -A INPUT -p tcp --dport $IPFS_PORT -j ACCEPT" >> $BATMAN_SCRIPT
731
+	echo "    iptables -A INPUT -p udp --dport 1900 -j ACCEPT" >> $BATMAN_SCRIPT
732
+	echo "    iptables -A INPUT -p tcp --dport 80 -j ACCEPT" >> $BATMAN_SCRIPT
733
+	echo "    iptables -A INPUT -p udp -m udp -j ACCEPT" >> $BATMAN_SCRIPT
734
+	echo '' >> $BATMAN_SCRIPT
735
+	echo '    if [ -f /bin/systemctl ]; then' >> $BATMAN_SCRIPT
736
+	echo '        systemctl restart avahi-daemon' >> $BATMAN_SCRIPT
737
+	echo '    else' >> $BATMAN_SCRIPT
738
+	echo '        service avahi-daemon restart' >> $BATMAN_SCRIPT
739
+	echo '    fi' >> $BATMAN_SCRIPT
740
+	echo '    echo "batman" > /tmp/meshtype' >> $BATMAN_SCRIPT
741
+	echo '}' >> $BATMAN_SCRIPT
742
+	echo '' >> $BATMAN_SCRIPT
743
+	echo 'stop() {' >> $BATMAN_SCRIPT
744
+	echo '    if [ -z "$IFACE" ]; then' >> $BATMAN_SCRIPT
745
+	echo '        echo "error: unable to find wifi interface, not enabling batman-adv mesh"' >> $BATMAN_SCRIPT
746
+	echo '        return' >> $BATMAN_SCRIPT
747
+	echo '    fi' >> $BATMAN_SCRIPT
748
+	echo '    if [ "$EIFACE" ]; then' >> $BATMAN_SCRIPT
749
+	echo '        brctl delif $BRIDGE bat0' >> $BATMAN_SCRIPT
750
+	echo '        brctl delif $BRIDGE $EIFACE' >> $BATMAN_SCRIPT
751
+	echo '        ifconfig $BRIDGE down || true' >> $BATMAN_SCRIPT
752
+	echo '        brctl delbr $BRIDGE' >> $BATMAN_SCRIPT
753
+	echo '        ifconfig $EIFACE down -promisc' >> $BATMAN_SCRIPT
754
+	echo '    fi' >> $BATMAN_SCRIPT
755
+	echo '' >> $BATMAN_SCRIPT
756
+	echo '    avahi-autoipd -k $BRIDGE' >> $BATMAN_SCRIPT
757
+	echo '    avahi-autoipd -k $IFACE' >> $BATMAN_SCRIPT
758
+	echo '    ifconfig bat0 down -promisc' >> $BATMAN_SCRIPT
759
+	echo '' >> $BATMAN_SCRIPT
760
+	echo '    batctl if del $IFACE' >> $BATMAN_SCRIPT
761
+	echo '    rmmod batman-adv' >> $BATMAN_SCRIPT
762
+	echo '    ifconfig $IFACE mtu 1500' >> $BATMAN_SCRIPT
763
+	echo '    ifconfig $IFACE down' >> $BATMAN_SCRIPT
764
+	echo '    iwconfig $IFACE mode managed' >> $BATMAN_SCRIPT
765
+	echo '' >> $BATMAN_SCRIPT
766
+	echo '    iptables -D INPUT -p tcp --dport 548 -j ACCEPT' >> $BATMAN_SCRIPT
767
+	echo '    iptables -D INPUT -p udp --dport 548 -j ACCEPT' >> $BATMAN_SCRIPT
768
+	echo '    iptables -D INPUT -p tcp --dport 5353 -j ACCEPT' >> $BATMAN_SCRIPT
769
+	echo '    iptables -D INPUT -p udp --dport 5353 -j ACCEPT' >> $BATMAN_SCRIPT
770
+	echo '    iptables -D INPUT -p tcp --dport 5354 -j ACCEPT' >> $BATMAN_SCRIPT
771
+	echo '    iptables -D INPUT -p udp --dport 5354 -j ACCEPT' >> $BATMAN_SCRIPT
772
+	echo "    iptables -D INPUT -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $BATMAN_SCRIPT
773
+	echo "    iptables -D INPUT -p udp --dport $ZERONET_PORT -j ACCEPT" >> $BATMAN_SCRIPT
774
+	echo "    iptables -D INPUT -p udp --dport $TRACKER_PORT -j ACCEPT" >> $BATMAN_SCRIPT
775
+	echo "    iptables -D INPUT -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $BATMAN_SCRIPT
776
+	echo "    iptables -D INPUT -p tcp --dport $IPFS_PORT -j ACCEPT" >> $BATMAN_SCRIPT
777
+	echo "    iptables -D INPUT -p udp --dport 1900 -j ACCEPT" >> $BATMAN_SCRIPT
778
+	echo "    iptables -D INPUT -p tcp --dport 80 -j ACCEPT" >> $BATMAN_SCRIPT
779
+	echo "    iptables -D INPUT -p udp -m udp -j ACCEPT" >> $BATMAN_SCRIPT
780
+	echo '' >> $BATMAN_SCRIPT
781
+	echo '    if [ -f /bin/systemctl ]; then' >> $BATMAN_SCRIPT
782
+	echo '        systemctl restart network-manager' >> $BATMAN_SCRIPT
783
+	echo '    else' >> $BATMAN_SCRIPT
784
+	echo '        service network-manager restart' >> $BATMAN_SCRIPT
785
+	echo '    fi' >> $BATMAN_SCRIPT
786
+	echo '    ' >> $BATMAN_SCRIPT
787
+	echo '    # restore tox bootstrap nodes for the internet' >> $BATMAN_SCRIPT
788
+	echo '    if [ -f /usr/share/toxic/DHTnodes.internet ]; then' >> $BATMAN_SCRIPT
789
+	echo '        mv /usr/share/toxic/DHTnodes.internet /usr/share/toxic/DHTnodes' >> $BATMAN_SCRIPT
790
+	echo '    fi' >> $BATMAN_SCRIPT
791
+	echo '    if [ -f /usr/local/share/toxic/DHTnodes.internet ]; then' >> $BATMAN_SCRIPT
792
+	echo '        mv /usr/local/share/toxic/DHTnodes.internet /usr/local/share/toxic/DHTnodes' >> $BATMAN_SCRIPT
793
+	echo '    fi' >> $BATMAN_SCRIPT
794
+	echo '' >> $BATMAN_SCRIPT
795
+	echo '    if [ -f /bin/systemctl ]; then' >> $BATMAN_SCRIPT
796
+	echo '        systemctl stop avahi-daemon' >> $BATMAN_SCRIPT
797
+	echo '    else' >> $BATMAN_SCRIPT
798
+	echo '        service avahi-daemon stop' >> $BATMAN_SCRIPT
799
+	echo '    fi' >> $BATMAN_SCRIPT
800
+	echo '' >> $BATMAN_SCRIPT
801
+	echo '    sudo rm -f /tmp/meshtype' >> $BATMAN_SCRIPT
802
+	echo '' >> $BATMAN_SCRIPT
803
+	echo '    # kill processes' >> $BATMAN_SCRIPT
804
+	echo '    zeronet_proc=$(ps aux | grep zeronet | grep -v grep | awk -F " " "{print $2}" | head -n1)' >> $BATMAN_SCRIPT
805
+	echo '    if [ "$zeronet_proc" ]; then' >> $BATMAN_SCRIPT
806
+	echo '        kill -9 $zeronet_proc 2> /dev/null' >> $BATMAN_SCRIPT
807
+	echo '    fi' >> $BATMAN_SCRIPT
808
+	echo '    tracker_proc=$(ps aux | grep bttrack | grep -v grep | awk -F " " "{print $2}" | head -n1)' >> $BATMAN_SCRIPT
809
+	echo '    if [ "$tracker_proc" ]; then' >> $BATMAN_SCRIPT
810
+	echo '        kill -9 $tracker_proc 2> /dev/null' >> $BATMAN_SCRIPT
811
+	echo '    fi' >> $BATMAN_SCRIPT
812
+	echo '    if [ ! -f /etc/systemd/system/ipfs.service ]; then' >> $BATMAN_SCRIPT
813
+	echo '        ipfs_proc=$(ps aux | grep ipfs | grep -v grep | awk -F " " "{print $2}" | head -n1)' >> $BATMAN_SCRIPT
814
+	echo '        if [ "$ipfs_proc" ]; then' >> $BATMAN_SCRIPT
815
+	echo '            kill -9 $ipfs_proc 2> /dev/null' >> $BATMAN_SCRIPT
816
+	echo '        fi' >> $BATMAN_SCRIPT
817
+	echo '    fi' >> $BATMAN_SCRIPT
818
+	echo '}' >> $BATMAN_SCRIPT
819
+	echo '' >> $BATMAN_SCRIPT
820
+	echo 'if ! grep -q "$IFACE" /proc/net/dev; then' >> $BATMAN_SCRIPT
821
+	echo '    echo "Interface $IFACE was not found"' >> $BATMAN_SCRIPT
822
+	echo '    stop' >> $BATMAN_SCRIPT
823
+	echo '    exit 1' >> $BATMAN_SCRIPT
824
+	echo 'fi' >> $BATMAN_SCRIPT
825
+	echo '' >> $BATMAN_SCRIPT
826
+	echo 'case "$1" in' >> $BATMAN_SCRIPT
827
+	echo '    start|stop)' >> $BATMAN_SCRIPT
828
+	echo '        $1' >> $BATMAN_SCRIPT
829
+	echo '        ;;' >> $BATMAN_SCRIPT
830
+	echo '    restart)' >> $BATMAN_SCRIPT
831
+	echo '        stop' >> $BATMAN_SCRIPT
832
+	echo '        sleep 10' >> $BATMAN_SCRIPT
833
+	echo '        start' >> $BATMAN_SCRIPT
834
+	echo '        ;;' >> $BATMAN_SCRIPT
835
+	echo '    status)' >> $BATMAN_SCRIPT
836
+	echo '        batctl o' >> $BATMAN_SCRIPT
837
+	echo '        ;;' >> $BATMAN_SCRIPT
838
+	echo '    ping)' >> $BATMAN_SCRIPT
839
+	echo '        batctl ping $2' >> $BATMAN_SCRIPT
840
+	echo '        ;;' >> $BATMAN_SCRIPT
841
+	echo '    ls|list)' >> $BATMAN_SCRIPT
842
+	echo '        avahi-browse -atl' >> $BATMAN_SCRIPT
843
+	echo '        ;;' >> $BATMAN_SCRIPT
844
+	echo '    *)' >> $BATMAN_SCRIPT
845
+	echo '    echo "error: invalid parameter $1"' >> $BATMAN_SCRIPT
846
+	echo '    echo "usage: $0 {start|stop|restart|status|ping|ls|list}"' >> $BATMAN_SCRIPT
847
+	echo '    exit 2' >> $BATMAN_SCRIPT
848
+	echo '    ;;' >> $BATMAN_SCRIPT
849
+	echo 'esac' >> $BATMAN_SCRIPT
850
+	echo 'exit 0' >> $BATMAN_SCRIPT
851
+	chmod +x $BATMAN_SCRIPT
852
+	sudo cp -f $BATMAN_SCRIPT /usr/bin/batman
853
+	rm $BATMAN_SCRIPT
854
+}
855
+
856
+
857
+while [[ $# > 1 ]]
858
+do
859
+	key="$1"
860
+
861
+	case $key in
862
+		-h|--help)
863
+			show_help
864
+			;;
865
+		-f|--function)
866
+			shift
867
+			FN="$1"
868
+			;;
869
+		-r|--rootdir)
870
+			shift
871
+			rootdir="$1"
872
+			CHROOT_PREFIX='chroot "${rootdir}"'
873
+			;;
874
+		-w|--wifi|--interface)
875
+			shift
876
+			WIFI_INTERFACE="$1"
877
+			;;
878
+		-m|--mirror)
879
+			shift
880
+			FRIENDS_MIRRORS_SERVER="$1"
881
+			;;
882
+		*)
883
+			# unknown option
884
+			;;
885
+
886
+	esac
887
+	shift
888
+done
889
+
890
+if [[ $FN == 'babel' ]]; then
891
+	mesh_babel
892
+fi
893
+if [[ $FN == 'babel_client' ]]; then
894
+	mesh_babel_client
895
+fi
896
+if [[ $FN == 'avahi' ]]; then
897
+	mesh_avahi
898
+fi
899
+if [[ $FN == 'firewall' ]]; then
900
+	mesh_firewall
901
+fi
902
+if [[ $FN == 'batman' ]]; then
903
+	mesh_batman
904
+fi
905
+if [[ $FN == 'batman_client' ]]; then
906
+	mesh_batman_client
907
+fi
908
+if [[ $FN == 'tox_node' ]]; then
909
+	mesh_tox_node
910
+fi
911
+if [[ $FN == 'tox_client' ]]; then
912
+	mesh_tox_client
913
+fi
914
+if [[ $FN == 'zeronet' ]]; then
915
+	mesh_zeronet
916
+fi
917
+
918
+exit 0