浏览代码

Compile toxcore and toxic on mesh nodes

This does result in a delay before fully operational but avoids needing to cross compile while building the image, which adds complexity
Bob Mottram 9 年前
父节点
当前提交
043862ec9a
共有 2 个文件被更改,包括 443 次插入306 次删除
  1. 39
    39
      src/freedombone-image-customise
  2. 404
    267
      src/freedombone-image-mesh

+ 39
- 39
src/freedombone-image-customise 查看文件

@@ -640,35 +640,43 @@ function mesh_tox_node {
640 640
 	chroot "$rootdir" apt-get -y install libsodium13 libsodium-dev libcap2-bin
641 641
 	chroot "$rootdir" apt-get -y install libconfig9 libconfig-dev
642 642
 
643
-	chroot "$rootdir" git clone $TOXCORE_REPO $INSTALL_DIR/toxcore
644
-	chroot "$rootdir" cd $INSTALL_DIR/toxcore; git checkout $TOXCORE_COMMIT -b $TOXCORE_COMMIT
645
-
646
-	chroot "$rootdir" cd $INSTALL_DIR/toxcore; autoreconf -i
647
-	chroot "$rootdir" cd $INSTALL_DIR/toxcore; ./configure --enable-daemon --disable-av
648
-	if [ ! "$?" = "0" ]; then
649
-		return
650
-	fi
651
-	chroot "$rootdir" cd $INSTALL_DIR/toxcore; make
652
-	if [ ! "$?" = "0" ]; then
653
-		return
654
-	fi
655
-	chroot "$rootdir" cd $INSTALL_DIR/toxcore; make install
656
-	chroot "$rootdir" cp /usr/local/lib/libtoxcore* /usr/lib/
657
-
658
-	if [ ! -f $rootdir/usr/local/bin/tox-bootstrapd ]; then
659
-		echo $"File not found /usr/local/bin/tox-bootstrapd"
660
-		return
643
+	if [ ! -d $rootdir$INSTALL_DIR ]; then
644
+		mkdir -p $rootdir$INSTALL_DIR
661 645
 	fi
662
-
663
-	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
664
-	chroot "$rootdir" chmod 700 /var/lib/tox-bootstrapd
665
-	if [ ! -f $rootdir/$INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf ]; then
666
-		echo $"File not found $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf"
646
+	git clone $TOXCORE_REPO $rootdir$INSTALL_DIR/toxcore
647
+	if [ ! -d $rootdir$INSTALL_DIR/toxcore ]; then
648
+		echo $'Unable to clone toxcore'
649
+		exit 543335
667 650
 	fi
651
+	cd $rootdir$INSTALL_DIR/toxcore
652
+	git checkout $TOXCORE_COMMIT -b $TOXCORE_COMMIT
653
+
654
+	#chroot "$rootdir" cd $INSTALL_DIR/toxcore; autoreconf -i
655
+	#chroot "$rootdir" cd $INSTALL_DIR/toxcore; ./configure --enable-daemon --disable-av
656
+	#if [ ! "$?" = "0" ]; then
657
+		#return
658
+	#fi
659
+	#chroot "$rootdir" cd $INSTALL_DIR/toxcore; make
660
+	#if [ ! "$?" = "0" ]; then
661
+		#return
662
+	#fi
663
+	#chroot "$rootdir" cd $INSTALL_DIR/toxcore; make install
664
+	#chroot "$rootdir" cp /usr/local/lib/libtoxcore* /usr/lib/
665
+
666
+	#if [ ! -f $rootdir/usr/local/bin/tox-bootstrapd ]; then
667
+		#echo $"File not found /usr/local/bin/tox-bootstrapd"
668
+		#return
669
+	#fi
670
+
671
+	#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
672
+	#chroot "$rootdir" chmod 700 /var/lib/tox-bootstrapd
673
+	#if [ ! -f $rootdir/$INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf ]; then
674
+		#echo $"File not found $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf"
675
+	#fi
668 676
 	# remove Maildir
669
-	if [ -d $rootdir/var/lib/tox-bootstrapd/Maildir ]; then
670
-		rm -rf $rootdir/var/lib/tox-bootstrapd/Maildir
671
-	fi
677
+	#if [ -d $rootdir/var/lib/tox-bootstrapd/Maildir ]; then
678
+		#rm -rf $rootdir/var/lib/tox-bootstrapd/Maildir
679
+	#fi
672 680
 
673 681
 	# create configuration file
674 682
 	TOX_BOOTSTRAP_CONFIG=${rootdir}/etc/tox-bootstrapd.conf
@@ -751,26 +759,18 @@ function mesh_tox_client {
751 759
 	chroot "$rootdir" apt-get -y install libncursesw5-dev libconfig-dev libqrencode-dev
752 760
 	chroot "$rootdir" apt-get -y install libcurl4-openssl-dev libvpx-dev libopenal-dev
753 761
 
754
-	if [ ! -f $rootdir$INSTALL_DIR ]; then
762
+	if [ ! -d $rootdir$INSTALL_DIR ]; then
755 763
 		mkdir -p $rootdir$INSTALL_DIR
756 764
 	fi
757
-	chroot "$rootdir" git clone $TOXIC_REPO $INSTALL_DIR/toxic
758
-	chroot "$rootdir" cd $INSTALL_DIR/toxic; git checkout $TOXIC_COMMIT -b $TOXIC_COMMIT
765
+	git clone $TOXIC_REPO $rootdir$INSTALL_DIR/toxic
766
+	cd $rootdir$INSTALL_DIR/toxic
767
+	git checkout $TOXIC_COMMIT -b $TOXIC_COMMIT
768
+
759 769
 	if ! grep -q "Toxic commit" $rootdir$COMPLETION_FILE; then
760 770
 		echo "Toxic commit:$TOXIC_COMMIT" >> $rootdir$COMPLETION_FILE
761 771
 	else
762 772
 		sed -i "s|Toxic commit.*|Toxic commit:$TOXIC_COMMIT|g" $rootdir$COMPLETION_FILE
763 773
 	fi
764
-
765
-	chroot "$rootdir" cd $INSTALL_DIR/toxic; make
766
-	if [ ! -f $INSTALL_DIR/toxic/build/toxic ]; then
767
-		exit 74872
768
-	fi
769
-	chroot "$rootdir" cd $INSTALL_DIR/toxic; make install
770
-	if [ ! -f $TOXIC_FILE ]; then
771
-		echo $'Tox client was not installed'
772
-		exit 63278
773
-	fi
774 774
 }
775 775
 
776 776
 function mesh_zeronet {

+ 404
- 267
src/freedombone-image-mesh 查看文件

@@ -33,295 +33,432 @@ export TEXTDOMAINDIR="/usr/share/locale"
33 33
 
34 34
 MY_USERNAME='fbone'
35 35
 PEER_ID=
36
+INSTALL_DIR=/root/build
37
+INSTALL_LOG=/var/log/${PROJECT_NAME}.log
36 38
 
37 39
 function change_avahi_name {
38
-    decarray=( 1 2 3 4 5 6 7 8 9 0 )
39
-    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]}
40
-    sed -i "s|#host-name=.*|host-name=P$PEER_ID|g" /etc/avahi/avahi-daemon.conf
41
-    sed -i "s|host-name=.*|host-name=P$PEER_ID|g" /etc/avahi/avahi-daemon.conf
42
-    echo "New avahi name for this peer is P$PEER_ID"
43
-    toilet "mesh-$PEER_ID"
40
+	decarray=( 1 2 3 4 5 6 7 8 9 0 )
41
+	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]}
42
+	sed -i "s|#host-name=.*|host-name=P$PEER_ID|g" /etc/avahi/avahi-daemon.conf
43
+	sed -i "s|host-name=.*|host-name=P$PEER_ID|g" /etc/avahi/avahi-daemon.conf
44
+	echo "New avahi name for this peer is P$PEER_ID"
45
+	toilet "mesh-$PEER_ID"
46
+	echo $"avahi name changed to P${PEER_ID}.local" >> $INSTALL_LOG
44 47
 }
45 48
 
46 49
 function regenerate_ssh_host_keys {
47
-    echo $"Regenerating ssh host keys"
48
-    rm -f /etc/ssh/ssh_host_*
49
-    dpkg-reconfigure openssh-server
50
-    echo $'ssh host keys regenerated'
51
-    # remove small moduli
52
-    awk '$5 > 2000' /etc/ssh/moduli > ~/moduli
53
-    mv ~/moduli /etc/ssh/moduli
54
-    echo $'ssh small moduli removed'
50
+	echo $"Regenerating ssh host keys" >> $INSTALL_LOG
51
+	rm -f /etc/ssh/ssh_host_*
52
+	dpkg-reconfigure openssh-server
53
+	echo $'ssh host keys regenerated' >> $INSTALL_LOG
54
+	# remove small moduli
55
+	awk '$5 > 2000' /etc/ssh/moduli > ~/moduli
56
+	mv ~/moduli /etc/ssh/moduli
57
+	echo $'ssh small moduli removed' >> $INSTALL_LOG
55 58
 }
56 59
 
57 60
 function configure_zeronet {
58
-    sed -i "s|replace.local|P${PEER_ID}.local|g" /etc/systemd/system/zeronet.service
61
+	sed -i "s|replace.local|P${PEER_ID}.local|g" /etc/systemd/system/zeronet.service
62
+	echo $"zeronet daemon updated to P${PEER_ID}.local" >> $INSTALL_LOG
59 63
 }
60 64
 
61 65
 function configure_zeronet_blog {
62
-    echo $'Updating ZeroNet Blog'
63
-    ZERONET_DEFAULT_BLOG_TITLE="${MY_USERNAME}'s Blog"
64
-
65
-    cd /opt/zeronet
66
-    python zeronet.py --batch siteCreate 2> /opt/zeronet/blog.txt
67
-    if [ ! -f /opt/zeronet/blog.txt ]; then
68
-        echo $'Unable to create ZeroNet blog'
69
-        exit 7386
70
-    fi
71
-    blog_address=$(cat blog.txt | grep "Site address" | awk -F ':' '{print $2}')
72
-    blog_private_key=$(cat blog.txt | grep "Site private key" | awk -F ':' '{print $2}')
73
-    ZERONET_BLOG_ADDRESS=${blog_address//[[:blank:]]/}
74
-    ZERONET_BLOG_PRIVATE_KEY=${blog_private_key//[[:blank:]]/}
75
-
76
-    if [ ${#ZERONET_BLOG_ADDRESS} -lt 20 ]; then
77
-        echo $"Address:    $ZERONET_BLOG_ADDRESS"
78
-        echo $"Public key: $ZERONET_BLOG_PRIVATE_KEY"
79
-        echo $'Unable to create zeronet blog address'
80
-        exit 7358
81
-    fi
82
-
83
-    if [ ${#ZERONET_BLOG_PRIVATE_KEY} -lt 20 ]; then
84
-        echo $"Address:    $ZERONET_BLOG_ADDRESS"
85
-        echo $"Public key: $ZERONET_BLOG_PRIVATE_KEY"
86
-        echo $'Unable to create zeronet blog private key'
87
-        exit 1639
88
-    fi
89
-
90
-    if [ ! -d "/opt/zeronet/data/$ZERONET_BLOG_ADDRESS" ]; then
91
-        echo $"Unable to find site directory: /opt/zeronet/data/$ZERONET_BLOG_ADDRESS"
92
-        exit 7638
93
-    fi
94
-
95
-    echo $"ZeroNet Blog address:     $ZERONET_BLOG_ADDRESS"
96
-    echo $"ZeroNet Blog private key: $ZERONET_BLOG_PRIVATE_KEY"
97
-    cp -r /opt/zeronet/ZeroBlog/* /opt/zeronet/data/$ZERONET_BLOG_ADDRESS
98
-
99
-    if [ ! -d /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data ]; then
100
-        mkdir /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data
101
-    fi
102
-    cp /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data-default/data.json /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data
103
-    sed -i "s/MyZeroBlog/$ZERONET_DEFAULT_BLOG_TITLE/g" /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data/data.json
104
-    sed -i "s/My ZeroBlog./$ZERONET_DEFAULT_BLOG_TAGLINE/g" /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data/data.json
105
-    sed -i "s/ZeroBlog Demo/$ZERONET_DEFAULT_BLOG_TITLE/g" /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/index.html
106
-    sed -i "s|<h3 class=\"description\">.*|<h3 class=\"description\">$ZERONET_DEFAULT_BLOG_TAGLINE</h3>|g" /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/index.html
107
-    sed -i "s/Blogging platform Demo/Blogging platform/g" /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/content.json
108
-    python zeronet.py siteSign $ZERONET_BLOG_ADDRESS $ZERONET_BLOG_PRIVATE_KEY
109
-
110
-    # update the avahi service
111
-    echo '<?xml version="1.0" standalone="no"?><!--*-nxml-*-->' > /tmp/zeronet-blog.service
112
-    echo '<!DOCTYPE service-group SYSTEM "avahi-service.dtd">' >> /tmp/zeronet-blog.service
113
-    echo '<service-group>' >> /tmp/zeronet-blog.service
114
-    echo '  <name replace-wildcards="yes">%h ZeroNet Blog</name>' >> /tmp/zeronet-blog.service
115
-    echo '  <service>' >> /tmp/zeronet-blog.service
116
-    echo '    <type>_zeronet._udp</type>' >> /tmp/zeronet-blog.service
117
-    echo "    <port>$ZERONET_PORT</port>" >> /tmp/zeronet-blog.service
118
-    echo "    <txt-record>$ZERONET_URL/$ZERONET_BLOG_ADDRESS</txt-record>" >> /tmp/zeronet-blog.service
119
-    echo '  </service>' >> /tmp/zeronet-blog.service
120
-    echo '</service-group>' >> /tmp/zeronet-blog.service
121
-    cp /tmp/zeronet-blog.service /etc/avahi/services/zeronet-blog.service
122
-
123
-    if [ ! -d /home/$MY_USERNAME/.config/zeronet ]; then
124
-        mkdir -p /home/$MY_USERNAME/.config/zeronet
125
-        chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.config
126
-    fi
127
-    echo "$ZERONET_URL/$ZERONET_BLOG_ADDRESS" > /home/$MY_USERNAME/.config/zeronet/myblog
128
-
129
-    sed -i "s|ZeroNet Blog address.*|ZeroNet Blog address: $ZERONET_BLOG_ADDRESS|g" /home/$MY_USERNAME/README
130
-    sed -i "s|ZeroNet Blog private key.*|ZeroNet Blog private key: $ZERONET_BLOG_PRIVATE_KEY|g" /home/$MY_USERNAME/README
66
+	echo $'Updating ZeroNet Blog' >> $INSTALL_LOG
67
+	ZERONET_DEFAULT_BLOG_TITLE="${MY_USERNAME}'s Blog"
68
+
69
+	cd /opt/zeronet
70
+	python zeronet.py --batch siteCreate 2> /opt/zeronet/blog.txt
71
+	if [ ! -f /opt/zeronet/blog.txt ]; then
72
+		echo $'Unable to create ZeroNet blog' >> $INSTALL_LOG
73
+		exit 7386
74
+	fi
75
+	blog_address=$(cat blog.txt | grep "Site address" | awk -F ':' '{print $2}')
76
+	blog_private_key=$(cat blog.txt | grep "Site private key" | awk -F ':' '{print $2}')
77
+	ZERONET_BLOG_ADDRESS=${blog_address//[[:blank:]]/}
78
+	ZERONET_BLOG_PRIVATE_KEY=${blog_private_key//[[:blank:]]/}
79
+
80
+	if [ ${#ZERONET_BLOG_ADDRESS} -lt 20 ]; then
81
+		echo $"Address:    $ZERONET_BLOG_ADDRESS" >> $INSTALL_LOG
82
+		echo $"Public key: $ZERONET_BLOG_PRIVATE_KEY" >> $INSTALL_LOG
83
+		echo $'Unable to create zeronet blog address' >> $INSTALL_LOG
84
+		exit 7358
85
+	fi
86
+
87
+	if [ ${#ZERONET_BLOG_PRIVATE_KEY} -lt 20 ]; then
88
+		echo $"Address:    $ZERONET_BLOG_ADDRESS" >> $INSTALL_LOG
89
+		echo $"Public key: $ZERONET_BLOG_PRIVATE_KEY" >> $INSTALL_LOG
90
+		echo $'Unable to create zeronet blog private key' >> $INSTALL_LOG
91
+		exit 1639
92
+	fi
93
+
94
+	if [ ! -d "/opt/zeronet/data/$ZERONET_BLOG_ADDRESS" ]; then
95
+		echo $"Unable to find site directory: /opt/zeronet/data/$ZERONET_BLOG_ADDRESS" >> $INSTALL_LOG
96
+		exit 7638
97
+	fi
98
+
99
+	echo $"ZeroNet Blog address:     $ZERONET_BLOG_ADDRESS" >> $INSTALL_LOG
100
+	echo $"ZeroNet Blog private key: $ZERONET_BLOG_PRIVATE_KEY" >> $INSTALL_LOG
101
+	cp -r /opt/zeronet/ZeroBlog/* /opt/zeronet/data/$ZERONET_BLOG_ADDRESS
102
+
103
+	if [ ! -d /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data ]; then
104
+		mkdir /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data
105
+	fi
106
+	cp /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data-default/data.json /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data
107
+	sed -i "s/MyZeroBlog/$ZERONET_DEFAULT_BLOG_TITLE/g" /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data/data.json
108
+	sed -i "s/My ZeroBlog./$ZERONET_DEFAULT_BLOG_TAGLINE/g" /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/data/data.json
109
+	sed -i "s/ZeroBlog Demo/$ZERONET_DEFAULT_BLOG_TITLE/g" /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/index.html
110
+	sed -i "s|<h3 class=\"description\">.*|<h3 class=\"description\">$ZERONET_DEFAULT_BLOG_TAGLINE</h3>|g" /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/index.html
111
+	sed -i "s/Blogging platform Demo/Blogging platform/g" /opt/zeronet/data/$ZERONET_BLOG_ADDRESS/content.json
112
+	python zeronet.py siteSign $ZERONET_BLOG_ADDRESS $ZERONET_BLOG_PRIVATE_KEY
113
+
114
+	# update the avahi service
115
+	echo '<?xml version="1.0" standalone="no"?><!--*-nxml-*-->' > /tmp/zeronet-blog.service
116
+	echo '<!DOCTYPE service-group SYSTEM "avahi-service.dtd">' >> /tmp/zeronet-blog.service
117
+	echo '<service-group>' >> /tmp/zeronet-blog.service
118
+	echo '  <name replace-wildcards="yes">%h ZeroNet Blog</name>' >> /tmp/zeronet-blog.service
119
+	echo '  <service>' >> /tmp/zeronet-blog.service
120
+	echo '    <type>_zeronet._udp</type>' >> /tmp/zeronet-blog.service
121
+	echo "    <port>$ZERONET_PORT</port>" >> /tmp/zeronet-blog.service
122
+	echo "    <txt-record>$ZERONET_URL/$ZERONET_BLOG_ADDRESS</txt-record>" >> /tmp/zeronet-blog.service
123
+	echo '  </service>' >> /tmp/zeronet-blog.service
124
+	echo '</service-group>' >> /tmp/zeronet-blog.service
125
+	cp /tmp/zeronet-blog.service /etc/avahi/services/zeronet-blog.service
126
+
127
+	if [ ! -d /home/$MY_USERNAME/.config/zeronet ]; then
128
+		mkdir -p /home/$MY_USERNAME/.config/zeronet
129
+		chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.config
130
+	fi
131
+	echo "$ZERONET_URL/$ZERONET_BLOG_ADDRESS" > /home/$MY_USERNAME/.config/zeronet/myblog
132
+
133
+	sed -i "s|ZeroNet Blog address.*|ZeroNet Blog address: $ZERONET_BLOG_ADDRESS|g" /home/$MY_USERNAME/README
134
+	sed -i "s|ZeroNet Blog private key.*|ZeroNet Blog private key: $ZERONET_BLOG_PRIVATE_KEY|g" /home/$MY_USERNAME/README
135
+
136
+	echo $'Update of ZeroNet Blog completed' >> $INSTALL_LOG
131 137
 }
132 138
 
133 139
 function configure_zeronet_mail {
134
-    echo $'Updating ZeroNet Mail'
135
-    ZERONET_DEFAULT_MAIL_TITLE="${MY_USERNAME}'s Mail"
136
-
137
-    cd /opt/zeronet
138
-    python zeronet.py --batch siteCreate 2> /opt/zeronet/mail.txt
139
-    if [ ! -f /opt/zeronet/mail.txt ]; then
140
-        echo $'Unable to create ZeroNet mail'
141
-        exit 72574
142
-    fi
143
-    mail_address=$(cat mail.txt | grep "Site address" | awk -F ':' '{print $2}')
144
-    mail_private_key=$(cat mail.txt | grep "Site private key" | awk -F ':' '{print $2}')
145
-    ZERONET_MAIL_ADDRESS=${mail_address//[[:blank:]]/}
146
-    ZERONET_MAIL_PRIVATE_KEY=${mail_private_key//[[:blank:]]/}
147
-
148
-    if [ ${#ZERONET_MAIL_ADDRESS} -lt 20 ]; then
149
-        echo $"Address:    $ZERONET_MAIL_ADDRESS"
150
-        echo $"Public key: $ZERONET_MAIL_PRIVATE_KEY"
151
-        echo $'Unable to create zeronet mail address'
152
-        exit 7358
153
-    fi
154
-
155
-    if [ ${#ZERONET_MAIL_PRIVATE_KEY} -lt 20 ]; then
156
-        echo $"Address:    $ZERONET_MAIL_ADDRESS"
157
-        echo $"Public key: $ZERONET_MAIL_PRIVATE_KEY"
158
-        echo $'Unable to create zeronet mail private key'
159
-        exit 1639
160
-    fi
161
-
162
-    if [ ! -d "/opt/zeronet/data/$ZERONET_MAIL_ADDRESS" ]; then
163
-        echo $"Unable to find site directory: /opt/zeronet/data/$ZERONET_MAIL_ADDRESS"
164
-        exit 7638
165
-    fi
166
-
167
-    echo $"ZeroNet Mail address:     $ZERONET_MAIL_ADDRESS"
168
-    echo $"ZeroNet Mail private key: $ZERONET_MAIL_PRIVATE_KEY"
169
-    cp -r /opt/zeronet/ZeroMail/* /opt/zeronet/data/$ZERONET_MAIL_ADDRESS
170
-
171
-    if [ ! -d /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data ]; then
172
-        mkdir /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data
173
-    fi
174
-    cp /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data-default/data.json /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data
175
-    sed -i "s/MyZeroMail/$ZERONET_DEFAULT_MAIL_TITLE/g" /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data/data.json
176
-    sed -i "s/My ZeroMail./$ZERONET_DEFAULT_MAIL_TAGLINE/g" /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data/data.json
177
-    sed -i "s/ZeroMail Demo/$ZERONET_DEFAULT_MAIL_TITLE/g" /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/index.html
178
-    sed -i "s|<h3 class=\"description\">.*|<h3 class=\"description\">$ZERONET_DEFAULT_MAIL_TAGLINE</h3>|g" /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/index.html
179
-    sed -i "s/Mailging platform Demo/Mailging platform/g" /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/content.json
180
-    python zeronet.py siteSign $ZERONET_MAIL_ADDRESS $ZERONET_MAIL_PRIVATE_KEY
181
-
182
-    # Add an avahi service
183
-    echo '<?xml version="1.0" standalone="no"?><!--*-nxml-*-->' > /tmp/zeronet-mail.service
184
-    echo '<!DOCTYPE service-group SYSTEM "avahi-service.dtd">' >> /tmp/zeronet-mail.service
185
-    echo '<service-group>' >> /tmp/zeronet-mail.service
186
-    echo '  <name replace-wildcards="yes">%h ZeroNet Mail</name>' >> /tmp/zeronet-mail.service
187
-    echo '  <service>' >> /tmp/zeronet-mail.service
188
-    echo '    <type>_zeronet._udp</type>' >> /tmp/zeronet-mail.service
189
-    echo "    <port>$ZERONET_PORT</port>" >> /tmp/zeronet-mail.service
190
-    echo "    <txt-record>$ZERONET_URL/$ZERONET_MAIL_ADDRESS</txt-record>" >> /tmp/zeronet-mail.service
191
-    echo '  </service>' >> /tmp/zeronet-mail.service
192
-    echo '</service-group>' >> /tmp/zeronet-mail.service
193
-    cp /tmp/zeronet-mail.service /etc/avahi/services/zeronet-mail.service
194
-
195
-    if [ ! -d /home/$MY_USERNAME/.config/zeronet ]; then
196
-        mkdir -p /home/$MY_USERNAME/.config/zeronet
197
-        chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.config
198
-    fi
199
-    echo "$ZERONET_URL/$ZERONET_MAIL_ADDRESS" > /home/$MY_USERNAME/.config/zeronet/mymail
200
-
201
-    sed -i "s|ZeroNet Mail address.*|ZeroNet Mail address: $ZERONET_MAIL_ADDRESS|g" /home/$MY_USERNAME/README
202
-    sed -i "s|ZeroNet Mail private key.*|ZeroNet Mail private key: $ZERONET_MAIL_PRIVATE_KEY|g" /home/$MY_USERNAME/README
140
+	echo $'Updating ZeroNet Mail' >> $INSTALL_LOG
141
+	ZERONET_DEFAULT_MAIL_TITLE="${MY_USERNAME}'s Mail"
142
+
143
+	cd /opt/zeronet
144
+	python zeronet.py --batch siteCreate 2> /opt/zeronet/mail.txt
145
+	if [ ! -f /opt/zeronet/mail.txt ]; then
146
+		echo $'Unable to create ZeroNet mail' >> $INSTALL_LOG
147
+		exit 72574
148
+	fi
149
+	mail_address=$(cat mail.txt | grep "Site address" | awk -F ':' '{print $2}')
150
+	mail_private_key=$(cat mail.txt | grep "Site private key" | awk -F ':' '{print $2}')
151
+	ZERONET_MAIL_ADDRESS=${mail_address//[[:blank:]]/}
152
+	ZERONET_MAIL_PRIVATE_KEY=${mail_private_key//[[:blank:]]/}
153
+
154
+	if [ ${#ZERONET_MAIL_ADDRESS} -lt 20 ]; then
155
+		echo $"Address:    $ZERONET_MAIL_ADDRESS" >> $INSTALL_LOG
156
+		echo $"Public key: $ZERONET_MAIL_PRIVATE_KEY" >> $INSTALL_LOG
157
+		echo $'Unable to create zeronet mail address' >> $INSTALL_LOG
158
+		exit 7358
159
+	fi
160
+
161
+	if [ ${#ZERONET_MAIL_PRIVATE_KEY} -lt 20 ]; then
162
+		echo $"Address:    $ZERONET_MAIL_ADDRESS" >> $INSTALL_LOG
163
+		echo $"Public key: $ZERONET_MAIL_PRIVATE_KEY" >> $INSTALL_LOG
164
+		echo $'Unable to create zeronet mail private key' >> $INSTALL_LOG
165
+		exit 1639
166
+	fi
167
+
168
+	if [ ! -d "/opt/zeronet/data/$ZERONET_MAIL_ADDRESS" ]; then
169
+		echo $"Unable to find site directory: /opt/zeronet/data/$ZERONET_MAIL_ADDRESS" >> $INSTALL_LOG
170
+		exit 7638
171
+	fi
172
+
173
+	echo $"ZeroNet Mail address:     $ZERONET_MAIL_ADDRESS" >> $INSTALL_LOG
174
+	echo $"ZeroNet Mail private key: $ZERONET_MAIL_PRIVATE_KEY" >> $INSTALL_LOG
175
+	cp -r /opt/zeronet/ZeroMail/* /opt/zeronet/data/$ZERONET_MAIL_ADDRESS
176
+
177
+	if [ ! -d /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data ]; then
178
+		mkdir /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data
179
+	fi
180
+	cp /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data-default/data.json /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data
181
+	sed -i "s/MyZeroMail/$ZERONET_DEFAULT_MAIL_TITLE/g" /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data/data.json
182
+	sed -i "s/My ZeroMail./$ZERONET_DEFAULT_MAIL_TAGLINE/g" /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/data/data.json
183
+	sed -i "s/ZeroMail Demo/$ZERONET_DEFAULT_MAIL_TITLE/g" /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/index.html
184
+	sed -i "s|<h3 class=\"description\">.*|<h3 class=\"description\">$ZERONET_DEFAULT_MAIL_TAGLINE</h3>|g" /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/index.html
185
+	sed -i "s/Mailging platform Demo/Mailging platform/g" /opt/zeronet/data/$ZERONET_MAIL_ADDRESS/content.json
186
+	python zeronet.py siteSign $ZERONET_MAIL_ADDRESS $ZERONET_MAIL_PRIVATE_KEY
187
+
188
+	# Add an avahi service
189
+	echo '<?xml version="1.0" standalone="no"?><!--*-nxml-*-->' > /tmp/zeronet-mail.service
190
+	echo '<!DOCTYPE service-group SYSTEM "avahi-service.dtd">' >> /tmp/zeronet-mail.service
191
+	echo '<service-group>' >> /tmp/zeronet-mail.service
192
+	echo '  <name replace-wildcards="yes">%h ZeroNet Mail</name>' >> /tmp/zeronet-mail.service
193
+	echo '  <service>' >> /tmp/zeronet-mail.service
194
+	echo '    <type>_zeronet._udp</type>' >> /tmp/zeronet-mail.service
195
+	echo "    <port>$ZERONET_PORT</port>" >> /tmp/zeronet-mail.service
196
+	echo "    <txt-record>$ZERONET_URL/$ZERONET_MAIL_ADDRESS</txt-record>" >> /tmp/zeronet-mail.service
197
+	echo '  </service>' >> /tmp/zeronet-mail.service
198
+	echo '</service-group>' >> /tmp/zeronet-mail.service
199
+	cp /tmp/zeronet-mail.service /etc/avahi/services/zeronet-mail.service
200
+
201
+	if [ ! -d /home/$MY_USERNAME/.config/zeronet ]; then
202
+		mkdir -p /home/$MY_USERNAME/.config/zeronet
203
+		chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.config
204
+	fi
205
+	echo "$ZERONET_URL/$ZERONET_MAIL_ADDRESS" > /home/$MY_USERNAME/.config/zeronet/mymail
206
+
207
+	sed -i "s|ZeroNet Mail address.*|ZeroNet Mail address: $ZERONET_MAIL_ADDRESS|g" /home/$MY_USERNAME/README
208
+	sed -i "s|ZeroNet Mail private key.*|ZeroNet Mail private key: $ZERONET_MAIL_PRIVATE_KEY|g" /home/$MY_USERNAME/README
209
+
210
+	echo $'Update of ZeroNet Mail completed' >> $INSTALL_LOG
203 211
 }
204 212
 
205 213
 function configure_zeronet_forum {
206
-    echo $'Updating ZeroNet Forum'
207
-    ZERONET_DEFAULT_FORUM_TITLE="${MY_USERNAME}'s Forum"
208
-
209
-    cd /opt/zeronet
210
-    python zeronet.py --batch siteCreate 2> /opt/zeronet/forum.txt
211
-    if [ ! -f /opt/zeronet/forum.txt ]; then
212
-        echo $'Unable to create ZeroNet forum'
213
-        exit 47962
214
-    fi
215
-    forum_address=$(cat forum.txt | grep "Site address" | awk -F ':' '{print $2}')
216
-    forum_private_key=$(cat forum.txt | grep "Site private key" | awk -F ':' '{print $2}')
217
-    ZERONET_FORUM_ADDRESS=${forum_address//[[:blank:]]/}
218
-    ZERONET_FORUM_PRIVATE_KEY=${forum_private_key//[[:blank:]]/}
219
-
220
-    if [ ${#ZERONET_FORUM_ADDRESS} -lt 20 ]; then
221
-        echo $"Address:    $ZERONET_FORUM_ADDRESS"
222
-        echo $"Public key: $ZERONET_FORUM_PRIVATE_KEY"
223
-        echo $'Unable to create zeronet forum address'
224
-        exit 76352
225
-    fi
226
-
227
-    if [ ${#ZERONET_FORUM_PRIVATE_KEY} -lt 20 ]; then
228
-        echo $"Address:    $ZERONET_FORUM_ADDRESS"
229
-        echo $"Public key: $ZERONET_FORUM_PRIVATE_KEY"
230
-        echo $'Unable to create zeronet forum private key'
231
-        exit 87356
232
-    fi
233
-
234
-    if [ ! -d "/opt/zeronet/data/$ZERONET_FORUM_ADDRESS" ]; then
235
-        echo $"Unable to find site directory: /opt/zeronet/data/$ZERONET_FORUM_ADDRESS"
236
-        exit 7638
237
-    fi
238
-
239
-    echo $"Forum address:     $ZERONET_FORUM_ADDRESS"
240
-    echo $"Forum private key: $ZERONET_FORUM_PRIVATE_KEY"
241
-    cp -r /opt/zeronet/ZeroTalk/* /opt/zeronet/data/$ZERONET_FORUM_ADDRESS
242
-    sed -i "s/ZeroBoard/$ZERONET_DEFAULT_FORUM_TITLE/g" /opt/zeronet/data/$ZERONET_FORUM_ADDRESS/index.html
243
-    sed -i "s/ZeroTalk/$ZERONET_DEFAULT_FORUM_TITLE/g" /opt/zeronet/data/$ZERONET_FORUM_ADDRESS/index.html
244
-    sed -i "s|Demo for dynamic, decentralized content publishing.|$ZERONET_DEFAULT_FORUM_TAGLINE|g" /opt/zeronet/data/$ZERONET_FORUM_ADDRESS/index.html
245
-    sed -i 's/Messaging Board Demo/Messaging Board/g' /opt/zeronet/data/$ZERONET_FORUM_ADDRESS/content.json
246
-    sed -i "s/ZeroBoard/$ZERONET_DEFAULT_FORUM_TITLE/g" /opt/zeronet/data/$ZERONET_FORUM_ADDRESS/content.json
247
-    python zeronet.py siteSign $ZERONET_FORUM_ADDRESS $ZERONET_FORUM_PRIVATE_KEY --inner_path data/users/content.json
248
-
249
-    # Add an avahi service
250
-    echo '<?xml version="1.0" standalone="no"?><!--*-nxml-*-->' > /tmp/zeronet-forum.service
251
-    echo '<!DOCTYPE service-group SYSTEM "avahi-service.dtd">' >> /tmp/zeronet-forum.service
252
-    echo '<service-group>' >> /tmp/zeronet-forum.service
253
-    echo '  <name replace-wildcards="yes">%h ZeroNet Forum</name>' >> /tmp/zeronet-forum.service
254
-    echo '  <service>' >> /tmp/zeronet-forum.service
255
-    echo '    <type>_zeronet._udp</type>' >> /tmp/zeronet-forum.service
256
-    echo "    <port>$ZERONET_PORT</port>" >> /tmp/zeronet-forum.service
257
-    echo "    <txt-record>$ZERONET_URL/$ZERONET_FORUM_ADDRESS</txt-record>" >> /tmp/zeronet-forum.service
258
-    echo '  </service>' >> /tmp/zeronet-forum.service
259
-    echo '</service-group>' >> /tmp/zeronet-forum.service
260
-    sudo cp /tmp/zeronet-forum.service /etc/avahi/services/zeronet-forum.service
261
-
262
-    if [ ! -d /home/$MY_USERNAME/.config/zeronet ]; then
263
-        mkdir -p /home/$MY_USERNAME/.config/zeronet
264
-        chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.config
265
-    fi
266
-    echo "$ZERONET_URL/$ZERONET_FORUM_ADDRESS" > /home/$MY_USERNAME/.config/zeronet/myforum
267
-
268
-    sed -i "s|ZeroNet Forum address.*|ZeroNet Forum address: $ZERONET_FORUM_ADDRESS|g" /home/$MY_USERNAME/README
269
-    sed -i "s|ZeroNet Forum private key.*|ZeroNet Forum private key: $ZERONET_FORUM_PRIVATE_KEY|g" /home/$MY_USERNAME/README
214
+	echo $'Updating ZeroNet Forum' >> $INSTALL_LOG
215
+	ZERONET_DEFAULT_FORUM_TITLE="${MY_USERNAME}'s Forum"
216
+
217
+	cd /opt/zeronet
218
+	python zeronet.py --batch siteCreate 2> /opt/zeronet/forum.txt
219
+	if [ ! -f /opt/zeronet/forum.txt ]; then
220
+		echo $'Unable to create ZeroNet forum' >> $INSTALL_LOG
221
+		exit 47962
222
+	fi
223
+	forum_address=$(cat forum.txt | grep "Site address" | awk -F ':' '{print $2}')
224
+	forum_private_key=$(cat forum.txt | grep "Site private key" | awk -F ':' '{print $2}')
225
+	ZERONET_FORUM_ADDRESS=${forum_address//[[:blank:]]/}
226
+	ZERONET_FORUM_PRIVATE_KEY=${forum_private_key//[[:blank:]]/}
227
+
228
+	if [ ${#ZERONET_FORUM_ADDRESS} -lt 20 ]; then
229
+		echo $"Address:    $ZERONET_FORUM_ADDRESS" >> $INSTALL_LOG
230
+		echo $"Public key: $ZERONET_FORUM_PRIVATE_KEY" >> $INSTALL_LOG
231
+		echo $'Unable to create zeronet forum address' >> $INSTALL_LOG
232
+		exit 76352
233
+	fi
234
+
235
+	if [ ${#ZERONET_FORUM_PRIVATE_KEY} -lt 20 ]; then
236
+		echo $"Address:    $ZERONET_FORUM_ADDRESS" >> $INSTALL_LOG
237
+		echo $"Public key: $ZERONET_FORUM_PRIVATE_KEY" >> $INSTALL_LOG
238
+		echo $'Unable to create zeronet forum private key' >> $INSTALL_LOG
239
+		exit 87356
240
+	fi
241
+
242
+	if [ ! -d "/opt/zeronet/data/$ZERONET_FORUM_ADDRESS" ]; then
243
+		echo $"Unable to find site directory: /opt/zeronet/data/$ZERONET_FORUM_ADDRESS" >> $INSTALL_LOG
244
+		exit 7638
245
+	fi
246
+
247
+	echo $"Forum address:     $ZERONET_FORUM_ADDRESS"
248
+	echo $"Forum private key: $ZERONET_FORUM_PRIVATE_KEY"
249
+	cp -r /opt/zeronet/ZeroTalk/* /opt/zeronet/data/$ZERONET_FORUM_ADDRESS
250
+	sed -i "s/ZeroBoard/$ZERONET_DEFAULT_FORUM_TITLE/g" /opt/zeronet/data/$ZERONET_FORUM_ADDRESS/index.html
251
+	sed -i "s/ZeroTalk/$ZERONET_DEFAULT_FORUM_TITLE/g" /opt/zeronet/data/$ZERONET_FORUM_ADDRESS/index.html
252
+	sed -i "s|Demo for dynamic, decentralized content publishing.|$ZERONET_DEFAULT_FORUM_TAGLINE|g" /opt/zeronet/data/$ZERONET_FORUM_ADDRESS/index.html
253
+	sed -i 's/Messaging Board Demo/Messaging Board/g' /opt/zeronet/data/$ZERONET_FORUM_ADDRESS/content.json
254
+	sed -i "s/ZeroBoard/$ZERONET_DEFAULT_FORUM_TITLE/g" /opt/zeronet/data/$ZERONET_FORUM_ADDRESS/content.json
255
+	python zeronet.py siteSign $ZERONET_FORUM_ADDRESS $ZERONET_FORUM_PRIVATE_KEY --inner_path data/users/content.json
256
+
257
+	# Add an avahi service
258
+	echo '<?xml version="1.0" standalone="no"?><!--*-nxml-*-->' > /tmp/zeronet-forum.service
259
+	echo '<!DOCTYPE service-group SYSTEM "avahi-service.dtd">' >> /tmp/zeronet-forum.service
260
+	echo '<service-group>' >> /tmp/zeronet-forum.service
261
+	echo '  <name replace-wildcards="yes">%h ZeroNet Forum</name>' >> /tmp/zeronet-forum.service
262
+	echo '  <service>' >> /tmp/zeronet-forum.service
263
+	echo '    <type>_zeronet._udp</type>' >> /tmp/zeronet-forum.service
264
+	echo "    <port>$ZERONET_PORT</port>" >> /tmp/zeronet-forum.service
265
+	echo "    <txt-record>$ZERONET_URL/$ZERONET_FORUM_ADDRESS</txt-record>" >> /tmp/zeronet-forum.service
266
+	echo '  </service>' >> /tmp/zeronet-forum.service
267
+	echo '</service-group>' >> /tmp/zeronet-forum.service
268
+	sudo cp /tmp/zeronet-forum.service /etc/avahi/services/zeronet-forum.service
269
+
270
+	if [ ! -d /home/$MY_USERNAME/.config/zeronet ]; then
271
+		mkdir -p /home/$MY_USERNAME/.config/zeronet
272
+		chown -R $MY_USERNAME:$MY_USERNAME /home/$MY_USERNAME/.config
273
+	fi
274
+	echo "$ZERONET_URL/$ZERONET_FORUM_ADDRESS" > /home/$MY_USERNAME/.config/zeronet/myforum
275
+
276
+	sed -i "s|ZeroNet Forum address.*|ZeroNet Forum address: $ZERONET_FORUM_ADDRESS|g" /home/$MY_USERNAME/README
277
+	sed -i "s|ZeroNet Forum private key.*|ZeroNet Forum private key: $ZERONET_FORUM_PRIVATE_KEY|g" /home/$MY_USERNAME/README
278
+
279
+	echo $'Update of ZeroNet Forum completed' >> $INSTALL_LOG
270 280
 }
271 281
 
272
-function configure_tox {
273
-    if [ -f /usr/local/bin/${PROJECT_NAME} ]; then
274
-        TOXIC_FILE=$(cat /usr/local/bin/${PROJECT_NAME} | grep "TOXIC_FILE=" | head -n 1 | awk -F '=' '{print $2}')
275
-    else
276
-        TOXIC_FILE=$(cat /usr/bin/${PROJECT_NAME} | grep "TOXIC_FILE=" | head -n 1 | awk -F '=' '{print $2}')       
277
-    fi 
278
-
279
-    echo $'Regenerating Tox bootstrap node keys'
280
-    systemctl stop tox-bootstrapd.service
281
-    if [ -f /var/lib/tox-bootstrapd/keys ]; then
282
-        rm /var/lib/tox-bootstrapd/keys
283
-    fi
284
-    systemctl start tox-bootstrapd.service
285
-    TOX_BOOTSTRAP_ID_FILE=/var/lib/tox-bootstrapd/pubkey.txt
286
-    TOX_PUBLIC_KEY=$(cat /var/log/syslog | grep tox | grep "Public Key" | awk -F ' ' '{print $8}' | tail -1)
287
-    if [ ${#TOX_PUBLIC_KEY} -lt 30 ]; then
288
-        echo $'WARNING: Could not obtain the tox node public key'
289
-        exit 46362
290
-    fi
291
-
292
-    # save the public key for later reference
293
-    echo "$TOX_PUBLIC_KEY" > $TOX_BOOTSTRAP_ID_FILE
294
-
295
-    echo $'Resetting toxic client'
296
-    if [ -d /home/$MY_USERNAME/.config/tox ]; then
297
-        rm -rf /home/$MY_USERNAME/.config/tox
298
-        su -c "echo 'n
299
-/nick P$PEER_ID
300
-/exit
301
-' | $TOXIC_FILE -d" - $MY_USERNAME
302
-    fi
282
+function compile_toxcore {
283
+	echo $'Compiling toxcore' >> $INSTALL_LOG
284
+	if [ ! -d $INSTALL_DIR/toxcore ]; then
285
+		echo $"$INSTALL_DIR/toxcore not found" >> $INSTALL_LOG
286
+		return
287
+	fi
288
+	cd $INSTALL_DIR/toxcore
289
+	autoreconf -i
290
+	./configure --enable-daemon --disable-av
291
+	if [ ! "$?" = "0" ]; then
292
+		echo $'Unable to configure toxcore' >> $INSTALL_LOG
293
+		return
294
+	fi
295
+	chroot "$rootdir" make
296
+	if [ ! "$?" = "0" ]; then
297
+		echo $'Unable to make toxcore' >> $INSTALL_LOG
298
+		return
299
+	fi
300
+	make install
301
+	cp /usr/local/lib/libtoxcore* /usr/lib/
302
+
303
+	if [ ! -f $rootdir/usr/local/bin/tox-bootstrapd ]; then
304
+		echo $"File not found /usr/local/bin/tox-bootstrapd" >> $INSTALL_LOG
305
+		return
306
+	fi
307
+
308
+	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
309
+	chmod 700 /var/lib/tox-bootstrapd
310
+	if [ ! -f $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf ]; then
311
+		echo $"File not found $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf" >> $INSTALL_LOG
312
+	fi
313
+	# remove Maildir
314
+	if [ -d /var/lib/tox-bootstrapd/Maildir ]; then
315
+		rm -rf /var/lib/tox-bootstrapd/Maildir
316
+	fi
317
+
318
+	# create configuration file
319
+	TOX_BOOTSTRAP_CONFIG=/etc/tox-bootstrapd.conf
320
+	echo "port = $TOX_PORT" > $TOX_BOOTSTRAP_CONFIG
321
+	echo 'keys_file_path = "/var/lib/tox-bootstrapd/keys"' >> $TOX_BOOTSTRAP_CONFIG
322
+	echo 'pid_file_path = "/var/run/tox-bootstrapd/tox-bootstrapd.pid"' >> $TOX_BOOTSTRAP_CONFIG
323
+	echo 'enable_ipv6 = true' >> $TOX_BOOTSTRAP_CONFIG
324
+	echo 'enable_ipv4_fallback = true' >> $TOX_BOOTSTRAP_CONFIG
325
+	echo 'enable_lan_discovery = true' >> $TOX_BOOTSTRAP_CONFIG
326
+	echo 'enable_tcp_relay = true' >> $TOX_BOOTSTRAP_CONFIG
327
+	echo "tcp_relay_ports = [443, 3389, $TOX_PORT]" >> $TOX_BOOTSTRAP_CONFIG
328
+	echo 'enable_motd = true' >> $TOX_BOOTSTRAP_CONFIG
329
+	echo 'motd = "tox-bootstrapd"' >> $TOX_BOOTSTRAP_CONFIG
330
+
331
+	if [ $TOX_NODES ]; then
332
+		echo 'bootstrap_nodes = (' >> $TOX_BOOTSTRAP_CONFIG
333
+		toxcount=0
334
+		while [ "x${TOX_NODES[toxcount]}" != "x" ]
335
+		do
336
+			toxval_ipv4=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $1}')
337
+			toxval_ipv6=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $2}')
338
+			toxval_port=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $3}')
339
+			toxval_pubkey=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $4}')
340
+			toxval_maintainer=$(echo $TOX_NODES[toxcount] | awk -F ',' '{print $5}')
341
+			echo "{ // $toxval_maintainer" >> $TOX_BOOTSTRAP_CONFIG
342
+			if [[ $toxval_ipv6 != 'NONE' ]]; then
343
+				echo "  address = \"$toxval_ipv6\"" >> $TOX_BOOTSTRAP_CONFIG
344
+			else
345
+				echo "  address = \"$toxval_ipv4\"" >> $TOX_BOOTSTRAP_CONFIG
346
+			fi
347
+			echo "  port = $toxval_port" >> $TOX_BOOTSTRAP_CONFIG
348
+			echo "  public_key = \"$toxval_pubkey\"" >> $TOX_BOOTSTRAP_CONFIG
349
+			toxcount=$(( $toxcount + 1 ))
350
+			if [ "x${TOX_NODES[toxcount]}" != "x" ]; then
351
+				echo "}," >> $TOX_BOOTSTRAP_CONFIG
352
+			else
353
+				echo "}" >> $TOX_BOOTSTRAP_CONFIG
354
+			fi
355
+		done
356
+		echo ')' >> $TOX_BOOTSTRAP_CONFIG
357
+	fi
358
+
359
+	if [ ! -f $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.service ]; then
360
+		echo $"File not found $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.service" >> $INSTALL_LOG
361
+		return
362
+	fi
363
+	cp $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.service /etc/systemd/system/
364
+	sed -i 's|ExecStart=.*|ExecStart=/usr/local/bin/tox-bootstrapd --config /etc/tox-bootstrapd.conf|g' /etc/systemd/system/tox-bootstrapd.service
365
+
366
+	systemctl daemon-reload
367
+	systemctl enable tox-bootstrapd.service
368
+	echo $'toxcore compile completed' >> $INSTALL_LOG
369
+}
370
+
371
+function compile_tox_client {
372
+	echo $'Compiling tox client' >> $INSTALL_LOG
373
+
374
+	if [ -f /usr/local/bin/${PROJECT_NAME} ]; then
375
+		TOXIC_FILE=$(cat /usr/local/bin/${PROJECT_NAME} | grep "TOXIC_FILE=" | head -n 1 | awk -F '=' '{print $2}')
376
+	else
377
+		TOXIC_FILE=$(cat /usr/bin/${PROJECT_NAME} | grep "TOXIC_FILE=" | head -n 1 | awk -F '=' '{print $2}')
378
+	fi
379
+
380
+	if [ ! -d $INSTALL_DIR/toxic ]; then
381
+		echo $"$INSTALL_DIR/toxic not found" >> $INSTALL_LOG
382
+		return
383
+	fi
384
+
385
+	cd $INSTALL_DIR/toxic
386
+	make
387
+	if [ ! -f $INSTALL_DIR/toxic/build/toxic ]; then
388
+		echo $'Unable to make tox client' >> $INSTALL_LOG
389
+		exit 74872
390
+	fi
391
+	make install
392
+	if [ ! -f $TOXIC_FILE ]; then
393
+		echo $"Tox client was not installed to $TOXIC_FILE" >> $INSTALL_LOG
394
+		exit 63278
395
+	fi
396
+
397
+	echo $'toxic client compile completed' >> $INSTALL_LOG
398
+}
399
+
400
+function configure_toxcore {
401
+	echo $'Configuring toxcore' >> $INSTALL_LOG
402
+
403
+	if [ -f /usr/local/bin/${PROJECT_NAME} ]; then
404
+		TOXIC_FILE=$(cat /usr/local/bin/${PROJECT_NAME} | grep "TOXIC_FILE=" | head -n 1 | awk -F '=' '{print $2}')
405
+	else
406
+		TOXIC_FILE=$(cat /usr/bin/${PROJECT_NAME} | grep "TOXIC_FILE=" | head -n 1 | awk -F '=' '{print $2}')
407
+	fi
408
+
409
+	echo $'Regenerating Tox bootstrap node keys' >> $INSTALL_LOG
410
+	systemctl stop tox-bootstrapd.service
411
+	if [ -f /var/lib/tox-bootstrapd/keys ]; then
412
+		rm /var/lib/tox-bootstrapd/keys
413
+	fi
414
+	systemctl start tox-bootstrapd.service
415
+	TOX_BOOTSTRAP_ID_FILE=/var/lib/tox-bootstrapd/pubkey.txt
416
+	TOX_PUBLIC_KEY=$(cat /var/log/syslog | grep tox | grep "Public Key" | awk -F ' ' '{print $8}' | tail -1)
417
+	if [ ${#TOX_PUBLIC_KEY} -lt 30 ]; then
418
+		echo $'WARNING: Could not obtain the tox node public key' >> $INSTALL_LOG
419
+		exit 46362
420
+	fi
421
+
422
+	# save the public key for later reference
423
+	echo "$TOX_PUBLIC_KEY" > $TOX_BOOTSTRAP_ID_FILE
424
+	echo $'Configured toxcore' >> $INSTALL_LOG
425
+
426
+	echo $'Clearing toxic client settings' >> $INSTALL_LOG
427
+	if [ -d /home/$MY_USERNAME/.config/tox ]; then
428
+		rm -rf /home/$MY_USERNAME/.config/tox
429
+	fi
430
+	echo $'toxic client configured' >> $INSTALL_LOG
303 431
 }
304 432
 
305 433
 if [ -f /root/.initial_mesh_setup ]; then
306
-    if [ $1 ]; then
307
-        MY_USERNAME=$1
308
-    fi
309
-
310
-    # sleep in order to allow other daemons to start up
311
-    sleep 15
312
-
313
-    change_avahi_name
314
-    regenerate_ssh_host_keys
315
-    configure_zeronet_blog
316
-    configure_zeronet_mail
317
-    configure_zeronet_forum
318
-    configure_tox
319
-    configure_zeronet
320
-
321
-    rm /root/.initial_mesh_setup
322
-    systemctl disable mesh-setup.service
323
-    touch /root/.mesh_setup_completed
324
-    reboot
434
+	if [ $1 ]; then
435
+		MY_USERNAME=$1
436
+	fi
437
+
438
+	# sleep in order to allow other daemons to start up
439
+	sleep 15
440
+
441
+	# clear the install log
442
+	if [ -f $INSTALL_LOG ]; then
443
+		rm $INSTALL_LOG
444
+	fi
445
+
446
+	echo $'Beginning mesh node setup' >> $INSTALL_LOG
447
+	change_avahi_name
448
+	regenerate_ssh_host_keys
449
+	configure_zeronet_blog
450
+	configure_zeronet_mail
451
+	configure_zeronet_forum
452
+	compile_toxcore
453
+	compile_tox_client
454
+	configure_toxcore
455
+	configure_zeronet
456
+
457
+	rm /root/.initial_mesh_setup
458
+	systemctl disable mesh-setup.service
459
+	touch /root/.mesh_setup_completed
460
+	echo $'Mesh node setup complete. Rebooting...' >> $INSTALL_LOG
461
+	reboot
325 462
 fi
326 463
 
327 464
 exit 0