|
@@ -8,7 +8,8 @@
|
8
|
8
|
#
|
9
|
9
|
# Freedom in the Cloud
|
10
|
10
|
#
|
11
|
|
-# Distributed storage
|
|
11
|
+# Distributed storage system introducer
|
|
12
|
+# http://tahoe-lafs.readthedocs.io/en/latest/anonymity-configuration.html
|
12
|
13
|
#
|
13
|
14
|
# License
|
14
|
15
|
# =======
|
|
@@ -37,86 +38,63 @@ TAHOELAFS_REPO="https://github.com/tahoe-lafs/tahoe-lafs"
|
37
|
38
|
TAHOELAFS_COMMIT='bb782b0331a60de438136a593bba18338d8d866b'
|
38
|
39
|
|
39
|
40
|
TAHOELAFS_PORT=50213
|
40
|
|
-TAHOELAFS_WEB_PORT=3456
|
41
|
|
-
|
42
|
|
-# The amount of reserved space for applications other than tahoelafs
|
43
|
|
-TAHOELAFS_STORAGE_SPACE=3G
|
|
41
|
+TAHOELAFS_ONION_PORT=8096
|
44
|
42
|
|
45
|
43
|
TAHOELAFS_SHARED_DIR='Shared'
|
46
|
44
|
TAHOE_COMMAND="cd /var/lib/tahoelafs && venv/bin/tahoe"
|
47
|
45
|
|
48
|
|
-tahoelafs_variables=(TAHOELAFS_REPO
|
49
|
|
- TAHOELAFS_COMMIT
|
|
46
|
+tahoelafs_variables=(ONION_ONLY
|
|
47
|
+ TAHOELAFS_REPO
|
50
|
48
|
TAHOELAFS_PORT)
|
51
|
49
|
|
|
50
|
+function tahoelafs_setup_config {
|
|
51
|
+ config_file=$1
|
|
52
|
+
|
|
53
|
+ if ! grep -q "[node]" $config_file; then
|
|
54
|
+ echo '' >> $config_file
|
|
55
|
+ echo '[node]' >> $config_file
|
|
56
|
+ fi
|
|
57
|
+
|
|
58
|
+ if ! grep -q "[connections]" $config_file; then
|
|
59
|
+ echo '' >> $config_file
|
|
60
|
+ echo '[connections]' >> $config_file
|
|
61
|
+ fi
|
|
62
|
+
|
|
63
|
+ if ! grep -q "reveal-IP-address" $config_file; then
|
|
64
|
+ sed -i '/[node]/a reveal-IP-address = False' $config_file
|
|
65
|
+ else
|
|
66
|
+ sed -i 's|reveal-IP-address.*|reveal-IP-address = False|g' >> $config_file
|
|
67
|
+ fi
|
|
68
|
+
|
|
69
|
+ if ! grep -q "tcp =" $config_file; then
|
|
70
|
+ sed -i '/[connections]/a tcp = tor' $config_file
|
|
71
|
+ else
|
|
72
|
+ sed -i 's|tcp =.*|tcp = tor|g' >> $config_file
|
|
73
|
+ fi
|
|
74
|
+
|
|
75
|
+ if ! grep -q "tub.location =" $config_file; then
|
|
76
|
+ sed -i '/[node]/a tub.location = disabled' >> $config_file
|
|
77
|
+ fi
|
|
78
|
+ if ! grep -q "tub.port =" $config_file; then
|
|
79
|
+ sed -i "/[node]/a tub.port = tcp:${TAHOELAFS_ONION_PORT}:interface=127.0.0.1" >> $config_file
|
|
80
|
+ fi
|
|
81
|
+ sed -i "s|tub.port.*|tub.port = tcp:${TAHOELAFS_ONION_PORT}:interface=127.0.0.1|g" >> $config_file
|
|
82
|
+ sed -i "s|tub.location.*|tub.location = tor:${TAHOELAFS_ONION_HOSTNAME}:${TAHOELAFS_PORT}|g" >> $config_file
|
|
83
|
+
|
|
84
|
+ sed -i "s|nickname =.*|nickname = $HOSTNAME|g" $config_file
|
|
85
|
+
|
|
86
|
+ if ! grep -q "[storage]" $config_file; then
|
|
87
|
+ echo '' >> $config_file
|
|
88
|
+ echo '[storage]' >> $config_file
|
|
89
|
+ echo 'enabled = false' >> $config_file
|
|
90
|
+ fi
|
|
91
|
+}
|
|
92
|
+
|
52
|
93
|
function install_interactive_tahoelafs {
|
53
|
94
|
echo -n ''
|
54
|
95
|
APP_INSTALLED=1
|
55
|
96
|
}
|
56
|
97
|
|
57
|
|
-function reconfigure_tahoelafs {
|
58
|
|
- for d in /home/*/ ; do
|
59
|
|
- USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
|
60
|
|
- if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
|
61
|
|
- if [ -d /home/$USERNAME/.tahoe ]; then
|
62
|
|
- su -c "$TAHOE_COMMAND stop" - $USERNAME
|
63
|
|
- rm -rf /home/$USERNAME/.tahoe
|
64
|
|
- fi
|
65
|
|
-
|
66
|
|
- if [ -d /home/$USERNAME/${TAHOELAFS_SHARED_DIR} ]; then
|
67
|
|
- rm -rf /home/$USERNAME/${TAHOELAFS_SHARED_DIR}
|
68
|
|
- fi
|
69
|
|
-
|
70
|
|
- su -c "cd $TAHOE_COMMAND create-node" - $USERNAME
|
71
|
|
-
|
72
|
|
- if [ ! -d /home/$USERNAME/.tahoe ]; then
|
73
|
|
- exit 63722
|
74
|
|
- fi
|
75
|
|
-
|
76
|
|
- # create a shared directory
|
77
|
|
- if [ ! -d /home/$USERNAME/${TAHOELAFS_SHARED_DIR} ]; then
|
78
|
|
- mkdir /home/$USERNAME/${TAHOELAFS_SHARED_DIR}
|
79
|
|
- chown -R $USERNAME:$USERNAME /home/$USERNAME/${TAHOELAFS_SHARED_DIR}
|
80
|
|
- fi
|
81
|
|
-
|
82
|
|
- TAHOELAFS_CONFIG=/home/$USERNAME/.tahoe/tahoe.cfg
|
83
|
|
- echo '[node]' > $TAHOELAFS_CONFIG
|
84
|
|
- echo "nickname = $USERNAME" >> $TAHOELAFS_CONFIG
|
85
|
|
- echo "web.port = tcp:$TAHOELAFS_WEB_PORT:interface=127.0.0.1" >> $TAHOELAFS_CONFIG
|
86
|
|
- echo 'web.static = public_html' >> $TAHOELAFS_CONFIG
|
87
|
|
- echo "tub.port = tcp:$TAHOELAFS_PORT" >> $TAHOELAFS_CONFIG
|
88
|
|
- echo "tub.location = tcp:$HOSTNAME:$TAHOELAFS_PORT" >> $TAHOELAFS_CONFIG
|
89
|
|
- echo 'timeout.keepalive = 240' >> $TAHOELAFS_CONFIG
|
90
|
|
- echo 'timeout.disconnect = 1800' >> $TAHOELAFS_CONFIG
|
91
|
|
- echo '' >> $TAHOELAFS_CONFIG
|
92
|
|
- echo '[client]' >> $TAHOELAFS_CONFIG
|
93
|
|
- echo 'introducer.furl = None' >> $TAHOELAFS_CONFIG
|
94
|
|
- echo '#helper.furl =' >> $TAHOELAFS_CONFIG
|
95
|
|
- echo '' >> $TAHOELAFS_CONFIG
|
96
|
|
- echo 'shares.needed = 1' >> $TAHOELAFS_CONFIG
|
97
|
|
- echo 'shares.happy = 1' >> $TAHOELAFS_CONFIG
|
98
|
|
- echo 'shares.total = 1' >> $TAHOELAFS_CONFIG
|
99
|
|
- echo '' >> $TAHOELAFS_CONFIG
|
100
|
|
- echo '[storage]' >> $TAHOELAFS_CONFIG
|
101
|
|
- echo 'enabled = true' >> $TAHOELAFS_CONFIG
|
102
|
|
- echo "reserved_space = $TAHOELAFS_STORAGE_SPACE" >> $TAHOELAFS_CONFIG
|
103
|
|
- echo '#expire.enabled = true' >> $TAHOELAFS_CONFIG
|
104
|
|
- echo '#expire.mode =' >> $TAHOELAFS_CONFIG
|
105
|
|
- echo '' >> $TAHOELAFS_CONFIG
|
106
|
|
- echo '[helper]' >> $TAHOELAFS_CONFIG
|
107
|
|
- echo 'enabled = false' >> $TAHOELAFS_CONFIG
|
108
|
|
- echo '' >> $TAHOELAFS_CONFIG
|
109
|
|
- echo '[magic_folder]' >> $TAHOELAFS_CONFIG
|
110
|
|
- echo 'enabled = true' >> $TAHOELAFS_CONFIG
|
111
|
|
- echo "local.directory = /home/${USERNAME}/${TAHOELAFS_SHARED_DIR}" >> $TAHOELAFS_CONFIG
|
112
|
|
- chown $USERNAME:$USERNAME $TAHOELAFS_CONFIG
|
113
|
|
-
|
114
|
|
- su -c "$TAHOE_COMMAND start" - $USERNAME
|
115
|
|
- su -c "$TAHOE_COMMAND magic-folder create $HOSTNAME" - $USERNAME
|
116
|
|
- fi
|
117
|
|
- done
|
118
|
|
-}
|
119
|
|
-
|
120
|
98
|
function upgrade_tahoelafs {
|
121
|
99
|
systemctl stop tahoelafs
|
122
|
100
|
function_check set_repo_commit
|
|
@@ -187,19 +165,12 @@ function restore_remote_tahoelafs {
|
187
|
165
|
|
188
|
166
|
function remove_tahoelafs {
|
189
|
167
|
firewall_remove ${TAHOELAFS_PORT}
|
190
|
|
-
|
191
|
|
- for d in /home/*/ ; do
|
192
|
|
- USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
|
193
|
|
- if [ -f /home/$USERNAME/.tahoe ]; then
|
194
|
|
- su -c "$TAHOE_COMMAND stop" - $USERNAME
|
195
|
|
- rm -rf /home/$USERNAME/.tahoe
|
196
|
|
- fi
|
197
|
|
- done
|
198
|
|
-
|
199
|
168
|
rm -rf /var/lib/tahoelafs
|
200
|
|
-
|
201
|
169
|
remove_completion_param install_tahoelafs
|
202
|
170
|
remove_completion_param configure_firewall_for_tahoelafs
|
|
171
|
+ function_check remove_onion_service
|
|
172
|
+ remove_onion_service tahoelafs ${TAHOELAFS_ONION_PORT}
|
|
173
|
+ deluser tahoelafs
|
203
|
174
|
}
|
204
|
175
|
|
205
|
176
|
function configure_firewall_for_tahoelafs {
|
|
@@ -210,83 +181,8 @@ function configure_firewall_for_tahoelafs {
|
210
|
181
|
mark_completed $FUNCNAME
|
211
|
182
|
}
|
212
|
183
|
|
213
|
|
-function tahoelafs_update_script {
|
214
|
|
- update_script_filename=$1
|
215
|
|
-
|
216
|
|
- echo '#!/bin/bash' > $update_script_filename
|
217
|
|
- echo 'TOX_USERNAME=$(toxid --showuser)' >> $update_script_filename
|
218
|
|
- echo 'PEERS_FILE=$(mktemp /tmp/tahoelafs-peers.XXXXXX)' >> $update_script_filename
|
219
|
|
- echo -n 'avahi-browse -atl | grep "Workstation" | ' >> $update_script_filename
|
220
|
|
- echo -n "awk -F ' ' '{print \$4}' " >> $update_script_filename
|
221
|
|
- echo '| sort -u > $PEERS_FILE' >> $update_script_filename
|
222
|
|
- echo 'if [ ! "$?" = "0" ]; then' >> $update_script_filename
|
223
|
|
- echo ' exit 1' >> $update_script_filename
|
224
|
|
- echo 'fi' >> $update_script_filename
|
225
|
|
- echo '' >> $update_script_filename
|
226
|
|
- echo 'if [ ! -f $PEERS_FILE ]; then' >> $update_script_filename
|
227
|
|
- echo ' exit 0' >> $update_script_filename
|
228
|
|
- echo 'fi' >> $update_script_filename
|
229
|
|
- echo '' >> $update_script_filename
|
230
|
|
- echo 'furl=""' >> $update_script_filename
|
231
|
|
- echo 'while IFS="" read -r line || [[ -n "$line" ]]; do' >> $update_script_filename
|
232
|
|
- echo ' if [[ $furl != "" ]]; then' >> $update_script_filename
|
233
|
|
- echo -n ' furl="$furl,$line:' >> $update_script_filename
|
234
|
|
- echo -n "$TAHOELAFS_PORT" >> $update_script_filename
|
235
|
|
- echo '"' >> $update_script_filename
|
236
|
|
- echo ' else' >> $update_script_filename
|
237
|
|
- echo -n ' furl="$line:' >> $update_script_filename
|
238
|
|
- echo -n "$TAHOELAFS_PORT" >> $update_script_filename
|
239
|
|
- echo '"' >> $update_script_filename
|
240
|
|
- echo ' fi' >> $update_script_filename
|
241
|
|
- echo 'done < "$PEERS_FILE"' >> $update_script_filename
|
242
|
|
- echo '' >> $update_script_filename
|
243
|
|
- echo 'rm $PEERS_FILE' >> $update_script_filename
|
244
|
|
- echo '' >> $update_script_filename
|
245
|
|
- echo 'for d in /home/*/ ; do' >> $update_script_filename
|
246
|
|
- echo -n ' USERNAME=$(echo "$d" | ' >> $update_script_filename
|
247
|
|
- echo "awk -F '/' '{print \$3}')'" >> $update_script_filename
|
248
|
|
- echo ' if [ -f /home/$USERNAME/.tahoe/tahoe.cfg ]; then' >> $update_script_filename
|
249
|
|
- echo ' if ! grep -q "introducer.furl = ${furl}" /home/$USERNAME/.tahoe/tahoe.cfg; then' >> $update_script_filename
|
250
|
|
- echo ' sed -i "s|introducer.furl =.*|introducer.furl = ${furl}|g" /home/$USERNAME/.tahoe/tahoe.cfg' >> $update_script_filename
|
251
|
|
- echo ' sed -i "s|nickname =.*|nickname = ${TOX_USERNAME}|g" /home/$USERNAME/.tahoe/tahoe.cfg' >> $update_script_filename
|
252
|
|
- echo ' chown $USERNAME:$USERNAME /home/$USERNAME/.tahoe/tahoe.cfg' >> $update_script_filename
|
253
|
|
- echo " su -c '$TAHOE_COMMAND restart' - \$USERNAME" >> $update_script_filename
|
254
|
|
- echo ' fi' >> $update_script_filename
|
255
|
|
- echo ' fi' >> $update_script_filename
|
256
|
|
- echo 'done' >> $update_script_filename
|
257
|
|
- echo '' >> $update_script_filename
|
258
|
|
-
|
259
|
|
- echo 'exit 0' >> $update_script_filename
|
260
|
|
- chmod +x $update_script_filename
|
261
|
|
-}
|
262
|
|
-
|
263
|
|
-function mesh_install_tahoelafs {
|
264
|
|
- chroot "$rootdir" apt-get -yq install build-essential python-pip python-dev
|
265
|
|
- chroot "$rootdir" apt-get -yq install libffi-dev libssl-dev python-virtualenv
|
266
|
|
-
|
267
|
|
- git clone $TAHOELAFS_REPO $rootdir/var/lib/tahoelafs
|
268
|
|
- cd $rootdir/var/lib/tahoelafs
|
269
|
|
- git checkout $TAHOELAFS_COMMIT -b $TAHOELAFS_COMMIT
|
270
|
|
-
|
271
|
|
- cat <<EOF > $rootdir/root/install_tahoelafs
|
272
|
|
-cd /var/lib/tahoelafs
|
273
|
|
-virtualenv venv
|
274
|
|
-venv/bin/pip install --editable .
|
275
|
|
-EOF
|
276
|
|
- chroot "$rootdir" chmod +x /root/install_tahoelafs
|
277
|
|
- chroot "$rootdir" /root/install_tahoelafs
|
278
|
|
- chroot "$rootdir" rm /root/install_tahoelafs
|
279
|
|
-
|
280
|
|
- tahoelafs_update_script $rootdir/usr/bin/update-tahoelafs
|
281
|
|
-
|
282
|
|
- if ! grep -q "update-tahoelafs" $rootdir/etc/crontab; then
|
283
|
|
- echo "*/1 * * * * root /usr/bin/update-tahoelafs 2> /dev/null" >> $rootdir/etc/crontab
|
284
|
|
- fi
|
285
|
|
-}
|
286
|
|
-
|
287
|
184
|
function install_tahoelafs {
|
288
|
185
|
if [ $INSTALLING_MESH ]; then
|
289
|
|
- mesh_install_tahoelafs
|
290
|
186
|
return
|
291
|
187
|
fi
|
292
|
188
|
|
|
@@ -319,14 +215,8 @@ function install_tahoelafs {
|
319
|
215
|
exit 62831
|
320
|
216
|
fi
|
321
|
217
|
|
322
|
|
- sed -i "s|nickname =.*|nickname = $HOSTNAME|g" $TAHOELAFS_CONFIG
|
323
|
|
-
|
324
|
|
- if ! grep -q "[storage]" $TAHOELAFS_CONFIG; then
|
325
|
|
- echo '' >> $TAHOELAFS_CONFIG
|
326
|
|
- echo '[storage]' >> $TAHOELAFS_CONFIG
|
327
|
|
- echo 'enabled = true' >> $TAHOELAFS_CONFIG
|
328
|
|
- echo "reserved_space = $TAHOELAFS_STORAGE_SPACE" >> $TAHOELAFS_CONFIG
|
329
|
|
- fi
|
|
218
|
+ TAHOELAFS_ONION_HOSTNAME=$(add_onion_service tahoelafs ${TAHOELAFS_PORT} ${TAHOELAFS_ONION_PORT})
|
|
219
|
+ tahoelafs_setup_config $TAHOELAFS_CONFIG
|
330
|
220
|
|
331
|
221
|
chown -R tahoelafs:tahoelafs /home/tahoelafs
|
332
|
222
|
|