forked from ooni/probe
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsetup-dependencies.sh
executable file
·983 lines (937 loc) · 50.9 KB
/
setup-dependencies.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
BUILD_DIR=/tmp/oonibuilding.$RANDOM
BUILD_LOG=${BUILD_DIR}.log
TMP_KEYRING=${BUILD_DIR}/tmpkeyring.gpg
DISTRO='unknown'
DISTRO_VERSION='unknown'
REPO_ROOT="$(pwd)"
# Discover our Distro release
if [ -f /etc/redhat-release ]; then
DISTRO="fedora"
# Debian/Ubuntu
elif [ -r /lib/lsb/init-functions ]; then
DISTRO_VERSION="$( lsb_release -cs )"
if [ "$( lsb_release -is )" == "Ubuntu" ]; then
DISTRO="ubuntu"
else
DISTRO="debian"
fi
fi
TOR_DEB_REPO="http://deb.torproject.org/torproject.org";
usage()
{
cat << EOF
usage: ./${SCRIPTNAME} options
OPTIONS:
-h Show this message
-y To assume yes to all queries
ONE MODE SPECIFICATION REQUIRED:
-p Privileged mode - install all dependencies system wide
-u Unprivileged mode - install most dependencies in a virtualenv
EOF
}
ASSUME_YES=0
PRIV_MODE=3
while getopts “hypu” OPTION
do
case $OPTION in
h)
usage
exit 1
;;
y)
ASSUME_YES=1
;;
u)
PRIV_MODE=0
;;
p)
PRIV_MODE=1
;;
?)
usage
exit
;;
esac
done
# make sure a privilege mode was specified
if [[ $PRIV_MODE -eq 3 ]]; then
usage
exit
fi
# make sure we are not root when in unprivileged mode
if [[ $PRIV_MODE -eq 0 ]]; then
if [[ $EUID -eq 0 ]]; then
echo "operator error: non-privilege mode must be run as non-root user with sudo privileges"
exit
fi
fi
# make sure we are root when in privileged mode
if [[ $PRIV_MODE -eq 1 ]]; then
if [[ $EUID -ne 0 ]]; then
echo "operator error: privileged-mode must be run as root"
exit
fi
fi
DO () {
if [ -z "$2" ]; then
RET=0
else
RET=$2
fi
if [ -z "$3" ]; then
CMD=$1
else
CMD=$3
fi
echo "Running: "
echo " $CMD"
$1 &>${BUILD_LOG}
if [[ "$?" -eq "$2" ]]; then
echo "SUCCESS"
else
echo "FAIL"
echo "COMBINED STDOUT/STDERR OUTPUT OF FAILED COMMAND:"
cat ${BUILD_LOG}
exit 1
fi
}
vercomp () {
# Returnned values:
# 0: version are equals
# 1: $1 is bigger than $2
# 2: $2 is bigger than $1
if [[ $1 == $2 ]]
then
return 0
fi
local IFS=.
local i ver1=($1) ver2=($2)
# fill empty fields in ver1 with zeros
for ((i=${#ver1[@]}; i<${#ver2[@]}; i++))
do
ver1[i]=0
done
for ((i=0; i<${#ver1[@]}; i++))
do
if [[ -z ${ver2[i]} ]]
then
# fill empty fields in ver2 with zeros
ver2[i]=0
fi
if ((10#${ver1[i]} > 10#${ver2[i]}))
then
return 1
fi
if ((10#${ver1[i]} < 10#${ver2[i]}))
then
return 2
fi
done
return 0
}
install_pkg_from_pypi() {
local PKG_NAME=$1
local NEEDED_VERSION=$2
local KEY_FILE=$3
echo "install_pkg_from_pypi $1 $2 $3"
if which $PKG_NAME >/dev/null 2>&1; then
INSTALLED_PKG=$($PKG_NAME --version | cut -d" " -f2)
vercomp ${INSTALLED_PKG} ${NEEDED_VERSION}
if [ "$?" -ne "2" ]; then
echo "$PKG_NAME already installed"
return
fi
fi
local PKG="${PKG_NAME}-${NEEDED_VERSION}.tar.gz"
local PKG_VERIFY=${BUILD_DIR}/${PKG}.asc
initial="$(echo $PKG_NAME | head -c 1)"
local PKG_URL="https://pypi.python.org/packages/source/${initial}/${PKG_NAME}/${PKG}"
local SIG_URL="${PKG_URL}.asc"
DO "curl -o ${BUILD_DIR}/${PKG} ${PKG_URL}" "0"
DO "curl -o ${BUILD_DIR}/${PKG}.asc ${SIG_URL}" "0"
echo "[+] Verifying PGP signature of $PKG_NAME"
DO "sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --import $KEY_FILE" "0"
DO "sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --verify $PKG_VERIFY" "0"
DO "tar xz --directory ${BUILD_DIR}/ -f ${BUILD_DIR}/${PKG}" "0"
DO "cd ${BUILD_DIR}/${PKG_NAME}-*" "0"
echo "[+] Installing the latest ${PKG_NAME}"
if [ "${ASSUME_YES}" -eq "0" ]; then
echo "WARNING this will overwrite the ${PKG_NAME} that you currently have installed."
ANSWER=''
until [[ $ANSWER = [yn] ]]; do
read -r -p "Do you wish to continue? [y/n]" ANSWER
echo
done
if [[ $ANSWER != 'y' ]]; then
echo "Cannot proceed"
exit
fi
fi
DO "sudo python setup.py install" "0"
}
DSTUFFT_PUB_KEY="
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
dCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAABk
ZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDNjE5
NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGlu
IElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAA
E6T+ABRfLgAQzxQAA+3MAAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dt
ZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAACjwAAAAJzaWcgAAAAAENSVCBj
dXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAyADcAOwBAAEUASgBPAFQA
WQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwAwQDGAMsA
0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkB
YAFnAW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQC
HQImAi8COAJBAksCVAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwAD
CwMWAyEDLQM4A0MDTwNaA2YDcgN+A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAE
LQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE/gUNBRwFKwU6BUkFWAVnBXcF
hgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbABtEG4wb1BwcH
GQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII
5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK
8wsLCyILOQtRC2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYN
QA1aDXQNjg2pDcMN3g34DhMOLg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MP
zw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFPEW0RjBGqEckR6BIHEiYSRRJkEoQS
oxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U8BUSFTQVVhV4FZsV
vRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjVGPoZ
IBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMc
zBz1HR4dRx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJgg
xCDwIRwhSCF1IaEhziH7IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNol
CSU4JWgllyXHJfcmJyZXJocmtyboJxgnSSd6J6sn3CgNKD8ocSiiKNQpBik4KWsp
nSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizXLQwtQS12Last4S4WLkwu
gi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQzDTNGM38z
uDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5
Qjl/Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/
IT9hP6I/4kAjQGRApkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJF
VUWaRd5GIkZnRqtG8Ec1R3tHwEgFSEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL
4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91QJ1BxULtRBlFQUZtR5lIxUnxS
x1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9WMtZGllpWbha
B1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9h
omH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNp
mmnxakhqn2r3a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx
8HJLcqZzAXNdc7h0FHRwdMx1KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6
pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+Ef+WAR4CogQqBa4HNgjCCkoL0g1eD
uoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSKyoswi5aL/IxjjMqN
MY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0lp+X
Cpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNih
R6G2oiailqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr
6axcrNCtRK24ri2uoa8Wr4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm2
8Ldot+C4WbjRuUq5wro7urW7LrunvCG8m70VvY++Cr6Evv+/er/1wHDA7MFnwePC
X8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4yrfLNsu2zDXMtc01zbXO
Ns62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY6Nls2fHa
dtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbn
H+ep6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0
NPTC9VD13vZt9vv3ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////hAJhF
eGlmAABNTQAqAAAACAAGAQYAAwAAAAEAAgAAARIAAwAAAAEAAQAAARoABQAAAAEA
AABWARsABQAAAAEAAABeASgAAwAAAAEAAgAAh2kABAAAAAEAAABmAAAAAAAAAEgA
AAABAAAASAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAyKADAAQAAAABAAAA
zQAAAAD/2wBDAAICAgICAQICAgICAgIDAwYEAwMDAwcFBQQGCAcICAgHCAgJCg0L
CQkMCggICw8LDA0ODg4OCQsQEQ8OEQ0ODg7/2wBDAQICAgMDAwYEBAYOCQgJDg4O
Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg7/
wAARCADNAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcI
CQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEI
I0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZ
WmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2
t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA
AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3
AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRom
JygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaH
iImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna
4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDyfw7Pqmo2kN15EQlt1Zo0
jG3cCMZ2/pXqSXNxY+H7Ga1t7m8vpyTKkgCpGp6Aepyfp1NeQ+FNcK+IlQSRpbuC
JzvyzL2AHqT0r1q11C+u7iazjtAkEWFQzchfc+v0oA3nXWbDWYptVtUWS7ttsWxt
wQdwPQ16NaatF4avoU1TTTPApiEktvOBEFJHyMTj2BH4VheJtP1PUfCOlalZgXl1
aoBKANuU29APXv8AhWKmtaDrPw3m0bxFNZWN+EW809bmQqCYnAO4dgTxz60Afelz
4y+HOs/E74e+DPD9/NqHgmOQ/wBtrFIWt1upATChyckh8sQucELnivOPj/8AALw9
4N8OzeKIdTvbSwijEccJKu99dyPhB1GDzzgehzXxVpXxO/sXVrLTW0u3tbFtWGo3
EtpIA9wwK4jQ/wACADAPvmvqH4zfHvQ/Hmk3j6fApWSWA6W17JuFmIwA+wA/eZur
HPANAHiujNqh0q40qyieOO4ulV0YANJIg4yc9Bz9OTXoug+Kbqz08Wl5cSieCCaO
CwuXzGC68nHQ+ufpW18ItI8AeJtS1W48WateXOnqIvs0dm7K5nbBcZXnb2x3zX0N
qHwb+FUH7TGj31td382jzRvFcQeaHt4R5ZAG49txzk/3QKAPl/w/8QddTw/e6DLc
GLThlIIM5AkcgZx3fHAPYGvafgp498dQ/EiLQ9Jdb9rqbyZLeYbo1ABw2R0AznIr
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
=1NFB
-----END PGP PUBLIC KEY BLOCK-----
"
install_pip_securely() {
NEEDED_VERSION_PIP=1.5.2
install_pkg_from_pypi "pip" ${NEEDED_VERSION_PIP} ${DSTUFFT_KEY_FILE}
}
install_virtualenv_securely() {
NEEDED_VERSION_VIRTUALENV=1.11.2
install_pkg_from_pypi "virtualenv" ${NEEDED_VERSION_VIRTUALENV} ${DSTUFFT_KEY_FILE}
}
case $DISTRO_VERSION in
lucid|natty|wheezy|squeeze|precise|n/a|raring|saucy|trusty)
# Create the build directories
DO "mkdir -p ${BUILD_DIR}" "0"
DO "chmod 700 ${BUILD_DIR}" "0"
DSTUFFT_KEY_FILE=${BUILD_DIR}/dstufft-pub-key.gpg
echo "${DSTUFFT_PUB_KEY}" > ${DSTUFFT_KEY_FILE}
# Import the Tor public key
DO "sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --keyserver x-hkp://pool.sks-keyservers.net --recv-keys 0x886DDD89" "0"
sudo gpg --homedir /root --no-default-keyring --keyring $TMP_KEYRING --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -
HAVE_TOR_REPO="`grep deb.torproject.org/torproject.org /etc/apt/sources.list /etc/apt/sources.list.d/* 2>&1|grep torproject|head -n 1`";
if [ -z "$HAVE_TOR_REPO" ]; then
echo "[-] It appears that you do not have the torproject.org Debian repository installed; installing it...";
if which apt-add-repository >/dev/null 2>&1; then
sudo apt-add-repository "deb $TOR_DEB_REPO $DISTRO_VERSION main"
else
echo -e "deb $TOR_DEB_REPO $DISTRO_VERSION main\ndeb-src $TOR_DEB_REPO $DISTRO_VERSION main" | sudo tee -a /etc/apt/sources.list
fi
else
echo "[.] It appears that you have the torproject.org Debian repository installed!";
fi
if [[ $DISTRO_VERSION == "lucid" ]]; then
HAVE_UNIVERSE_REPO="`grep -x 'deb http://archive.ubuntu.com/ubuntu lucid universe' /etc/apt/sources.list /etc/apt/sources.list.d/ 2>&1|grep universe|head -n 1`";
if [ -z "$HAVE_UNIVERSE_REPO" ]; then
echo "[-] It appears that you do not have the Ubuntu universe repository; installing it...";
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu $DISTRO_VERSION universe"
else
echo "[.] It appears that you have the Ubuntu universe repository installed!";
fi
fi
# Install the basic packages to get pip ready to roll
echo "[+] Updating OS package list...";
sudo sudo apt-get update 2>&1 > /dev/null;
echo "[+] Installing packages for your system...";
DO "sudo apt-get -y install curl git-core python python-dev python-setuptools build-essential libdumbnet1 python-dumbnet python-libpcap tor tor-geoipdb libgeoip-dev libpcap0.8-dev libssl-dev libffi-dev" "0"
if [ "$PRIV_MODE" -eq "0" ]; then
echo "[+] Using virtualenvironment..."
install_virtualenv_securely
if [[ $DISTRO_VERSION == "lucid" ]]; then
DO "sudo apt-get -y install python-virtualenv" "0"
else
DO "sudo apt-get -y install virtualenvwrapper" "0"
fi
if [ ! -f $HOME/.virtualenvs/ooniprobe/bin/activate ]; then
# Set up the virtual environment
DO "mkdir -p $HOME/.virtualenvs" "0"
DO "virtualenv $HOME/.virtualenvs/ooniprobe" "0"
source $HOME/.virtualenvs/ooniprobe/bin/activate
else
source $HOME/.virtualenvs/ooniprobe/bin/activate
fi
echo "[+] Installing all of the Python dependency requirements with pip in your virtualenv!";
fi
if [[ $PRIV_MODE -eq 1 ]]; then
echo "[+] Installing pip securely"
install_pip_securely
echo "[+] Installing all of the Python dependency requirements with pip system wide!";
# pip 1.5 needs this
DO "sudo pip install setuptools --no-use-wheel --upgrade"
fi
# Install all of the out of package manager dependencies
DO "pip install -v --timeout 60 -r ${REPO_ROOT}/requirements.txt" "0"
# Install lucid required pip dependencies
if [[ $DISTRO_VERSION == "lucid" ]]; then
DO "pip install -v --timeout 60 pygeoip service-identity" "0"
fi
if [ $? != 0 ]; then
echo "[+] It appears that pip is having issues installing our Python dependency requirements, we'll try again!";
DO "pip install -v --timeout 60 -r ${REPO_ROOT}/requirements.txt" "0"
if [ $? != 0 ]; then
echo "[+] It appears that pip is unable to satisfy our requirements - please run the following command:";
echo " pip install -v --timeout 60 -r ${REPO_ROOT}/requirements.txt ";
exit 1;
fi
fi
echo ""
echo "You can now install ooniprobe with: "
echo ""
if [[ $PRIV_MODE -eq 0 ]]; then
echo "source $HOME/.virtualenvs/ooniprobe/bin/activate"
fi
echo "python setup.py install"
echo ""
echo "You should also be sure to edit your configuration appropriately by doing:"
echo ""
echo "cp ${DIR}/data/ooniprobe.conf.sample ~/.ooni/ooniprobe.conf"
echo ""
;;
*)
echo "It appears that you are using an unsupported OS - please tell us";
echo "by filing a bug: https://trac.torproject.org/projects/tor/newticket";
;;
esac