freedombone-config 30KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892
  1. #!/bin/bash
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # Interactively creates a configuration file for use with the main
  12. # freedombone command
  13. #
  14. # License
  15. # =======
  16. #
  17. # Copyright (C) 2015 Bob Mottram <bob@robotics.uk.to>
  18. #
  19. # This program is free software: you can redistribute it and/or modify
  20. # it under the terms of the GNU General Public License as published by
  21. # the Free Software Foundation, either version 3 of the License, or
  22. # (at your option) any later version.
  23. #
  24. # This program is distributed in the hope that it will be useful,
  25. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  26. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  27. # GNU General Public License for more details.
  28. #
  29. # You should have received a copy of the GNU General Public License
  30. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  31. NO_OF_ARGS=$#
  32. # Web site
  33. FREEDOMBONE_WEBSITE="http://freedombone.uk.to"
  34. # Contact details
  35. FREEDOMBONE_BITMESSAGE="BM-2cWuhmBvVdfrHhLoZTdspCkKeiTorUesSL"
  36. # Minimum number of characters in a password
  37. MINIMUM_PASSWORD_LENGTH=10
  38. # Different system variants which may be specified within
  39. # the SYSTEM_TYPE option
  40. VARIANT_FULL="full"
  41. VARIANT_WRITER="writer"
  42. VARIANT_CLOUD="cloud"
  43. VARIANT_CHAT="chat"
  44. VARIANT_MAILBOX="mailbox"
  45. VARIANT_NONMAILBOX="nonmailbox"
  46. VARIANT_SOCIAL="social"
  47. VARIANT_MEDIA="media"
  48. VARIANT_TOR_DONGLE="tordongle"
  49. MY_USERNAME=
  50. DEFAULT_DOMAIN_NAME=
  51. MY_EMAIL_ADDRESS=
  52. SYSTEM_TYPE=
  53. INSTALLING_ON_BBB=
  54. DDNS_PROVIDER=
  55. DDNS_USERNAME=
  56. DDNS_PASSWORD=
  57. MY_NAME=
  58. LOCAL_NETWORK_STATIC_IP_ADDRESS=
  59. ROUTER_IP_ADDRESS=
  60. ENABLE_CJDNS=
  61. DEBIAN_REPO=
  62. NAMESERVER1=
  63. NAMESERVER2=
  64. WIKI_TITLE=
  65. WIKI_DOMAIN_NAME=
  66. MY_BLOG_TITLE=
  67. FULLBLOG_DOMAIN_NAME=
  68. OWNCLOUD_DOMAIN_NAME=
  69. REDMATRIX_DOMAIN_NAME=
  70. MICROBLOG_DOMAIN_NAME=
  71. CONFIGURATION_FILE=
  72. function show_help {
  73. echo ''
  74. echo 'freedombone-config -f [config filename] -m [min password length]'
  75. echo ''
  76. echo 'Creates an inventory of remote backup locations'
  77. echo ''
  78. echo ''
  79. echo ' -h --help Show help'
  80. echo ' -f --filename Configuration file (usually freedombone.cfg)'
  81. echo ' -m --min Minimum password length (characters)'
  82. echo ' -w --www Freedombone web site'
  83. echo ' -b --bm Freedombone support Bitmessage address'
  84. echo ''
  85. exit 0
  86. }
  87. # Get the commandline options
  88. while [[ $# > 1 ]]
  89. do
  90. key="$1"
  91. case $key in
  92. -h|--help)
  93. show_help
  94. ;;
  95. # Configuration filename
  96. -f|--filename)
  97. shift
  98. CONFIGURATION_FILE="$1"
  99. ;;
  100. # Minimum password length
  101. -m|--min)
  102. shift
  103. MINIMUM_PASSWORD_LENGTH="$1"
  104. ;;
  105. # Freedombone website
  106. -w|--www)
  107. shift
  108. FREEDOMBONE_WEBSITE="$1"
  109. ;;
  110. # Bitmessage address for support
  111. -b|--bm)
  112. shift
  113. FREEDOMBONE_BITMESSAGE="$1"
  114. ;;
  115. *)
  116. # unknown option
  117. ;;
  118. esac
  119. shift
  120. done
  121. function save_configuration_file {
  122. if [ ! $CONFIGURATION_FILE ]; then
  123. CONFIGURATION_FILE='freedombone.cfg'
  124. fi
  125. echo "MY_USERNAME=$MY_USERNAME" > $CONFIGURATION_FILE
  126. echo "DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME" >> $CONFIGURATION_FILE
  127. echo "SYSTEM_TYPE=$SYSTEM_TYPE" >> $CONFIGURATION_FILE
  128. echo "INSTALLING_ON_BBB=$INSTALLING_ON_BBB" >> $CONFIGURATION_FILE
  129. echo "DDNS_PROVIDER=$DDNS_PROVIDER" >> $CONFIGURATION_FILE
  130. echo "DDNS_USERNAME=$DDNS_USERNAME" >> $CONFIGURATION_FILE
  131. echo "DDNS_PASSWORD=$DDNS_PASSWORD" >> $CONFIGURATION_FILE
  132. echo "MY_NAME=$MY_NAME" >> $CONFIGURATION_FILE
  133. echo "MY_EMAIL_ADDRESS=$MY_EMAIL_ADDRESS" >> $CONFIGURATION_FILE
  134. echo "LOCAL_NETWORK_STATIC_IP_ADDRESS=$LOCAL_NETWORK_STATIC_IP_ADDRESS" >> $CONFIGURATION_FILE
  135. echo "ROUTER_IP_ADDRESS=$ROUTER_IP_ADDRESS" >> $CONFIGURATION_FILE
  136. echo "ENABLE_CJDNS=$ENABLE_CJDNS" >> $CONFIGURATION_FILE
  137. echo "DEBIAN_REPO=$DEBIAN_REPO" >> $CONFIGURATION_FILE
  138. echo "NAMESERVER1=$NAMESERVER1" >> $CONFIGURATION_FILE
  139. echo "NAMESERVER2=$NAMESERVER2" >> $CONFIGURATION_FILE
  140. if [ $WIKI_TITLE ]; then
  141. echo "WIKI_TITLE=$WIKI_TITLE" >> $CONFIGURATION_FILE
  142. fi
  143. if [ $WIKI_DOMAIN_NAME ]; then
  144. echo "WIKI_DOMAIN_NAME=$WIKI_DOMAIN_NAME" >> $CONFIGURATION_FILE
  145. fi
  146. if [ $MY_BLOG_TITLE ]; then
  147. echo "MY_BLOG_TITLE=$MY_BLOG_TITLE" >> $CONFIGURATION_FILE
  148. fi
  149. if [ $FULLBLOG_DOMAIN_NAME ]; then
  150. echo "FULLBLOG_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE
  151. fi
  152. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  153. echo "OWNCLOUD_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME" >> $CONFIGURATION_FILE
  154. fi
  155. if [ $REDMATRIX_DOMAIN_NAME ]; then
  156. echo "REDMATRIX_DOMAIN_NAME=$REDMATRIX_DOMAIN_NAME" >> $CONFIGURATION_FILE
  157. fi
  158. if [ $MICROBLOG_DOMAIN_NAME ]; then
  159. echo "MICROBLOG_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE
  160. fi
  161. }
  162. # test a domain name to see if it's valid
  163. function validate_domain_name {
  164. # count the number of dots in the domain name
  165. dots=${TEST_DOMAIN_NAME//[^.]}
  166. no_of_dots=${#dots}
  167. if (( $no_of_dots > 3 )); then
  168. TEST_DOMAIN_NAME="The domain $TEST_DOMAIN_NAME has too many subdomains. It should be of the type w.x.y.z, x.y.z or y.z"
  169. fi
  170. if (( $no_of_dots == 0 )); then
  171. TEST_DOMAIN_NAME="The domain $TEST_DOMAIN_NAME has no top level domain. It should be of the type w.x.y.z, x.y.z or y.z"
  172. fi
  173. }
  174. function interactive_configuration {
  175. # create a temporary copy of the configuration file
  176. # which can be used to pre-populate selections
  177. if [ -f $CONFIGURATION_FILE ]; then
  178. cp $CONFIGURATION_FILE temp.cfg
  179. fi
  180. dialog --title "Freedombone" --msgbox "Welcome to the Freedombone interactive installer. Communications freedom is only a short time away.\n\nEnsure that you have your domain and dynamic DNS settings ready.\n\nFor more information please visit $FREEDOMBONE_WEBSITE or send a Bitmessage to $FREEDOMBONE_BITMESSAGE" 15 50
  181. data=$(tempfile 2>/dev/null)
  182. trap "rm -f $data" 0 1 2 5 15
  183. dialog --backtitle "Freedombone Configuration" \
  184. --radiolist "Type of Installation:" 15 40 8 \
  185. 1 Full on \
  186. 2 Writer off \
  187. 3 Cloud off \
  188. 4 Chat off \
  189. 5 Mailbox off \
  190. 6 Non-Mailbox off \
  191. 7 Social off \
  192. 8 Media off 2> $data
  193. sel=$?
  194. case $sel in
  195. 1) exit 0;;
  196. 255) exit 0;;
  197. esac
  198. case $(cat $data) in
  199. 1) SYSTEM_TYPE=$VARIANT_FULL;;
  200. 2) SYSTEM_TYPE=$VARIANT_WRITER;;
  201. 3) SYSTEM_TYPE=$VARIANT_CLOUD;;
  202. 4) SYSTEM_TYPE=$VARIANT_CHAT;;
  203. 5) SYSTEM_TYPE=$VARIANT_MAILBOX;;
  204. 6) SYSTEM_TYPE=$VARIANT_NONMAILBOX;;
  205. 7) SYSTEM_TYPE=$VARIANT_SOCIAL;;
  206. 8) SYSTEM_TYPE=$VARIANT_MEDIA;;
  207. esac
  208. save_configuration_file
  209. data=$(tempfile 2>/dev/null)
  210. trap "rm -f $data" 0 1 2 5 15
  211. dialog --title "Select the user account to install as" \
  212. --backtitle "Freedombone Configuration" \
  213. --dselect "/home/$(grep 'MY_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 14 40 2> $data
  214. sel=$?
  215. case $sel in
  216. 0) MY_USERNAME=$(cat $data | awk -F '/' '{print $3}');;
  217. 1) exit 0;;
  218. 255) exit 0;;
  219. esac
  220. if [ ! $MY_USERNAME ]; then
  221. echo 'No user account was selected'
  222. exit 64398
  223. fi
  224. if [[ $MY_USERNAME == '-f' ]]; then
  225. echo 'No user account was selected'
  226. exit 8347
  227. fi
  228. if [ ! -d /home/$MY_USERNAME ]; then
  229. echo "The directory /home/$MY_USERNAME does not exist"
  230. exit 6437
  231. fi
  232. save_configuration_file
  233. if [[ $(grep "INSTALLING_ON_BBB" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then
  234. dialog --title "Install Target" \
  235. --backtitle "Freedombone Configuration" \
  236. --yesno "\nAre you installing onto a Beaglebone Black?" 7 60
  237. else
  238. dialog --title "Install Target" \
  239. --backtitle "Freedombone Configuration" \
  240. --defaultno \
  241. --yesno "\nAre you installing onto a Beaglebone Black?" 7 60
  242. fi
  243. sel=$?
  244. case $sel in
  245. 0) INSTALLING_ON_BBB="yes";;
  246. 1) INSTALLING_ON_BBB="no";;
  247. 255) exit 0;;
  248. esac
  249. save_configuration_file
  250. data=$(tempfile 2>/dev/null)
  251. trap "rm -f $data" 0 1 2 5 15
  252. dialog --backtitle "Freedombone Configuration" \
  253. --radiolist "Where to download Debian packages from:" 25 45 49 \
  254. 1 "Australia" off \
  255. 2 "Austria" off \
  256. 3 "Belarus" off \
  257. 4 "Belgium" off \
  258. 5 "Bosnia and Herzegovina" off \
  259. 6 "Brazil" off \
  260. 7 "Bulgaria" off \
  261. 8 "Canada" off \
  262. 9 "Chile" off \
  263. 10 "China" off \
  264. 11 "Croatia" off \
  265. 12 "Czech Republic" off \
  266. 13 "Denmark" off \
  267. 14 "El Salvador" off \
  268. 15 "Estonia" off \
  269. 16 "Finland" off \
  270. 17 "France 1" off \
  271. 18 "France 2" off \
  272. 19 "Germany 1" off \
  273. 20 "Germany 2" off \
  274. 21 "Greece" off \
  275. 22 "Hungary" off \
  276. 23 "Iceland" off \
  277. 24 "Iran" off \
  278. 25 "Ireland" off \
  279. 26 "Italy" off \
  280. 27 "Japan" off \
  281. 28 "Korea" off \
  282. 29 "Lithuania" off \
  283. 30 "Mexico" off \
  284. 31 "Netherlands" off \
  285. 32 "New Caledonia" off \
  286. 33 "New Zealand" off \
  287. 34 "Norway" off \
  288. 35 "Poland" off \
  289. 36 "Portugal" off \
  290. 37 "Romania" off \
  291. 38 "Russia" off \
  292. 39 "Slovakia" off \
  293. 40 "Slovenia" off \
  294. 41 "Spain" off \
  295. 42 "Sweden" off \
  296. 43 "Switzerland" off \
  297. 44 "Taiwan" off \
  298. 45 "Thailand" off \
  299. 46 "Turkey" off \
  300. 47 "Ukraine" off \
  301. 48 "United Kingdom" off \
  302. 49 "United States" on 2> $data
  303. sel=$?
  304. case $sel in
  305. 1) exit 0;;
  306. 255) exit 0;;
  307. esac
  308. case $(cat $data) in
  309. 1) DEBIAN_REPO='ftp.au.debian.org';;
  310. 2) DEBIAN_REPO='ftp.at.debian.org';;
  311. 3) DEBIAN_REPO='ftp.by.debian.org';;
  312. 4) DEBIAN_REPO='ftp.be.debian.org';;
  313. 5) DEBIAN_REPO='ftp.ba.debian.org';;
  314. 6) DEBIAN_REPO='ftp.br.debian.org';;
  315. 7) DEBIAN_REPO='ftp.bg.debian.org';;
  316. 8) DEBIAN_REPO='ftp.ca.debian.org';;
  317. 9) DEBIAN_REPO='ftp.cl.debian.org';;
  318. 10) DEBIAN_REPO='ftp.cn.debian.org';;
  319. 11) DEBIAN_REPO='ftp.hr.debian.org';;
  320. 12) DEBIAN_REPO='ftp.cz.debian.org';;
  321. 13) DEBIAN_REPO='ftp.dk.debian.org';;
  322. 14) DEBIAN_REPO='ftp.sv.debian.org';;
  323. 15) DEBIAN_REPO='ftp.ee.debian.org';;
  324. 16) DEBIAN_REPO='ftp.fi.debian.org';;
  325. 17) DEBIAN_REPO='ftp2.fr.debian.org';;
  326. 18) DEBIAN_REPO='ftp.fr.debian.org';;
  327. 19) DEBIAN_REPO='ftp2.de.debian.org';;
  328. 20) DEBIAN_REPO='ftp.de.debian.org';;
  329. 21) DEBIAN_REPO='ftp.gr.debian.org';;
  330. 22) DEBIAN_REPO='ftp.hu.debian.org';;
  331. 23) DEBIAN_REPO='ftp.is.debian.org';;
  332. 24) DEBIAN_REPO='ftp.ir.debian.org';;
  333. 25) DEBIAN_REPO='ftp.ie.debian.org';;
  334. 26) DEBIAN_REPO='ftp.it.debian.org';;
  335. 27) DEBIAN_REPO='ftp.jp.debian.org';;
  336. 28) DEBIAN_REPO='ftp.kr.debian.org';;
  337. 29) DEBIAN_REPO='ftp.lt.debian.org';;
  338. 30) DEBIAN_REPO='ftp.mx.debian.org';;
  339. 31) DEBIAN_REPO='ftp.nl.debian.org';;
  340. 32) DEBIAN_REPO='ftp.nc.debian.org';;
  341. 33) DEBIAN_REPO='ftp.nz.debian.org';;
  342. 34) DEBIAN_REPO='ftp.no.debian.org';;
  343. 35) DEBIAN_REPO='ftp.pl.debian.org';;
  344. 36) DEBIAN_REPO='ftp.pt.debian.org';;
  345. 37) DEBIAN_REPO='ftp.ro.debian.org';;
  346. 38) DEBIAN_REPO='ftp.ru.debian.org';;
  347. 39) DEBIAN_REPO='ftp.sk.debian.org';;
  348. 40) DEBIAN_REPO='ftp.si.debian.org';;
  349. 41) DEBIAN_REPO='ftp.es.debian.org';;
  350. 42) DEBIAN_REPO='ftp.se.debian.org';;
  351. 43) DEBIAN_REPO='ftp.ch.debian.org';;
  352. 44) DEBIAN_REPO='ftp.tw.debian.org';;
  353. 45) DEBIAN_REPO='ftp.th.debian.org';;
  354. 46) DEBIAN_REPO='ftp.tr.debian.org';;
  355. 47) DEBIAN_REPO='ftp.ua.debian.org';;
  356. 48) DEBIAN_REPO='ftp.uk.debian.org';;
  357. 49) DEBIAN_REPO='ftp.us.debian.org';;
  358. 255) exit 0;;
  359. esac
  360. save_configuration_file
  361. data=$(tempfile 2>/dev/null)
  362. trap "rm -f $data" 0 1 2 5 15
  363. dialog --backtitle "Freedombone Configuration" \
  364. --radiolist "Pick a domain name service (DNS):" 25 50 16 \
  365. 1 "Digital Courage" on \
  366. 2 "German Privacy Foundation 1" off \
  367. 3 "German Privacy Foundation 2" off \
  368. 4 "Chaos Computer Club" off \
  369. 5 "ClaraNet" off \
  370. 6 "OpenNIC 1" off \
  371. 7 "OpenNIC 2" off \
  372. 8 "OpenNIC 3" off \
  373. 9 "OpenNIC 4" off \
  374. 10 "OpenNIC 5" off \
  375. 11 "OpenNIC 6" off \
  376. 12 "OpenNIC 7" off \
  377. 13 "PowerNS" off \
  378. 14 "ValiDOM" off \
  379. 15 "Freie Unzensierte" off \
  380. 16 "Google" off 2> $data
  381. sel=$?
  382. case $sel in
  383. 1) exit 0;;
  384. 255) exit 0;;
  385. esac
  386. case $(cat $data) in
  387. 1) NAMESERVER1='85.214.73.63'
  388. NAMESERVER2='213.73.91.35'
  389. ;;
  390. 2) NAMESERVER1='87.118.100.175'
  391. NAMESERVER2='94.75.228.29'
  392. ;;
  393. 3) NAMESERVER1='85.25.251.254'
  394. NAMESERVER2='2.141.58.13'
  395. ;;
  396. 4) NAMESERVER1='213.73.91.35'
  397. NAMESERVER2='85.214.73.63'
  398. ;;
  399. 5) NAMESERVER1='212.82.225.7'
  400. NAMESERVER2='212.82.226.212'
  401. ;;
  402. 6) NAMESERVER1='58.6.115.42'
  403. NAMESERVER2='58.6.115.43'
  404. ;;
  405. 7) NAMESERVER1='119.31.230.42'
  406. NAMESERVER2='200.252.98.162'
  407. ;;
  408. 8) NAMESERVER1='217.79.186.148'
  409. NAMESERVER2='81.89.98.6'
  410. ;;
  411. 9) NAMESERVER1='78.159.101.37'
  412. NAMESERVER2='203.167.220.153'
  413. ;;
  414. 10) NAMESERVER1='82.229.244.191'
  415. NAMESERVER2='82.229.244.191'
  416. ;;
  417. 11) NAMESERVER1='216.87.84.211'
  418. NAMESERVER2='66.244.95.20'
  419. ;;
  420. 12) NAMESERVER1='207.192.69.155'
  421. NAMESERVER2='72.14.189.120'
  422. ;;
  423. 13) NAMESERVER1='194.145.226.26'
  424. NAMESERVER2='77.220.232.44'
  425. ;;
  426. 14) NAMESERVER1='78.46.89.147'
  427. NAMESERVER2='88.198.75.145'
  428. ;;
  429. 15) NAMESERVER1='85.25.149.144'
  430. NAMESERVER2='87.106.37.196'
  431. ;;
  432. 16) NAMESERVER1='8.8.8.8'
  433. NAMESERVER2='4.4.4.4'
  434. ;;
  435. 255) exit 0;;
  436. esac
  437. save_configuration_file
  438. data=$(tempfile 2>/dev/null)
  439. trap "rm -f $data" 0 1 2 5 15
  440. dialog --backtitle "Freedombone Configuration" \
  441. --radiolist "Choose Dynamic DNS provider:" 15 40 14 \
  442. 1 dyndns off \
  443. 2 freedns off \
  444. 3 zoneedit off \
  445. 4 no-ip on \
  446. 5 easydns off \
  447. 6 tzo off \
  448. 7 3322 off \
  449. 8 dnsomatic off \
  450. 9 tunnelbroker off \
  451. 10 dns.he.net off \
  452. 11 dynsip off \
  453. 12 sitelutions off \
  454. 13 dnsexit off \
  455. 14 changeip off 2> $data
  456. sel=$?
  457. case $sel in
  458. 1) exit 0;;
  459. 255) exit 0;;
  460. esac
  461. case $(cat $data) in
  462. 1) DDNS_PROVIDER="default@dyndns.org";;
  463. 2) DDNS_PROVIDER="default@freedns.afraid.org";;
  464. 3) DDNS_PROVIDER="default@zoneedit.com";;
  465. 4) DDNS_PROVIDER="default@no-ip.com";;
  466. 5) DDNS_PROVIDER="default@easydns.com";;
  467. 6) DDNS_PROVIDER="default@tzo.com";;
  468. 7) DDNS_PROVIDER="dyndns@3322.org";;
  469. 8) DDNS_PROVIDER="default@dnsomatic.com";;
  470. 9) DDNS_PROVIDER="ipv6tb@he.net";;
  471. 10) DDNS_PROVIDER="dyndns@he.net";;
  472. 11) DDNS_PROVIDER="default@dynsip.org";;
  473. 12) DDNS_PROVIDER="default@sitelutions.com";;
  474. 13) DDNS_PROVIDER="default@dnsexit.com";;
  475. 14) DDNS_PROVIDER="default@changeip.com";;
  476. 255) exit 0;;
  477. esac
  478. save_configuration_file
  479. while [ ! $DDNS_USERNAME ]
  480. do
  481. data=$(tempfile 2>/dev/null)
  482. trap "rm -f $data" 0 1 2 5 15
  483. dialog --backtitle "Freedombone Configuration" \
  484. --inputbox "Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  485. sel=$?
  486. case $sel in
  487. 0) DDNS_USERNAME=$(cat $data);;
  488. 1) exit 0;;
  489. 255) exit 0;;
  490. esac
  491. done
  492. save_configuration_file
  493. while [ ! $DDNS_PASSWORD ]
  494. do
  495. data=$(tempfile 2>/dev/null)
  496. trap "rm -f $data" 0 1 2 5 15
  497. dialog --backtitle "Freedombone Configuration" \
  498. --clear \
  499. --insecure \
  500. --passwordbox "Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  501. sel=$?
  502. case $sel in
  503. 0) DDNS_PASSWORD=$(cat $data);;
  504. 1) exit 0;;
  505. 255) exit 0;;
  506. esac
  507. if [ ${#DDNS_PASSWORD} -lt $MINIMUM_PASSWORD_LENGTH ]; then
  508. dialog --title "Password quality check" --msgbox "The password given was too short. It must be at least $MINIMUM_PASSWORD_LENGTH characters. You may need to change your password on the dynamic DNS provider's web site." 10 40
  509. DDNS_PASSWORD=""
  510. fi
  511. done
  512. save_configuration_file
  513. while [ ! $MY_NAME ]
  514. do
  515. data=$(tempfile 2>/dev/null)
  516. trap "rm -f $data" 0 1 2 5 15
  517. dialog --backtitle "Freedombone Configuration" \
  518. --inputbox "Your full name (or nick)" 10 30 "$(grep 'MY_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  519. sel=$?
  520. case $sel in
  521. 0) MY_NAME=$(cat $data);;
  522. 1) exit 0;;
  523. 255) exit 0;;
  524. esac
  525. done
  526. save_configuration_file
  527. if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  528. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep 'LOCAL_NETWORK_STATIC_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  529. if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  530. LOCAL_NETWORK_STATIC_IP_ADDRESS='192.168..'
  531. fi
  532. fi
  533. if [ ! $ROUTER_IP_ADDRESS ]; then
  534. ROUTER_IP_ADDRESS=$(grep 'ROUTER_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  535. if [ ! $ROUTER_IP_ADDRESS ]; then
  536. ROUTER_IP_ADDRESS='192.168..'
  537. fi
  538. fi
  539. data=$(tempfile 2>/dev/null)
  540. trap "rm -f $data" 0 1 2 5 15
  541. dialog --backtitle "Freedombone Configuration" \
  542. --title "Local Network Configuration" \
  543. --form "\nPlease enter the IP addresses:" 11 55 3 \
  544. "This system:" 1 1 "$LOCAL_NETWORK_STATIC_IP_ADDRESS" 1 16 16 15 \
  545. "Internet router:" 2 1 "$ROUTER_IP_ADDRESS" 2 16 16 15 \
  546. 2> $data
  547. sel=$?
  548. case $sel in
  549. 1) exit 0;;
  550. 255) exit 0;;
  551. esac
  552. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(cat $data | sed -n 1p)
  553. ROUTER_IP_ADDRESS=$(cat $data | sed -n 2p)
  554. save_configuration_file
  555. data=$(tempfile 2>/dev/null)
  556. trap "rm -f $data" 0 1 2 5 15
  557. if [[ $(grep 'ENABLE_CJDNS' temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then
  558. dialog --title "Mesh Networking" \
  559. --backtitle "Freedombone Configuration" \
  560. --yesno "\nDo you want to enable CJDNS?" 7 60
  561. else
  562. dialog --title "Mesh Networking" \
  563. --backtitle "Freedombone Configuration" \
  564. --defaultno \
  565. --yesno "\nDo you want to enable CJDNS?" 7 60
  566. fi
  567. sel=$?
  568. case $sel in
  569. 0) ENABLE_CJDNS="yes";;
  570. 1) ENABLE_CJDNS="no";;
  571. 255) exit 0;;
  572. esac
  573. save_configuration_file
  574. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  575. while [ ! $WIKI_DOMAIN_NAME ]
  576. do
  577. data=$(tempfile 2>/dev/null)
  578. trap "rm -f $data" 0 1 2 5 15
  579. dialog --backtitle "Freedombone Configuration" \
  580. --title "Wiki Configuration" \
  581. --form "\nPlease enter your wiki details:" 11 55 3 \
  582. "Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  583. "Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \
  584. 2> $data
  585. sel=$?
  586. case $sel in
  587. 1) exit 0;;
  588. 255) exit 0;;
  589. esac
  590. WIKI_TITLE=$(cat $data | sed -n 1p)
  591. WIKI_DOMAIN_NAME=$(cat $data | sed -n 2p)
  592. if [ $WIKI_DOMAIN_NAME ]; then
  593. TEST_DOMAIN_NAME=$WIKI_DOMAIN_NAME
  594. validate_domain_name
  595. if [[ $TEST_DOMAIN_NAME != $WIKI_DOMAIN_NAME ]]; then
  596. WIKI_DOMAIN_NAME=
  597. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  598. fi
  599. fi
  600. done
  601. save_configuration_file
  602. fi
  603. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  604. while [ ! $FULLBLOG_DOMAIN_NAME ]
  605. do
  606. data=$(tempfile 2>/dev/null)
  607. trap "rm -f $data" 0 1 2 5 15
  608. dialog --backtitle "Freedombone Configuration" \
  609. --title "Blog Configuration" \
  610. --form "\nPlease enter your blog details:" 11 55 3 \
  611. "Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  612. "Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  613. 2> $data
  614. sel=$?
  615. case $sel in
  616. 1) exit 0;;
  617. 255) exit 0;;
  618. esac
  619. MY_BLOG_TITLE=$(cat $data | sed -n 1p)
  620. FULLBLOG_DOMAIN_NAME=$(cat $data | sed -n 2p)
  621. if [ $FULLBLOG_DOMAIN_NAME ]; then
  622. if [[ $FULLBLOG_DOMAIN_NAME == "$WIKI_DOMAIN_NAME" ]]; then
  623. FULLBLOG_DOMAIN_NAME=""
  624. fi
  625. TEST_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME
  626. validate_domain_name
  627. if [[ $TEST_DOMAIN_NAME != $FULLBLOG_DOMAIN_NAME ]]; then
  628. FULLBLOG_DOMAIN_NAME=
  629. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  630. fi
  631. fi
  632. done
  633. save_configuration_file
  634. fi
  635. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  636. while [ ! $OWNCLOUD_DOMAIN_NAME ]
  637. do
  638. data=$(tempfile 2>/dev/null)
  639. trap "rm -f $data" 0 1 2 5 15
  640. dialog --backtitle "Freedombone Configuration" \
  641. --title "Owncloud Configuration" \
  642. --form "\nPlease enter your Owncloud details:" 11 55 3 \
  643. "Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  644. 2> $data
  645. sel=$?
  646. case $sel in
  647. 1) exit 0;;
  648. 255) exit 0;;
  649. esac
  650. OWNCLOUD_DOMAIN_NAME=$(cat $data | sed -n 1p)
  651. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  652. TEST_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME
  653. validate_domain_name
  654. if [[ $TEST_DOMAIN_NAME != $OWNCLOUD_DOMAIN_NAME ]]; then
  655. OWNCLOUD_DOMAIN_NAME=
  656. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  657. fi
  658. fi
  659. done
  660. save_configuration_file
  661. fi
  662. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  663. while [ ! $REDMATRIX_DOMAIN_NAME ]
  664. do
  665. data=$(tempfile 2>/dev/null)
  666. trap "rm -f $data" 0 1 2 5 15
  667. dialog --backtitle "Freedombone Configuration" \
  668. --title "RedMatrix Configuration" \
  669. --form "\nPlease enter your RedMatrix details:" 11 55 3 \
  670. "Domain:" 1 1 "$(grep 'REDMATRIX_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  671. 2> $data
  672. sel=$?
  673. case $sel in
  674. 1) exit 0;;
  675. 255) exit 0;;
  676. esac
  677. REDMATRIX_DOMAIN_NAME=$(cat $data | sed -n 1p)
  678. if [ $REDMATRIX_DOMAIN_NAME ]; then
  679. TEST_DOMAIN_NAME=$REDMATRIX_DOMAIN_NAME
  680. validate_domain_name
  681. if [[ $TEST_DOMAIN_NAME != $REDMATRIX_DOMAIN_NAME ]]; then
  682. REDMATRIX_DOMAIN_NAME=
  683. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  684. fi
  685. fi
  686. done
  687. save_configuration_file
  688. fi
  689. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  690. while [ ! $MICROBLOG_DOMAIN_NAME ]
  691. do
  692. data=$(tempfile 2>/dev/null)
  693. trap "rm -f $data" 0 1 2 5 15
  694. dialog --backtitle "Freedombone Configuration" \
  695. --title "Microblog Configuration" \
  696. --form "\nPlease enter your Microblog details:" 11 55 3 \
  697. "Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  698. 2> $data
  699. sel=$?
  700. case $sel in
  701. 1) exit 0;;
  702. 255) exit 0;;
  703. esac
  704. MICROBLOG_DOMAIN_NAME=$(cat $data | sed -n 1p)
  705. if [ $MICROBLOG_DOMAIN_NAME ]; then
  706. if [[ $MICROBLOG_DOMAIN_NAME == "$REDMATRIX_DOMAIN_NAME" ]]; then
  707. MICROBLOG_DOMAIN_NAME=""
  708. fi
  709. TEST_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME
  710. validate_domain_name
  711. if [[ $TEST_DOMAIN_NAME != $MICROBLOG_DOMAIN_NAME ]]; then
  712. MICROBLOG_DOMAIN_NAME=
  713. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  714. fi
  715. fi
  716. done
  717. save_configuration_file
  718. fi
  719. if [ ! $DEFAULT_DOMAIN_NAME ]; then
  720. while [ ! $DEFAULT_DOMAIN_NAME ]
  721. do
  722. data=$(tempfile 2>/dev/null)
  723. trap "rm -f $data" 0 1 2 5 15
  724. dialog --backtitle "Freedombone Configuration" \
  725. --inputbox "Which domain name should your email/XMPP/IRC/VoIP be associated with?" 10 45 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  726. sel=$?
  727. case $sel in
  728. 0) DEFAULT_DOMAIN_NAME=$(cat $data);;
  729. 1) exit 0;;
  730. 255) exit 0;;
  731. esac
  732. done
  733. save_configuration_file
  734. fi
  735. while [ ! $MY_EMAIL_ADDRESS ]
  736. do
  737. EMAIL_ADDRESS=$(grep 'MY_EMAIL_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  738. if [ ! $EMAIL_ADDRESS ]; then
  739. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  740. fi
  741. data=$(tempfile 2>/dev/null)
  742. trap "rm -f $data" 0 1 2 5 15
  743. dialog --backtitle "Freedombone Configuration" \
  744. --inputbox "Your email address" 10 30 "$EMAIL_ADDRESS" 2> $data
  745. sel=$?
  746. case $sel in
  747. 0) MY_EMAIL_ADDRESS=$(cat $data);;
  748. 1) exit 0;;
  749. 255) exit 0;;
  750. esac
  751. done
  752. save_configuration_file
  753. # delete the temporary configuration file
  754. if [ -f temp.cfg ]; then
  755. shred -zu temp.cfg
  756. fi
  757. }
  758. function show_result {
  759. clear
  760. echo ''
  761. echo "Configuration filename: $CONFIGURATION_FILE"
  762. echo ''
  763. echo 'Contents:'
  764. echo ''
  765. cat $CONFIGURATION_FILE
  766. echo ''
  767. }
  768. function read_configuration {
  769. if [ ! $CONFIGURATION_FILE ]; then
  770. CONFIGURATION_FILE='freedombone.cfg'
  771. fi
  772. if [ -f $CONFIGURATION_FILE ]; then
  773. if grep -q "MY_USERNAME" $CONFIGURATION_FILE; then
  774. MY_USERNAME=$(grep "MY_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  775. fi
  776. if grep -q "DOMAIN_NAME" $CONFIGURATION_FILE; then
  777. # for backwards compatability
  778. DEFAULT_DOMAIN_NAME=$(grep "DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  779. fi
  780. if grep -q "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE; then
  781. DEFAULT_DOMAIN_NAME=$(grep "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  782. fi
  783. if grep -q "NAMESERVER1" $CONFIGURATION_FILE; then
  784. NAMESERVER1=$(grep "NAMESERVER1" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  785. fi
  786. if grep -q "NAMESERVER2" $CONFIGURATION_FILE; then
  787. NAMESERVER2=$(grep "NAMESERVER2" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  788. fi
  789. if grep -q "DEBIAN_REPO" $CONFIGURATION_FILE; then
  790. DEBIAN_REPO=$(grep "DEBIAN_REPO" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  791. CHECK_MESSAGE="Check your internet connection, /etc/network/interfaces and /etc/resolv.conf, then delete $COMPLETION_FILE, run 'rm -fR /var/lib/apt/lists/* && apt-get update --fix-missing' and run this script again. If hash sum mismatches persist then try setting $DEBIAN_REPO to a different mirror and also change /etc/apt/sources.list."
  792. fi
  793. if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
  794. DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  795. fi
  796. if grep -q "DDNS_USERNAME" $CONFIGURATION_FILE; then
  797. DDNS_USERNAME=$(grep "DDNS_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  798. fi
  799. if grep -q "DDNS_PASSWORD" $CONFIGURATION_FILE; then
  800. DDNS_PASSWORD=$(grep "DDNS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  801. fi
  802. if grep -q "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE; then
  803. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  804. fi
  805. if grep -q "ENABLE_CJDNS" $CONFIGURATION_FILE; then
  806. ENABLE_CJDNS=$(grep "ENABLE_CJDNS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  807. fi
  808. if grep -q "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE; then
  809. ROUTER_IP_ADDRESS=$(grep "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  810. fi
  811. if grep -q "WIKI_TITLE" $CONFIGURATION_FILE; then
  812. WIKI_TITLE=$(grep "WIKI_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  813. fi
  814. if grep -q "MY_NAME" $CONFIGURATION_FILE; then
  815. MY_NAME=$(grep "MY_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  816. fi
  817. if grep -q "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE; then
  818. MY_EMAIL_ADDRESS=$(grep "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  819. fi
  820. if grep -q "INSTALLING_ON_BBB" $CONFIGURATION_FILE; then
  821. INSTALLING_ON_BBB=$(grep "INSTALLING_ON_BBB" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  822. fi
  823. if grep -q "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE; then
  824. PUBLIC_MAILING_LIST=$(grep "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  825. fi
  826. if grep -q "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  827. MICROBLOG_DOMAIN_NAME=$(grep "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  828. fi
  829. if grep -q "REDMATRIX_DOMAIN_NAME" $CONFIGURATION_FILE; then
  830. REDMATRIX_DOMAIN_NAME=$(grep "REDMATRIX_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  831. fi
  832. if grep -q "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE; then
  833. OWNCLOUD_DOMAIN_NAME=$(grep "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  834. fi
  835. if grep -q "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE; then
  836. WIKI_DOMAIN_NAME=$(grep "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  837. fi
  838. if grep -q "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  839. FULLBLOG_DOMAIN_NAME=$(grep "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  840. fi
  841. if grep -q "MY_BLOG_TITLE" $CONFIGURATION_FILE; then
  842. MY_BLOG_TITLE=$(grep "MY_BLOG_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  843. fi
  844. if grep -q "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE; then
  845. MY_BLOG_SUBTITLE=$(grep "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  846. fi
  847. fi
  848. }
  849. read_configuration
  850. interactive_configuration
  851. show_result
  852. exit 0