freedombone-config 52KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435
  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_DEVELOPER="developer"
  49. MY_USERNAME=
  50. DEFAULT_DOMAIN_NAME=
  51. DEFAULT_DOMAIN_CODE=
  52. MY_EMAIL_ADDRESS=
  53. SYSTEM_TYPE=
  54. INSTALLING_ON_BBB=
  55. DDNS_PROVIDER=
  56. DDNS_USERNAME=
  57. DDNS_PASSWORD=
  58. MY_NAME=
  59. LOCAL_NETWORK_STATIC_IP_ADDRESS=
  60. ROUTER_IP_ADDRESS=
  61. ENABLE_CJDNS=
  62. ENABLE_BATMAN=
  63. DEBIAN_REPO=
  64. NAMESERVER1=
  65. NAMESERVER2=
  66. WIKI_TITLE=
  67. WIKI_DOMAIN_NAME=
  68. WIKI_CODE=
  69. MY_BLOG_TITLE=
  70. FULLBLOG_DOMAIN_NAME=
  71. FULLBLOG_CODE=
  72. OWNCLOUD_DOMAIN_NAME=
  73. OWNCLOUD_CODE=
  74. REDMATRIX_DOMAIN_NAME=
  75. REDMATRIX_CODE=
  76. MICROBLOG_DOMAIN_NAME=
  77. MICROBLOG_CODE=
  78. GIT_DOMAIN_NAME=
  79. GIT_CODE=
  80. MEDIAGOBLIN_DOMAIN_NAME=
  81. MEDIAGOBLIN_CODE=
  82. USB_DRIVE=/dev/sdb1
  83. HWRNG_TYPE=
  84. ENABLE_SOCIAL_KEY_MANAGEMENT=
  85. CONFIGURATION_FILE=
  86. function show_help {
  87. echo ''
  88. echo 'freedombone-config -f [config filename] -m [min password length]'
  89. echo ''
  90. echo 'Creates an inventory of remote backup locations'
  91. echo ''
  92. echo ''
  93. echo ' -h --help Show help'
  94. echo ' -f --filename Configuration file (usually freedombone.cfg)'
  95. echo ' -m --min Minimum password length (characters)'
  96. echo ' -w --www Freedombone web site'
  97. echo ' -b --bm Freedombone support Bitmessage address'
  98. echo ''
  99. exit 0
  100. }
  101. # Get the commandline options
  102. while [[ $# > 1 ]]
  103. do
  104. key="$1"
  105. case $key in
  106. -h|--help)
  107. show_help
  108. ;;
  109. # Configuration filename
  110. -f|--filename)
  111. shift
  112. CONFIGURATION_FILE="$1"
  113. ;;
  114. # Minimum password length
  115. -m|--min)
  116. shift
  117. MINIMUM_PASSWORD_LENGTH="$1"
  118. ;;
  119. # Freedombone website
  120. -w|--www)
  121. shift
  122. FREEDOMBONE_WEBSITE="$1"
  123. ;;
  124. # Bitmessage address for support
  125. -b|--bm)
  126. shift
  127. FREEDOMBONE_BITMESSAGE="$1"
  128. ;;
  129. *)
  130. # unknown option
  131. ;;
  132. esac
  133. shift
  134. done
  135. function save_configuration_file {
  136. if [ ! $CONFIGURATION_FILE ]; then
  137. CONFIGURATION_FILE='freedombone.cfg'
  138. fi
  139. echo "MY_USERNAME=$MY_USERNAME" > $CONFIGURATION_FILE
  140. echo "DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME" >> $CONFIGURATION_FILE
  141. if [ $DEFAULT_DOMAIN_CODE ]; then
  142. echo "DEFAULT_DOMAIN_CODE=$DEFAULT_DOMAIN_CODE" >> $CONFIGURATION_FILE
  143. fi
  144. echo "SYSTEM_TYPE=$SYSTEM_TYPE" >> $CONFIGURATION_FILE
  145. echo "INSTALLING_ON_BBB=$INSTALLING_ON_BBB" >> $CONFIGURATION_FILE
  146. echo "USB_DRIVE=$USB_DRIVE" >> $CONFIGURATION_FILE
  147. echo "DDNS_PROVIDER=$DDNS_PROVIDER" >> $CONFIGURATION_FILE
  148. echo "DDNS_USERNAME=$DDNS_USERNAME" >> $CONFIGURATION_FILE
  149. echo "DDNS_PASSWORD=$DDNS_PASSWORD" >> $CONFIGURATION_FILE
  150. echo "MY_NAME=$MY_NAME" >> $CONFIGURATION_FILE
  151. echo "MY_EMAIL_ADDRESS=$MY_EMAIL_ADDRESS" >> $CONFIGURATION_FILE
  152. echo "LOCAL_NETWORK_STATIC_IP_ADDRESS=$LOCAL_NETWORK_STATIC_IP_ADDRESS" >> $CONFIGURATION_FILE
  153. echo "ROUTER_IP_ADDRESS=$ROUTER_IP_ADDRESS" >> $CONFIGURATION_FILE
  154. if [ $ENABLE_CJDNS ]; then
  155. echo "ENABLE_CJDNS=$ENABLE_CJDNS" >> $CONFIGURATION_FILE
  156. fi
  157. if [ $ENABLE_BATMAN ]; then
  158. echo "ENABLE_BATMAN=$ENABLE_BATMAN" >> $CONFIGURATION_FILE
  159. fi
  160. echo "DEBIAN_REPO=$DEBIAN_REPO" >> $CONFIGURATION_FILE
  161. echo "NAMESERVER1=$NAMESERVER1" >> $CONFIGURATION_FILE
  162. echo "NAMESERVER2=$NAMESERVER2" >> $CONFIGURATION_FILE
  163. if [ $WIKI_TITLE ]; then
  164. echo "WIKI_TITLE=$WIKI_TITLE" >> $CONFIGURATION_FILE
  165. fi
  166. if [ $WIKI_DOMAIN_NAME ]; then
  167. echo "WIKI_DOMAIN_NAME=$WIKI_DOMAIN_NAME" >> $CONFIGURATION_FILE
  168. fi
  169. if [ $WIKI_CODE ]; then
  170. echo "WIKI_CODE=$WIKI_CODE" >> $CONFIGURATION_FILE
  171. fi
  172. if [ $MY_BLOG_TITLE ]; then
  173. echo "MY_BLOG_TITLE=$MY_BLOG_TITLE" >> $CONFIGURATION_FILE
  174. fi
  175. if [ $FULLBLOG_DOMAIN_NAME ]; then
  176. echo "FULLBLOG_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE
  177. fi
  178. if [ $FULLBLOG_CODE ]; then
  179. echo "FULLBLOG_CODE=$FULLBLOG_CODE" >> $CONFIGURATION_FILE
  180. fi
  181. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  182. echo "OWNCLOUD_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME" >> $CONFIGURATION_FILE
  183. fi
  184. if [ $OWNCLOUD_CODE ]; then
  185. echo "OWNCLOUD_CODE=$OWNCLOUD_CODE" >> $CONFIGURATION_FILE
  186. fi
  187. if [ $REDMATRIX_DOMAIN_NAME ]; then
  188. echo "REDMATRIX_DOMAIN_NAME=$REDMATRIX_DOMAIN_NAME" >> $CONFIGURATION_FILE
  189. fi
  190. if [ $REDMATRIX_CODE ]; then
  191. echo "REDMATRIX_CODE=$REDMATRIX_CODE" >> $CONFIGURATION_FILE
  192. fi
  193. if [ $MICROBLOG_DOMAIN_NAME ]; then
  194. echo "MICROBLOG_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE
  195. fi
  196. if [ $MICROBLOG_CODE ]; then
  197. echo "MICROBLOG_CODE=$MICROBLOG_CODE" >> $CONFIGURATION_FILE
  198. fi
  199. if [ $GIT_DOMAIN_NAME ]; then
  200. echo "GIT_DOMAIN_NAME=$GIT_DOMAIN_NAME" >> $CONFIGURATION_FILE
  201. fi
  202. if [ $GIT_CODE ]; then
  203. echo "GIT_CODE=$GIT_CODE" >> $CONFIGURATION_FILE
  204. fi
  205. if [ $MEDIAGOBLIN_DOMAIN_NAME ]; then
  206. echo "MEDIAGOBLIN_DOMAIN_NAME=$MEDIAGOBLIN_DOMAIN_NAME" >> $CONFIGURATION_FILE
  207. fi
  208. if [ $MEDIAGOBLIN_CODE ]; then
  209. echo "MEDIAGOBLIN_CODE=$MEDIAGOBLIN_CODE" >> $CONFIGURATION_FILE
  210. fi
  211. if [ $HWRNG_TYPE ]; then
  212. echo "HWRNG_TYPE=$HWRNG_TYPE" >> $CONFIGURATION_FILE
  213. fi
  214. if [ $ENABLE_SOCIAL_KEY_MANAGEMENT ]; then
  215. echo "ENABLE_SOCIAL_KEY_MANAGEMENT=$ENABLE_SOCIAL_KEY_MANAGEMENT" >> $CONFIGURATION_FILE
  216. fi
  217. }
  218. # test a domain name to see if it's valid
  219. function validate_domain_name {
  220. # count the number of dots in the domain name
  221. dots=${TEST_DOMAIN_NAME//[^.]}
  222. no_of_dots=${#dots}
  223. if (( no_of_dots > 3 )); then
  224. 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"
  225. fi
  226. if (( no_of_dots == 0 )); then
  227. 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"
  228. fi
  229. }
  230. function interactive_gpg_from_remote {
  231. REMOTE_SERVERS_LIST=/home/$MY_USERNAME/keyshareservers.txt
  232. # get a list of remote servers
  233. freedombone-remote -u $MY_USERNAME -l $REMOTE_SERVERS_LIST -t "Remote server"
  234. if [ ! -f $REMOTE_SERVERS_LIST ]; then
  235. dialog --title "Encryption keys" --msgbox 'Error obtaining server list' 6 70
  236. return 1
  237. fi
  238. # check the number of entries in the file
  239. no_of_servers=$(cat $REMOTE_SERVERS_LIST | wc -l)
  240. if (( no_of_servers < 3 )); then
  241. dialog --title "Encryption keys" \
  242. --msgbox 'There must be at least three servers to recover the key' 6 70
  243. return 2
  244. fi
  245. # try to recover the key from the servers
  246. apt-get -y install libgfshare-bin gnupg
  247. freedombone-recoverkey -u $MY_USERNAME -l $REMOTE_SERVERS_LIST
  248. if [ ! "$?" = "0" ]; then
  249. dialog --title "Encryption keys" --msgbox 'Your key could not be recovered' 6 70
  250. return 3
  251. fi
  252. dialog --title "Encryption keys" --msgbox 'Your key has been recovered' 6 70
  253. return 0
  254. }
  255. function reconstruct_key {
  256. if [ ! -d /home/$MY_USERNAME/.gnupg_fragments ]; then
  257. return
  258. fi
  259. cd /home/$MY_USERNAME/.gnupg_fragments
  260. no_of_shares=$(ls -afq keyshare.asc.* | wc -l)
  261. if (( no_of_shares < 4 )); then
  262. dialog --title "Encryption keys" --msgbox 'Not enough fragments to reconstruct the key' 6 70
  263. exit 7348
  264. fi
  265. apt-get -y install libgfshare-bin gnupg
  266. gfcombine /home/$MY_USERNAME/.gnupg_fragments/keyshare*
  267. if [ ! "$?" = "0" ]; then
  268. dialog --title "Encryption keys" --msgbox 'Unable to reconstruct the key' 6 70
  269. exit 7348
  270. fi
  271. KEYS_FILE=/home/$MY_USERNAME/.gnupg_fragments/keyshare.asc
  272. if [ ! -f $KEYS_FILE ]; then
  273. dialog --title "Encryption keys" --msgbox 'Unable to reconstruct the key' 6 70
  274. fi
  275. su -c "gpg --allow-secret-key-import --import $KEYS_FILE" - $MY_USERNAME
  276. if [ ! "$?" = "0" ]; then
  277. echo 'Unable to import gpg key'
  278. shred -zu $KEYS_FILE
  279. rm -rf /home/$MY_USERNAME/.tempgnupg
  280. exit 9654
  281. fi
  282. shred -zu $KEYS_FILE
  283. dialog --title "Encryption keys" --msgbox 'Key has been reconstructed' 6 70
  284. }
  285. function interactive_gpg_from_usb {
  286. dialog --title "Encryption keys" \
  287. --msgbox 'Plug in a USB drive containing a copy of your full key or key fragment' 6 70
  288. HOME_DIR=/home/$MY_USERNAME
  289. GPG_LOADING="yes"
  290. SSH_IMPORTED="no"
  291. GPG_CTR=0
  292. while [[ $GPG_LOADING == "yes" ]]
  293. do
  294. if [[ $INSTALLING_ON_BBB == "yes" ]]; then
  295. GPG_USB_DRIVE='/dev/sda1'
  296. if [ ! -b $GPG_USB_DRIVE ]; then
  297. if (( GPG_CTR > 0 )); then
  298. reconstruct_key
  299. return 0
  300. fi
  301. dialog --title "Encryption keys" --msgbox 'No USB drive found' 6 30
  302. exit 739836
  303. fi
  304. else
  305. GPG_USB_DRIVE='/dev/sdb1'
  306. if [ ! -b $GPG_USB_DRIVE ]; then
  307. GPG_USB_DRIVE='/dev/sdc1'
  308. if [ ! -b $GPG_USB_DRIVE ]; then
  309. GPG_USB_DRIVE='/dev/sdd1'
  310. if [ ! -b $GPG_USB_DRIVE ]; then
  311. if (( GPG_CTR > 0 )); then
  312. reconstruct_key
  313. return 0
  314. fi
  315. dialog --title "Encryption keys" --msgbox 'No USB drive found' 6 30
  316. exit 27852
  317. fi
  318. fi
  319. fi
  320. fi
  321. GPG_USB_MOUNT='/mnt/usb'
  322. umount -f $GPG_USB_MOUNT
  323. if [ ! -d $GPG_USB_MOUNT ]; then
  324. mkdir -p $GPG_USB_MOUNT
  325. fi
  326. if [ -f /dev/mapper/encrypted_usb ]; then
  327. rm -rf /dev/mapper/encrypted_usb
  328. fi
  329. cryptsetup luksClose encrypted_usb
  330. cryptsetup luksOpen $GPG_USB_DRIVE encrypted_usb
  331. if [ "$?" = "0" ]; then
  332. GPG_USB_DRIVE=/dev/mapper/encrypted_usb
  333. fi
  334. mount $GPG_USB_DRIVE $GPG_USB_MOUNT
  335. if [ ! "$?" = "0" ]; then
  336. if (( GPG_CTR > 0 )); then
  337. rm -rf $GPG_USB_MOUNT
  338. reconstruct_key
  339. return 0
  340. fi
  341. dialog --title "Encryption keys" \
  342. --msgbox "There was a problem mounting the USB drive to $GPG_USB_MOUNT" 6 70
  343. rm -rf $GPG_USB_MOUNT
  344. exit 74393
  345. fi
  346. if [ ! -d $GPG_USB_MOUNT/.gnupg ]; then
  347. if [ ! -d $GPG_USB_MOUNT/.gnupg_fragments ]; then
  348. if (( GPG_CTR > 0 )); then
  349. umount -f $GPG_USB_MOUNT
  350. rm -rf $GPG_USB_MOUNT
  351. reconstruct_key
  352. return 0
  353. fi
  354. dialog --title "Encryption keys" \
  355. --msgbox "The directory $GPG_USB_MOUNT/.gnupg or $GPG_USB_MOUNT/.gnupg_fragments was not found" 6 70
  356. umount -f $GPG_USB_MOUNT
  357. rm -rf $GPG_USB_MOUNT
  358. exit 723814
  359. fi
  360. fi
  361. if [ -d $GPG_USB_MOUNT/.gnupg ]; then
  362. if [ ! -d $HOME_DIR/.gnupg ]; then
  363. mkdir $HOME_DIR/.gnupg
  364. fi
  365. cp -r $GPG_USB_MOUNT/.gnupg/* $HOME_DIR/.gnupg
  366. GPG_LOADING="no"
  367. dialog --title "Encryption keys" \
  368. --msgbox "GPG Keyring loaded to $HOME_DIR" 6 70
  369. else
  370. if [ ! -d $HOME_DIR/.gnupg_fragments ]; then
  371. mkdir $HOME_DIR/.gnupg_fragments
  372. fi
  373. cp -r $GPG_USB_MOUNT/.gnupg_fragments/* $HOME_DIR/.gnupg_fragments
  374. fi
  375. if [[ $SSH_IMPORTED == "no" ]]; then
  376. if [ -d $GPG_USB_MOUNT/.ssh ]; then
  377. if [ ! -d $HOME_DIR/.ssh ]; then
  378. mkdir $HOME_DIR/.ssh
  379. fi
  380. cp $GPG_USB_MOUNT/.ssh/* $HOME_DIR/.ssh
  381. dialog --title "Encryption keys" \
  382. --msgbox "ssh keys imported" 6 70
  383. SSH_IMPORTED="yes"
  384. fi
  385. fi
  386. umount -f $GPG_USB_MOUNT
  387. rm -rf $GPG_USB_MOUNT
  388. if [[ $GPG_LOADING == "yes" ]]; then
  389. dialog --title "Encryption keys" \
  390. --msgbox "Now remove the USB drive. Insert the next drive containing a key fragment, or select Ok to finish" 6 70
  391. fi
  392. GPG_CTR=$((GPG_CTR + 1))
  393. done
  394. }
  395. function interactive_gpg {
  396. GPG_CONFIGURED="no"
  397. while [[ $GPG_CONFIGURED != "yes" ]]
  398. do
  399. GPG_CONFIGURED="yes"
  400. data=$(tempfile 2>/dev/null)
  401. trap "rm -f $data" 0 1 2 5 15
  402. dialog --backtitle "Freedombone Configuration" \
  403. --radiolist "GPG/PGP keys for your system:" 13 70 3 \
  404. 1 "Generate new keys (new user)" on \
  405. 2 "Import keys from USB drive/s" off \
  406. 3 "Retrieve keys from friends servers" off 2> $data
  407. sel=$?
  408. case $sel in
  409. 1) exit 1;;
  410. 255) exit 2;;
  411. esac
  412. case $(cat $data) in
  413. 1) return;;
  414. 2) interactive_gpg_from_usb
  415. return;;
  416. 3) interactive_gpg_from_remote
  417. if [ ! "$?" = "0" ]; then
  418. GPG_CONFIGURED="no"
  419. fi;;
  420. esac
  421. done
  422. }
  423. function interactive_configuration {
  424. # create a temporary copy of the configuration file
  425. # which can be used to pre-populate selections
  426. if [ -f $CONFIGURATION_FILE ]; then
  427. cp $CONFIGURATION_FILE temp.cfg
  428. fi
  429. FREEDNS_MESSAGE="Please enter the FreeDNS code for this domain.\n\nThe code can be found by going to https://freedns.afraid.org, selecting 'Dynamic DNS' and then opening 'Wget example'. The code will consist of letters and numbers and be between the ? and = characters."
  430. 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
  431. data=$(tempfile 2>/dev/null)
  432. trap "rm -f $data" 0 1 2 5 15
  433. dialog --backtitle "Freedombone Configuration" \
  434. --radiolist "Type of Installation:" 17 40 9 \
  435. 1 Full on \
  436. 2 Writer off \
  437. 3 Cloud off \
  438. 4 Chat off \
  439. 5 Mailbox off \
  440. 6 Non-Mailbox off \
  441. 7 Social off \
  442. 8 Media off \
  443. 9 Developer off 2> $data
  444. sel=$?
  445. case $sel in
  446. 1) exit 1;;
  447. 255) exit 1;;
  448. esac
  449. case $(cat $data) in
  450. 1) SYSTEM_TYPE=$VARIANT_FULL;;
  451. 2) SYSTEM_TYPE=$VARIANT_WRITER;;
  452. 3) SYSTEM_TYPE=$VARIANT_CLOUD;;
  453. 4) SYSTEM_TYPE=$VARIANT_CHAT;;
  454. 5) SYSTEM_TYPE=$VARIANT_MAILBOX;;
  455. 6) SYSTEM_TYPE=$VARIANT_NONMAILBOX;;
  456. 7) SYSTEM_TYPE=$VARIANT_SOCIAL;;
  457. 8) SYSTEM_TYPE=$VARIANT_MEDIA;;
  458. 9) SYSTEM_TYPE=$VARIANT_DEVELOPER;;
  459. esac
  460. save_configuration_file
  461. data=$(tempfile 2>/dev/null)
  462. trap "rm -f $data" 0 1 2 5 15
  463. dialog --title "Select the user account to install as" \
  464. --backtitle "Freedombone Configuration" \
  465. --dselect "/home/$(grep 'MY_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 14 40 2> $data
  466. sel=$?
  467. case $sel in
  468. 0) MY_USERNAME=$(cat $data | awk -F '/' '{print $3}');;
  469. 1) exit 1;;
  470. 255) exit 1;;
  471. esac
  472. if [ ! $MY_USERNAME ]; then
  473. echo 'No user account was selected'
  474. exit 64398
  475. fi
  476. if [[ $MY_USERNAME == '-f' ]]; then
  477. echo 'No user account was selected'
  478. exit 8347
  479. fi
  480. if [[ $MY_USERNAME == 'debian' ]]; then
  481. echo "Don't use the default debian user account"
  482. exit 9341
  483. fi
  484. if [ ! -d /home/$MY_USERNAME ]; then
  485. echo "The directory /home/$MY_USERNAME does not exist"
  486. exit 6437
  487. fi
  488. save_configuration_file
  489. if [[ $(grep "INSTALLING_ON_BBB" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then
  490. dialog --title "Install Target" \
  491. --backtitle "Freedombone Configuration" \
  492. --yesno "\nAre you installing onto a Beaglebone Black?" 7 60
  493. else
  494. dialog --title "Install Target" \
  495. --backtitle "Freedombone Configuration" \
  496. --defaultno \
  497. --yesno "\nAre you installing onto a Beaglebone Black?" 7 60
  498. fi
  499. sel=$?
  500. case $sel in
  501. 0) INSTALLING_ON_BBB="yes";;
  502. 1) INSTALLING_ON_BBB="no";;
  503. 255) exit 1;;
  504. esac
  505. if [[ $INSTALLING_ON_BBB == "yes" ]]; then
  506. USB_DRIVE=/dev/sda1
  507. fi
  508. save_configuration_file
  509. interactive_gpg
  510. data=$(tempfile 2>/dev/null)
  511. trap "rm -f $data" 0 1 2 5 15
  512. SOCIAL_KEY_STR="\nDo you wish to enable social key management, otherwise known as \"the unforgettable key\"?\n\nThis means that fragments of your GPG key will be included with any remote backups so that if you later lose your key then it can be reconstructed from your friends servers. If you select \"no\" then you can still do social key management, but offline using physical USB thumb drives, which is more secure but less convenient."
  513. if [[ $(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then
  514. dialog --title "Social Key Management" \
  515. --backtitle "Freedombone Configuration" \
  516. --yesno "$SOCIAL_KEY_STR" 15 60
  517. else
  518. dialog --title "Social Key Management" \
  519. --backtitle "Freedombone Configuration" \
  520. --defaultno \
  521. --yesno "$SOCIAL_KEY_STR" 15 60
  522. fi
  523. sel=$?
  524. case $sel in
  525. 0) ENABLE_SOCIAL_KEY_MANAGEMENT="yes";;
  526. 255) exit 1;;
  527. esac
  528. save_configuration_file
  529. data=$(tempfile 2>/dev/null)
  530. trap "rm -f $data" 0 1 2 5 15
  531. if [[ $INSTALLING_ON_BBB == "no" ]]; then
  532. dialog --backtitle "Freedombone Configuration" \
  533. --radiolist "Type of Random Number Generator:" 10 40 3 \
  534. 1 Haveged on \
  535. 2 "Beaglebone built-in HRNG" off \
  536. 3 OneRNG off 2> $data
  537. else
  538. dialog --backtitle "Freedombone Configuration" \
  539. --radiolist "Type of Random Number Generator:" 10 40 3 \
  540. 1 Haveged off \
  541. 2 "Beaglebone built-in HRNG" on \
  542. 3 OneRNG off 2> $data
  543. fi
  544. sel=$?
  545. case $sel in
  546. 1) exit 1;;
  547. 255) exit 1;;
  548. esac
  549. case $(cat $data) in
  550. 2) HWRNG_TYPE="beaglebone";;
  551. 3) HWRNG_TYPE="onerng"
  552. dialog --title "OneRNG Device" \
  553. --msgbox "Please ensure that the OneRNG device is disconnected. You can reconnect it later during the installation" 8 60
  554. ;;
  555. 255) exit 1;;
  556. esac
  557. save_configuration_file
  558. data=$(tempfile 2>/dev/null)
  559. trap "rm -f $data" 0 1 2 5 15
  560. dialog --backtitle "Freedombone Configuration" \
  561. --radiolist "Where to download Debian packages from:" 25 45 49 \
  562. 1 "Australia" off \
  563. 2 "Austria" off \
  564. 3 "Belarus" off \
  565. 4 "Belgium" off \
  566. 5 "Bosnia and Herzegovina" off \
  567. 6 "Brazil" off \
  568. 7 "Bulgaria" off \
  569. 8 "Canada" off \
  570. 9 "Chile" off \
  571. 10 "China" off \
  572. 11 "Croatia" off \
  573. 12 "Czech Republic" off \
  574. 13 "Denmark" off \
  575. 14 "El Salvador" off \
  576. 15 "Estonia" off \
  577. 16 "Finland" off \
  578. 17 "France 1" off \
  579. 18 "France 2" off \
  580. 19 "Germany 1" off \
  581. 20 "Germany 2" off \
  582. 21 "Greece" off \
  583. 22 "Hungary" off \
  584. 23 "Iceland" off \
  585. 24 "Iran" off \
  586. 25 "Ireland" off \
  587. 26 "Italy" off \
  588. 27 "Japan" off \
  589. 28 "Korea" off \
  590. 29 "Lithuania" off \
  591. 30 "Mexico" off \
  592. 31 "Netherlands" off \
  593. 32 "New Caledonia" off \
  594. 33 "New Zealand" off \
  595. 34 "Norway" off \
  596. 35 "Poland" off \
  597. 36 "Portugal" off \
  598. 37 "Romania" off \
  599. 38 "Russia" off \
  600. 39 "Slovakia" off \
  601. 40 "Slovenia" off \
  602. 41 "Spain" off \
  603. 42 "Sweden" off \
  604. 43 "Switzerland" off \
  605. 44 "Taiwan" off \
  606. 45 "Thailand" off \
  607. 46 "Turkey" off \
  608. 47 "Ukraine" off \
  609. 48 "United Kingdom" off \
  610. 49 "United States" on 2> $data
  611. sel=$?
  612. case $sel in
  613. 1) exit 1;;
  614. 255) exit 1;;
  615. esac
  616. case $(cat $data) in
  617. 1) DEBIAN_REPO='ftp.au.debian.org';;
  618. 2) DEBIAN_REPO='ftp.at.debian.org';;
  619. 3) DEBIAN_REPO='ftp.by.debian.org';;
  620. 4) DEBIAN_REPO='ftp.be.debian.org';;
  621. 5) DEBIAN_REPO='ftp.ba.debian.org';;
  622. 6) DEBIAN_REPO='ftp.br.debian.org';;
  623. 7) DEBIAN_REPO='ftp.bg.debian.org';;
  624. 8) DEBIAN_REPO='ftp.ca.debian.org';;
  625. 9) DEBIAN_REPO='ftp.cl.debian.org';;
  626. 10) DEBIAN_REPO='ftp.cn.debian.org';;
  627. 11) DEBIAN_REPO='ftp.hr.debian.org';;
  628. 12) DEBIAN_REPO='ftp.cz.debian.org';;
  629. 13) DEBIAN_REPO='ftp.dk.debian.org';;
  630. 14) DEBIAN_REPO='ftp.sv.debian.org';;
  631. 15) DEBIAN_REPO='ftp.ee.debian.org';;
  632. 16) DEBIAN_REPO='ftp.fi.debian.org';;
  633. 17) DEBIAN_REPO='ftp2.fr.debian.org';;
  634. 18) DEBIAN_REPO='ftp.fr.debian.org';;
  635. 19) DEBIAN_REPO='ftp2.de.debian.org';;
  636. 20) DEBIAN_REPO='ftp.de.debian.org';;
  637. 21) DEBIAN_REPO='ftp.gr.debian.org';;
  638. 22) DEBIAN_REPO='ftp.hu.debian.org';;
  639. 23) DEBIAN_REPO='ftp.is.debian.org';;
  640. 24) DEBIAN_REPO='ftp.ir.debian.org';;
  641. 25) DEBIAN_REPO='ftp.ie.debian.org';;
  642. 26) DEBIAN_REPO='ftp.it.debian.org';;
  643. 27) DEBIAN_REPO='ftp.jp.debian.org';;
  644. 28) DEBIAN_REPO='ftp.kr.debian.org';;
  645. 29) DEBIAN_REPO='ftp.lt.debian.org';;
  646. 30) DEBIAN_REPO='ftp.mx.debian.org';;
  647. 31) DEBIAN_REPO='ftp.nl.debian.org';;
  648. 32) DEBIAN_REPO='ftp.nc.debian.org';;
  649. 33) DEBIAN_REPO='ftp.nz.debian.org';;
  650. 34) DEBIAN_REPO='ftp.no.debian.org';;
  651. 35) DEBIAN_REPO='ftp.pl.debian.org';;
  652. 36) DEBIAN_REPO='ftp.pt.debian.org';;
  653. 37) DEBIAN_REPO='ftp.ro.debian.org';;
  654. 38) DEBIAN_REPO='ftp.ru.debian.org';;
  655. 39) DEBIAN_REPO='ftp.sk.debian.org';;
  656. 40) DEBIAN_REPO='ftp.si.debian.org';;
  657. 41) DEBIAN_REPO='ftp.es.debian.org';;
  658. 42) DEBIAN_REPO='ftp.se.debian.org';;
  659. 43) DEBIAN_REPO='ftp.ch.debian.org';;
  660. 44) DEBIAN_REPO='ftp.tw.debian.org';;
  661. 45) DEBIAN_REPO='ftp.th.debian.org';;
  662. 46) DEBIAN_REPO='ftp.tr.debian.org';;
  663. 47) DEBIAN_REPO='ftp.ua.debian.org';;
  664. 48) DEBIAN_REPO='ftp.uk.debian.org';;
  665. 49) DEBIAN_REPO='ftp.us.debian.org';;
  666. 255) exit 1;;
  667. esac
  668. save_configuration_file
  669. data=$(tempfile 2>/dev/null)
  670. trap "rm -f $data" 0 1 2 5 15
  671. dialog --backtitle "Freedombone Configuration" \
  672. --radiolist "Pick a domain name service (DNS):" 25 50 16 \
  673. 1 "Digital Courage" on \
  674. 2 "German Privacy Foundation 1" off \
  675. 3 "German Privacy Foundation 2" off \
  676. 4 "Chaos Computer Club" off \
  677. 5 "ClaraNet" off \
  678. 6 "OpenNIC 1" off \
  679. 7 "OpenNIC 2" off \
  680. 8 "OpenNIC 3" off \
  681. 9 "OpenNIC 4" off \
  682. 10 "OpenNIC 5" off \
  683. 11 "OpenNIC 6" off \
  684. 12 "OpenNIC 7" off \
  685. 13 "PowerNS" off \
  686. 14 "ValiDOM" off \
  687. 15 "Freie Unzensierte" off \
  688. 16 "Google" off 2> $data
  689. sel=$?
  690. case $sel in
  691. 1) exit 1;;
  692. 255) exit 1;;
  693. esac
  694. case $(cat $data) in
  695. 1) NAMESERVER1='85.214.73.63'
  696. NAMESERVER2='213.73.91.35'
  697. ;;
  698. 2) NAMESERVER1='87.118.100.175'
  699. NAMESERVER2='94.75.228.29'
  700. ;;
  701. 3) NAMESERVER1='85.25.251.254'
  702. NAMESERVER2='2.141.58.13'
  703. ;;
  704. 4) NAMESERVER1='213.73.91.35'
  705. NAMESERVER2='85.214.73.63'
  706. ;;
  707. 5) NAMESERVER1='212.82.225.7'
  708. NAMESERVER2='212.82.226.212'
  709. ;;
  710. 6) NAMESERVER1='58.6.115.42'
  711. NAMESERVER2='58.6.115.43'
  712. ;;
  713. 7) NAMESERVER1='119.31.230.42'
  714. NAMESERVER2='200.252.98.162'
  715. ;;
  716. 8) NAMESERVER1='217.79.186.148'
  717. NAMESERVER2='81.89.98.6'
  718. ;;
  719. 9) NAMESERVER1='78.159.101.37'
  720. NAMESERVER2='203.167.220.153'
  721. ;;
  722. 10) NAMESERVER1='82.229.244.191'
  723. NAMESERVER2='82.229.244.191'
  724. ;;
  725. 11) NAMESERVER1='216.87.84.211'
  726. NAMESERVER2='66.244.95.20'
  727. ;;
  728. 12) NAMESERVER1='207.192.69.155'
  729. NAMESERVER2='72.14.189.120'
  730. ;;
  731. 13) NAMESERVER1='194.145.226.26'
  732. NAMESERVER2='77.220.232.44'
  733. ;;
  734. 14) NAMESERVER1='78.46.89.147'
  735. NAMESERVER2='88.198.75.145'
  736. ;;
  737. 15) NAMESERVER1='85.25.149.144'
  738. NAMESERVER2='87.106.37.196'
  739. ;;
  740. 16) NAMESERVER1='8.8.8.8'
  741. NAMESERVER2='4.4.4.4'
  742. ;;
  743. 255) exit 1;;
  744. esac
  745. save_configuration_file
  746. data=$(tempfile 2>/dev/null)
  747. trap "rm -f $data" 0 1 2 5 15
  748. dialog --backtitle "Freedombone Configuration" \
  749. --radiolist "Choose Dynamic DNS provider:" 15 40 14 \
  750. 1 dyndns off \
  751. 2 freedns on \
  752. 3 zoneedit off \
  753. 4 no-ip off \
  754. 5 easydns off \
  755. 6 tzo off \
  756. 7 3322 off \
  757. 8 dnsomatic off \
  758. 9 tunnelbroker off \
  759. 10 dns.he.net off \
  760. 11 dynsip off \
  761. 12 sitelutions off \
  762. 13 dnsexit off \
  763. 14 changeip off 2> $data
  764. sel=$?
  765. case $sel in
  766. 1) exit 1;;
  767. 255) exit 1;;
  768. esac
  769. case $(cat $data) in
  770. 1) DDNS_PROVIDER="default@dyndns.org";;
  771. 2) DDNS_PROVIDER="default@freedns.afraid.org";;
  772. 3) DDNS_PROVIDER="default@zoneedit.com";;
  773. 4) DDNS_PROVIDER="default@no-ip.com";;
  774. 5) DDNS_PROVIDER="default@easydns.com";;
  775. 6) DDNS_PROVIDER="default@tzo.com";;
  776. 7) DDNS_PROVIDER="dyndns@3322.org";;
  777. 8) DDNS_PROVIDER="default@dnsomatic.com";;
  778. 9) DDNS_PROVIDER="ipv6tb@he.net";;
  779. 10) DDNS_PROVIDER="dyndns@he.net";;
  780. 11) DDNS_PROVIDER="default@dynsip.org";;
  781. 12) DDNS_PROVIDER="default@sitelutions.com";;
  782. 13) DDNS_PROVIDER="default@dnsexit.com";;
  783. 14) DDNS_PROVIDER="default@changeip.com";;
  784. 255) exit 1;;
  785. esac
  786. save_configuration_file
  787. while [ ! $DDNS_USERNAME ]
  788. do
  789. data=$(tempfile 2>/dev/null)
  790. trap "rm -f $data" 0 1 2 5 15
  791. dialog --backtitle "Freedombone Configuration" \
  792. --inputbox "Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  793. sel=$?
  794. case $sel in
  795. 0) DDNS_USERNAME=$(cat $data);;
  796. 1) exit 1;;
  797. 255) exit 1;;
  798. esac
  799. done
  800. save_configuration_file
  801. while [ ! $DDNS_PASSWORD ]
  802. do
  803. data=$(tempfile 2>/dev/null)
  804. trap "rm -f $data" 0 1 2 5 15
  805. dialog --backtitle "Freedombone Configuration" \
  806. --clear \
  807. --insecure \
  808. --passwordbox "Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  809. sel=$?
  810. case $sel in
  811. 0) DDNS_PASSWORD=$(cat $data);;
  812. 1) exit 1;;
  813. 255) exit 1;;
  814. esac
  815. if [ ${#DDNS_PASSWORD} -lt $MINIMUM_PASSWORD_LENGTH ]; then
  816. 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
  817. DDNS_PASSWORD=""
  818. fi
  819. done
  820. save_configuration_file
  821. while [ ! $MY_NAME ]
  822. do
  823. data=$(tempfile 2>/dev/null)
  824. trap "rm -f $data" 0 1 2 5 15
  825. dialog --backtitle "Freedombone Configuration" \
  826. --inputbox "Your full name (or nick)" 10 30 "$(grep 'MY_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  827. sel=$?
  828. case $sel in
  829. 0) MY_NAME=$(cat $data);;
  830. 1) exit 1;;
  831. 255) exit 1;;
  832. esac
  833. done
  834. save_configuration_file
  835. if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  836. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep 'LOCAL_NETWORK_STATIC_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  837. if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  838. LOCAL_NETWORK_STATIC_IP_ADDRESS='192.168..'
  839. fi
  840. fi
  841. if [ ! $ROUTER_IP_ADDRESS ]; then
  842. ROUTER_IP_ADDRESS=$(grep 'ROUTER_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  843. if [ ! $ROUTER_IP_ADDRESS ]; then
  844. ROUTER_IP_ADDRESS='192.168..'
  845. fi
  846. fi
  847. data=$(tempfile 2>/dev/null)
  848. trap "rm -f $data" 0 1 2 5 15
  849. dialog --backtitle "Freedombone Configuration" \
  850. --title "Local Network Configuration" \
  851. --form "\nPlease enter the IP addresses:" 11 55 3 \
  852. "This system:" 1 1 "$LOCAL_NETWORK_STATIC_IP_ADDRESS" 1 16 16 15 \
  853. "Internet router:" 2 1 "$ROUTER_IP_ADDRESS" 2 16 16 15 \
  854. 2> $data
  855. sel=$?
  856. case $sel in
  857. 1) exit 1;;
  858. 255) exit 1;;
  859. esac
  860. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(cat $data | sed -n 1p)
  861. ROUTER_IP_ADDRESS=$(cat $data | sed -n 2p)
  862. save_configuration_file
  863. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  864. WIKI_DETAILS_COMPLETE=
  865. while [ ! $WIKI_DETAILS_COMPLETE ]
  866. do
  867. data=$(tempfile 2>/dev/null)
  868. trap "rm -f $data" 0 1 2 5 15
  869. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  870. dialog --backtitle "Freedombone Configuration" \
  871. --title "Wiki Configuration" \
  872. --form "\nPlease enter your wiki details:" 11 55 4 \
  873. "Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  874. "Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \
  875. "Code:" 3 1 "$(grep 'WIKI_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 25 40 \
  876. 2> $data
  877. else
  878. dialog --backtitle "Freedombone Configuration" \
  879. --title "Wiki Configuration" \
  880. --form "\nPlease enter your wiki details:" 11 55 3 \
  881. "Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  882. "Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \
  883. 2> $data
  884. fi
  885. sel=$?
  886. case $sel in
  887. 1) exit 1;;
  888. 255) exit 1;;
  889. esac
  890. WIKI_TITLE=$(cat $data | sed -n 1p)
  891. WIKI_DOMAIN_NAME=$(cat $data | sed -n 2p)
  892. if [ $WIKI_DOMAIN_NAME ]; then
  893. TEST_DOMAIN_NAME=$WIKI_DOMAIN_NAME
  894. validate_domain_name
  895. if [[ $TEST_DOMAIN_NAME != $WIKI_DOMAIN_NAME ]]; then
  896. WIKI_DOMAIN_NAME=
  897. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  898. else
  899. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  900. WIKI_CODE=$(cat $data | sed -n 3p)
  901. if [ ${#WIKI_CODE} -lt 30 ]; then
  902. WIKI_DOMAIN_NAME=
  903. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  904. fi
  905. fi
  906. fi
  907. fi
  908. if [ $WIKI_DOMAIN_NAME ]; then
  909. WIKI_DETAILS_COMPLETE="yes"
  910. fi
  911. done
  912. save_configuration_file
  913. fi
  914. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  915. FULLBLOG_DETAILS_COMPLETE=
  916. while [ ! $FULLBLOG_DETAILS_COMPLETE ]
  917. do
  918. data=$(tempfile 2>/dev/null)
  919. trap "rm -f $data" 0 1 2 5 15
  920. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  921. dialog --backtitle "Freedombone Configuration" \
  922. --title "Blog Configuration" \
  923. --form "\nPlease enter your blog details:" 11 55 4 \
  924. "Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  925. "Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  926. "Code:" 3 1 "$(grep 'FULLBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 25 30 \
  927. 2> $data
  928. else
  929. dialog --backtitle "Freedombone Configuration" \
  930. --title "Blog Configuration" \
  931. --form "\nPlease enter your blog details:" 11 55 3 \
  932. "Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  933. "Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  934. 2> $data
  935. fi
  936. sel=$?
  937. case $sel in
  938. 1) exit 1;;
  939. 255) exit 1;;
  940. esac
  941. MY_BLOG_TITLE=$(cat $data | sed -n 1p)
  942. FULLBLOG_DOMAIN_NAME=$(cat $data | sed -n 2p)
  943. if [ $FULLBLOG_DOMAIN_NAME ]; then
  944. if [[ $FULLBLOG_DOMAIN_NAME == "$WIKI_DOMAIN_NAME" ]]; then
  945. FULLBLOG_DOMAIN_NAME=""
  946. fi
  947. TEST_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME
  948. validate_domain_name
  949. if [[ $TEST_DOMAIN_NAME != $FULLBLOG_DOMAIN_NAME ]]; then
  950. FULLBLOG_DOMAIN_NAME=
  951. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  952. else
  953. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  954. FULLBLOG_CODE=$(cat $data | sed -n 3p)
  955. if [ ${#FULLBLOG_CODE} -lt 30 ]; then
  956. FULLBLOG_DOMAIN_NAME=
  957. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  958. fi
  959. fi
  960. fi
  961. fi
  962. if [ $FULLBLOG_DOMAIN_NAME ]; then
  963. FULLBLOG_DETAILS_COMPLETE="yes"
  964. fi
  965. done
  966. save_configuration_file
  967. fi
  968. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  969. OWNCLOUD_DETAILS_COMPLETE=
  970. while [ ! $OWNCLOUD_DETAILS_COMPLETE ]
  971. do
  972. data=$(tempfile 2>/dev/null)
  973. trap "rm -f $data" 0 1 2 5 15
  974. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  975. dialog --backtitle "Freedombone Configuration" \
  976. --title "Owncloud Configuration" \
  977. --form "\nPlease enter your Owncloud details:" 11 55 3 \
  978. "Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  979. "Code:" 2 1 "$(grep 'OWNCLOUD_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  980. 2> $data
  981. else
  982. dialog --backtitle "Freedombone Configuration" \
  983. --title "Owncloud Configuration" \
  984. --form "\nPlease enter your Owncloud details:" 11 55 3 \
  985. "Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  986. 2> $data
  987. fi
  988. sel=$?
  989. case $sel in
  990. 1) exit 1;;
  991. 255) exit 1;;
  992. esac
  993. OWNCLOUD_DOMAIN_NAME=$(cat $data | sed -n 1p)
  994. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  995. TEST_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME
  996. validate_domain_name
  997. if [[ $TEST_DOMAIN_NAME != $OWNCLOUD_DOMAIN_NAME ]]; then
  998. OWNCLOUD_DOMAIN_NAME=
  999. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1000. else
  1001. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1002. OWNCLOUD_CODE=$(cat $data | sed -n 2p)
  1003. if [ ${#OWNCLOUD_CODE} -lt 30 ]; then
  1004. OWNCLOUD_DOMAIN_NAME=
  1005. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1006. fi
  1007. fi
  1008. fi
  1009. fi
  1010. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  1011. OWNCLOUD_DETAILS_COMPLETE="yes"
  1012. fi
  1013. done
  1014. save_configuration_file
  1015. fi
  1016. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1017. REDMATRIX_DETAILS_COMPLETE=
  1018. while [ ! $REDMATRIX_DETAILS_COMPLETE ]
  1019. do
  1020. data=$(tempfile 2>/dev/null)
  1021. trap "rm -f $data" 0 1 2 5 15
  1022. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1023. dialog --backtitle "Freedombone Configuration" \
  1024. --title "RedMatrix Configuration" \
  1025. --form "\nPlease enter your RedMatrix details:" 11 55 3 \
  1026. "Domain:" 1 1 "$(grep 'REDMATRIX_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1027. "Code:" 2 1 "$(grep 'REDMATRIX_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1028. 2> $data
  1029. else
  1030. dialog --backtitle "Freedombone Configuration" \
  1031. --title "RedMatrix Configuration" \
  1032. --form "\nPlease enter your RedMatrix details:" 11 55 3 \
  1033. "Domain:" 1 1 "$(grep 'REDMATRIX_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1034. 2> $data
  1035. fi
  1036. sel=$?
  1037. case $sel in
  1038. 1) exit 1;;
  1039. 255) exit 1;;
  1040. esac
  1041. REDMATRIX_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1042. if [ $REDMATRIX_DOMAIN_NAME ]; then
  1043. TEST_DOMAIN_NAME=$REDMATRIX_DOMAIN_NAME
  1044. validate_domain_name
  1045. if [[ $TEST_DOMAIN_NAME != $REDMATRIX_DOMAIN_NAME ]]; then
  1046. REDMATRIX_DOMAIN_NAME=
  1047. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1048. else
  1049. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1050. REDMATRIX_CODE=$(cat $data | sed -n 2p)
  1051. if [ ${#REDMATRIX_CODE} -lt 30 ]; then
  1052. REDMATRIX_DOMAIN_NAME=
  1053. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1054. fi
  1055. fi
  1056. fi
  1057. fi
  1058. if [ $REDMATRIX_DOMAIN_NAME ]; then
  1059. REDMATRIX_DETAILS_COMPLETE="yes"
  1060. fi
  1061. done
  1062. save_configuration_file
  1063. fi
  1064. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1065. MICROBLOG_DETAILS_COMPLETE=
  1066. while [ ! $MICROBLOG_DETAILS_COMPLETE ]
  1067. do
  1068. data=$(tempfile 2>/dev/null)
  1069. trap "rm -f $data" 0 1 2 5 15
  1070. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1071. dialog --backtitle "Freedombone Configuration" \
  1072. --title "Microblog Configuration" \
  1073. --form "\nPlease enter your Microblog details:" 11 55 3 \
  1074. "Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1075. "Code:" 2 1 "$(grep 'MICROBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1076. 2> $data
  1077. else
  1078. dialog --backtitle "Freedombone Configuration" \
  1079. --title "Microblog Configuration" \
  1080. --form "\nPlease enter your Microblog details:" 11 55 3 \
  1081. "Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1082. 2> $data
  1083. fi
  1084. sel=$?
  1085. case $sel in
  1086. 1) exit 1;;
  1087. 255) exit 1;;
  1088. esac
  1089. MICROBLOG_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1090. if [ $MICROBLOG_DOMAIN_NAME ]; then
  1091. if [[ $MICROBLOG_DOMAIN_NAME == "$REDMATRIX_DOMAIN_NAME" ]]; then
  1092. MICROBLOG_DOMAIN_NAME=""
  1093. fi
  1094. TEST_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME
  1095. validate_domain_name
  1096. if [[ $TEST_DOMAIN_NAME != $MICROBLOG_DOMAIN_NAME ]]; then
  1097. MICROBLOG_DOMAIN_NAME=
  1098. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1099. else
  1100. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1101. MICROBLOG_CODE=$(cat $data | sed -n 2p)
  1102. if [ ${#MICROBLOG_CODE} -lt 30 ]; then
  1103. MICROBLOG_DOMAIN_NAME=
  1104. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1105. fi
  1106. fi
  1107. fi
  1108. fi
  1109. if [ $MICROBLOG_DOMAIN_NAME ]; then
  1110. MICROBLOG_DETAILS_COMPLETE="yes"
  1111. fi
  1112. done
  1113. save_configuration_file
  1114. fi
  1115. if [[ $SYSTEM_TYPE == "$VARIANT_DEVELOPER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1116. DEVELOPER_DETAILS_COMPLETE=
  1117. while [ ! $DEVELOPER_DETAILS_COMPLETE ]
  1118. do
  1119. data=$(tempfile 2>/dev/null)
  1120. trap "rm -f $data" 0 1 2 5 15
  1121. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1122. dialog --backtitle "Freedombone Configuration" \
  1123. --title "Developer Configuration" \
  1124. --form "\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 3 \
  1125. "Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  1126. "Code:" 2 1 "$(grep 'GIT_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \
  1127. 2> $data
  1128. else
  1129. dialog --backtitle "Freedombone Configuration" \
  1130. --title "Developer Configuration" \
  1131. --form "\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 2 \
  1132. "Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  1133. 2> $data
  1134. fi
  1135. sel=$?
  1136. case $sel in
  1137. 1) exit 1;;
  1138. 255) exit 1;;
  1139. esac
  1140. GIT_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1141. if [ $GIT_DOMAIN_NAME ]; then
  1142. TEST_DOMAIN_NAME=$GIT_DOMAIN_NAME
  1143. validate_domain_name
  1144. if [[ $TEST_DOMAIN_NAME != $GIT_DOMAIN_NAME ]]; then
  1145. GIT_DOMAIN_NAME=
  1146. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1147. else
  1148. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1149. GIT_CODE=$(cat $data | sed -n 2p)
  1150. if [ ${#GIT_CODE} -lt 30 ]; then
  1151. GIT_DOMAIN_NAME=
  1152. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1153. fi
  1154. fi
  1155. fi
  1156. else
  1157. DEVELOPER_DETAILS_COMPLETE="yes"
  1158. fi
  1159. if [ $GIT_DOMAIN_NAME ]; then
  1160. DEVELOPER_DETAILS_COMPLETE="yes"
  1161. fi
  1162. done
  1163. save_configuration_file
  1164. fi
  1165. DEFAULT_DOMAIN_DETAILS_COMPLETE=
  1166. while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ]
  1167. do
  1168. data=$(tempfile 2>/dev/null)
  1169. trap "rm -f $data" 0 1 2 5 15
  1170. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1171. dialog --backtitle "Freedombone Configuration" \
  1172. --title "Default Domain" \
  1173. --form "\nWhich domain name should your email/XMPP/IRC/VoIP be associated with?" 11 55 3 \
  1174. "Domain:" 1 1 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1175. "Code:" 2 1 "$(grep 'DEFAULT_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1176. 2> $data
  1177. sel=$?
  1178. case $sel in
  1179. 1) exit 1;;
  1180. 255) exit 1;;
  1181. esac
  1182. DEFAULT_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1183. DEFAULT_DOMAIN_CODE=$(cat $data | sed -n 2p)
  1184. if [ $DEFAULT_DOMAIN_NAME ]; then
  1185. if [ ${#DEFAULT_DOMAIN_CODE} -lt 30 ]; then
  1186. DEFAULT_DOMAIN_NAME=
  1187. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1188. fi
  1189. fi
  1190. else
  1191. dialog --backtitle "Freedombone Configuration" \
  1192. --inputbox "Which domain name should your email/XMPP/IRC/VoIP be associated with?" 10 45 \
  1193. "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  1194. sel=$?
  1195. case $sel in
  1196. 0) DEFAULT_DOMAIN_NAME=$(cat $data);;
  1197. 1) exit 1;;
  1198. 255) exit 1;;
  1199. esac
  1200. fi
  1201. if [ $DEFAULT_DOMAIN_NAME ]; then
  1202. TEST_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME
  1203. validate_domain_name
  1204. if [[ $TEST_DOMAIN_NAME != $DEFAULT_DOMAIN_NAME ]]; then
  1205. DEFAULT_DOMAIN_NAME=
  1206. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1207. else
  1208. DEFAULT_DOMAIN_DETAILS_COMPLETE="yes"
  1209. fi
  1210. fi
  1211. done
  1212. save_configuration_file
  1213. while [ ${#MY_EMAIL_ADDRESS} -lt 5 ]
  1214. do
  1215. EMAIL_ADDRESS=$(grep 'MY_EMAIL_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  1216. if [ ! $EMAIL_ADDRESS ]; then
  1217. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  1218. fi
  1219. if [ ${#MY_EMAIL_ADDRESS} -lt 5 ]; then
  1220. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  1221. fi
  1222. data=$(tempfile 2>/dev/null)
  1223. trap "rm -f $data" 0 1 2 5 15
  1224. dialog --backtitle "Freedombone Configuration" \
  1225. --inputbox "Your email address" 10 30 "$EMAIL_ADDRESS" 2> $data
  1226. sel=$?
  1227. case $sel in
  1228. 0) MY_EMAIL_ADDRESS=$(cat $data);;
  1229. 1) exit 1;;
  1230. 255) exit 1;;
  1231. esac
  1232. done
  1233. save_configuration_file
  1234. # delete the temporary configuration file
  1235. if [ -f temp.cfg ]; then
  1236. shred -zu temp.cfg
  1237. fi
  1238. }
  1239. function show_result {
  1240. clear
  1241. echo ''
  1242. echo "Configuration filename: $CONFIGURATION_FILE"
  1243. echo ''
  1244. echo 'Contents:'
  1245. echo ''
  1246. cat $CONFIGURATION_FILE
  1247. echo ''
  1248. }
  1249. function read_configuration {
  1250. if [ ! $CONFIGURATION_FILE ]; then
  1251. CONFIGURATION_FILE='freedombone.cfg'
  1252. fi
  1253. if [ -f $CONFIGURATION_FILE ]; then
  1254. if grep -q "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE; then
  1255. ENABLE_SOCIAL_KEY_MANAGEMENT=$(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1256. fi
  1257. if grep -q "GIT_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1258. GIT_DOMAIN_NAME=$(grep "GIT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1259. fi
  1260. if grep -q "GIT_CODE" $CONFIGURATION_FILE; then
  1261. GIT_CODE=$(grep "GIT_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1262. fi
  1263. if grep -q "MY_USERNAME" $CONFIGURATION_FILE; then
  1264. MY_USERNAME=$(grep "MY_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1265. fi
  1266. if grep -q "DOMAIN_NAME" $CONFIGURATION_FILE; then
  1267. # for backwards compatability
  1268. DEFAULT_DOMAIN_NAME=$(grep "DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1269. fi
  1270. if grep -q "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1271. DEFAULT_DOMAIN_NAME=$(grep "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1272. fi
  1273. if grep -q "DEFAULT_DOMAIN_CODE" $CONFIGURATION_FILE; then
  1274. DEFAULT_DOMAIN_CODE=$(grep "DEFAULT_DOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1275. fi
  1276. if grep -q "NAMESERVER1" $CONFIGURATION_FILE; then
  1277. NAMESERVER1=$(grep "NAMESERVER1" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1278. fi
  1279. if grep -q "NAMESERVER2" $CONFIGURATION_FILE; then
  1280. NAMESERVER2=$(grep "NAMESERVER2" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1281. fi
  1282. if grep -q "DEBIAN_REPO" $CONFIGURATION_FILE; then
  1283. DEBIAN_REPO=$(grep "DEBIAN_REPO" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1284. 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."
  1285. fi
  1286. if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
  1287. DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1288. fi
  1289. if grep -q "DDNS_USERNAME" $CONFIGURATION_FILE; then
  1290. DDNS_USERNAME=$(grep "DDNS_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1291. fi
  1292. if grep -q "DDNS_PASSWORD" $CONFIGURATION_FILE; then
  1293. DDNS_PASSWORD=$(grep "DDNS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1294. fi
  1295. if grep -q "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE; then
  1296. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1297. fi
  1298. if grep -q "ENABLE_CJDNS" $CONFIGURATION_FILE; then
  1299. ENABLE_CJDNS=$(grep "ENABLE_CJDNS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1300. fi
  1301. if grep -q "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE; then
  1302. ROUTER_IP_ADDRESS=$(grep "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1303. fi
  1304. if grep -q "WIKI_TITLE" $CONFIGURATION_FILE; then
  1305. WIKI_TITLE=$(grep "WIKI_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1306. fi
  1307. if grep -q "MY_NAME" $CONFIGURATION_FILE; then
  1308. MY_NAME=$(grep "MY_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1309. fi
  1310. if grep -q "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE; then
  1311. MY_EMAIL_ADDRESS=$(grep "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1312. fi
  1313. if grep -q "INSTALLING_ON_BBB" $CONFIGURATION_FILE; then
  1314. INSTALLING_ON_BBB=$(grep "INSTALLING_ON_BBB" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1315. fi
  1316. if grep -q "USB_DRIVE" $CONFIGURATION_FILE; then
  1317. USB_DRIVE=$(grep "USB_DRIVE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1318. fi
  1319. if grep -q "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE; then
  1320. PUBLIC_MAILING_LIST=$(grep "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1321. fi
  1322. if grep -q "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1323. MICROBLOG_DOMAIN_NAME=$(grep "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1324. fi
  1325. if grep -q "MICROBLOG_CODE" $CONFIGURATION_FILE; then
  1326. MICROBLOG_CODE=$(grep "MICROBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1327. fi
  1328. if grep -q "REDMATRIX_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1329. REDMATRIX_DOMAIN_NAME=$(grep "REDMATRIX_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1330. fi
  1331. if grep -q "REDMATRIX_CODE" $CONFIGURATION_FILE; then
  1332. REDMATRIX_CODE=$(grep "REDMATRIX_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1333. fi
  1334. if grep -q "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1335. OWNCLOUD_DOMAIN_NAME=$(grep "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1336. fi
  1337. if grep -q "OWNCLOUD_CODE" $CONFIGURATION_FILE; then
  1338. OWNCLOUD_CODE=$(grep "OWNCLOUD_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1339. fi
  1340. if grep -q "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1341. WIKI_DOMAIN_NAME=$(grep "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1342. fi
  1343. if grep -q "WIKI_CODE" $CONFIGURATION_FILE; then
  1344. WIKI_CODE=$(grep "WIKI_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1345. fi
  1346. if grep -q "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1347. FULLBLOG_DOMAIN_NAME=$(grep "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1348. fi
  1349. if grep -q "FULLBLOG_CODE" $CONFIGURATION_FILE; then
  1350. FULLBLOG_CODE=$(grep "FULLBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1351. fi
  1352. if grep -q "MY_BLOG_TITLE" $CONFIGURATION_FILE; then
  1353. MY_BLOG_TITLE=$(grep "MY_BLOG_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1354. fi
  1355. if grep -q "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE; then
  1356. MY_BLOG_SUBTITLE=$(grep "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1357. fi
  1358. if grep -q "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1359. MEDIAGOBLIN_DOMAIN_NAME=$(grep "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1360. fi
  1361. if grep -q "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE; then
  1362. MEDIAGOBLIN_CODE=$(grep "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1363. fi
  1364. fi
  1365. }
  1366. read_configuration
  1367. interactive_configuration
  1368. show_result
  1369. exit 0