freedombone-config 79KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966
  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-2016 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 Affero 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 Affero General Public License for more details.
  28. #
  29. # You should have received a copy of the GNU Affero General Public License
  30. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  31. NO_OF_ARGS=$#
  32. PROJECT_NAME='freedombone'
  33. # username created by default within a debian image
  34. GENERIC_IMAGE_USERNAME='fbone'
  35. export TEXTDOMAIN=${PROJECT_NAME}-config
  36. export TEXTDOMAINDIR="/usr/share/locale"
  37. # Web site
  38. FREEDOMBONE_WEBSITE="http://freedombone.uk.to"
  39. # Contact details
  40. FREEDOMBONE_BITMESSAGE="BM-2cWuhmBvVdfrHhLoZTdspCkKeiTorUesSL"
  41. # Minimum number of characters in a password
  42. MINIMUM_PASSWORD_LENGTH=10
  43. # file containing new password
  44. IMAGE_PASSWORD_FILE=/root/login.txt
  45. # Different system variants which may be specified within
  46. # the SYSTEM_TYPE option
  47. VARIANT_FULL="full"
  48. VARIANT_WRITER="writer"
  49. VARIANT_CLOUD="cloud"
  50. VARIANT_CHAT="chat"
  51. VARIANT_MAILBOX="mailbox"
  52. VARIANT_NONMAILBOX="nonmailbox"
  53. VARIANT_SOCIAL="social"
  54. VARIANT_MEDIA="media"
  55. VARIANT_DEVELOPER="developer"
  56. VARIANT_MESH="mesh"
  57. VARIANT_MESH_USER="mesh-user"
  58. MY_USERNAME=
  59. DEFAULT_DOMAIN_NAME=
  60. DEFAULT_DOMAIN_CODE=
  61. MY_EMAIL_ADDRESS=
  62. SYSTEM_TYPE=
  63. INSTALLING_ON_BBB="no"
  64. DDNS_PROVIDER=
  65. DDNS_USERNAME=
  66. DDNS_PASSWORD=
  67. MY_NAME=
  68. LOCAL_NETWORK_STATIC_IP_ADDRESS=
  69. ROUTER_IP_ADDRESS=
  70. ENABLE_CJDNS=
  71. ENABLE_BATMAN=
  72. ENABLE_BABEL=
  73. DEBIAN_REPO=
  74. NAMESERVER1=
  75. NAMESERVER2=
  76. WIKI_TITLE=
  77. WIKI_DOMAIN_NAME=
  78. WIKI_CODE=
  79. MY_BLOG_TITLE=
  80. FULLBLOG_DOMAIN_NAME=
  81. FULLBLOG_CODE=
  82. OWNCLOUD_DOMAIN_NAME=
  83. OWNCLOUD_CODE=
  84. HUBZILLA_DOMAIN_NAME=
  85. HUBZILLA_CODE=
  86. MICROBLOG_DOMAIN_NAME=
  87. MICROBLOG_CODE=
  88. MICROBLOG_WELCOME_MESSAGE=$"<h1>Welcome to \$MICROBLOG_DOMAIN_NAME – a federated microblog</h1><p>Another $PROJECT_NAME site</p>"
  89. MICROBLOG_BACKGROUND_IMAGE_URL=
  90. GIT_DOMAIN_NAME=
  91. GIT_CODE=
  92. MEDIAGOBLIN_DOMAIN_NAME=
  93. MEDIAGOBLIN_CODE=
  94. USB_DRIVE=/dev/sdb1
  95. HWRNG_TYPE=
  96. ENABLE_SOCIAL_KEY_MANAGEMENT=
  97. ESSID='mesh'
  98. BATMAN_CELLID='any'
  99. WIFI_CHANNEL=
  100. CONFIGURATION_FILE=
  101. DH_KEYLENGTH=
  102. MINIMAL_INSTALL="yes"
  103. DEFAULT_LANGUAGE='en_GB.UTF-8'
  104. ONION_ONLY="no"
  105. SELECTED_USERNAME=
  106. # Mirrors settings
  107. FRIENDS_MIRRORS_SERVER=
  108. FRIENDS_MIRRORS_SSH_PORT=2222
  109. FRIENDS_MIRRORS_PASSWORD=
  110. MY_MIRRORS_PASSWORD=
  111. VALID_CODE=
  112. function show_help {
  113. echo ''
  114. echo $"${PROJECT_NAME}-config -f [config filename] -m [min password length]"
  115. echo ''
  116. echo $'Creates an inventory of remote backup locations'
  117. echo ''
  118. echo ''
  119. echo $' -h --help Show help'
  120. echo $' -f --filename Configuration file (usually freedombone.cfg)'
  121. echo $' -m --min Minimum password length (characters)'
  122. echo $' -w --www Freedombone web site'
  123. echo $' -b --bm Freedombone support Bitmessage address'
  124. echo $' -o --onion [yes|no] Whether to only create .onion sites'
  125. echo $' --minimal [yes|no] For minimalistic "consumer grade" installs'
  126. echo ''
  127. exit 0
  128. }
  129. function validate_freedns_code {
  130. freedns_code="$1"
  131. 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."
  132. if [[ "$freedns_code" == *"."* || "$freedns_code" == "http"* || "$freedns_code" == *"wget "* || "$freedns_code" == *" "* ]]; then
  133. dialog --title $"Invalid FreeDNS Code" --msgbox "$FREEDNS_MESSAGE" 10 70
  134. VALID_CODE=
  135. fi
  136. if [ ${#freedns_code} -lt 30 ]; then
  137. dialog --title $"Invalid FreeDNS Code" --msgbox $'FreeDNS code is too short. Did you enter the entire code?' 6 70
  138. VALID_CODE=
  139. fi
  140. VALID_CODE='yes'
  141. }
  142. # Get the commandline options
  143. while [[ $# > 1 ]]
  144. do
  145. key="$1"
  146. case $key in
  147. -h|--help)
  148. show_help
  149. ;;
  150. # Configuration filename
  151. -f|--filename)
  152. shift
  153. CONFIGURATION_FILE="$1"
  154. ;;
  155. # Minimum password length
  156. -m|--min)
  157. shift
  158. MINIMUM_PASSWORD_LENGTH="$1"
  159. ;;
  160. # Freedombone website
  161. -w|--www)
  162. shift
  163. FREEDOMBONE_WEBSITE="$1"
  164. ;;
  165. # Bitmessage address for support
  166. -b|--bm)
  167. shift
  168. FREEDOMBONE_BITMESSAGE="$1"
  169. ;;
  170. --minimal)
  171. shift
  172. MINIMAL_INSTALL="$1"
  173. ;;
  174. -o|--onion)
  175. shift
  176. ONION_ONLY="$1"
  177. ;;
  178. *)
  179. # unknown option
  180. ;;
  181. esac
  182. shift
  183. done
  184. function save_configuration_file {
  185. if [ ! $CONFIGURATION_FILE ]; then
  186. CONFIGURATION_FILE='freedombone.cfg'
  187. fi
  188. echo "MY_USERNAME=$MY_USERNAME" > $CONFIGURATION_FILE
  189. echo "DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME" >> $CONFIGURATION_FILE
  190. if [ $DEFAULT_DOMAIN_CODE ]; then
  191. echo "DEFAULT_DOMAIN_CODE=$DEFAULT_DOMAIN_CODE" >> $CONFIGURATION_FILE
  192. fi
  193. echo "SYSTEM_TYPE=$SYSTEM_TYPE" >> $CONFIGURATION_FILE
  194. echo "INSTALLING_ON_BBB=$INSTALLING_ON_BBB" >> $CONFIGURATION_FILE
  195. echo "USB_DRIVE=$USB_DRIVE" >> $CONFIGURATION_FILE
  196. echo "DDNS_PROVIDER=$DDNS_PROVIDER" >> $CONFIGURATION_FILE
  197. echo "DDNS_USERNAME=$DDNS_USERNAME" >> $CONFIGURATION_FILE
  198. echo "DDNS_PASSWORD=$DDNS_PASSWORD" >> $CONFIGURATION_FILE
  199. echo "DEFAULT_LANGUAGE=$DEFAULT_LANGUAGE" >> $CONFIGURATION_FILE
  200. if [ "$MY_NAME" ]; then
  201. echo "MY_NAME=$MY_NAME" >> $CONFIGURATION_FILE
  202. fi
  203. echo "MY_EMAIL_ADDRESS=$MY_EMAIL_ADDRESS" >> $CONFIGURATION_FILE
  204. if [ $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  205. echo "LOCAL_NETWORK_STATIC_IP_ADDRESS=$LOCAL_NETWORK_STATIC_IP_ADDRESS" >> $CONFIGURATION_FILE
  206. echo "ROUTER_IP_ADDRESS=$ROUTER_IP_ADDRESS" >> $CONFIGURATION_FILE
  207. fi
  208. if [ $ENABLE_CJDNS ]; then
  209. echo "ENABLE_CJDNS=$ENABLE_CJDNS" >> $CONFIGURATION_FILE
  210. fi
  211. if [ $ENABLE_BATMAN ]; then
  212. echo "ENABLE_BATMAN=$ENABLE_BATMAN" >> $CONFIGURATION_FILE
  213. fi
  214. if [ $ENABLE_BABEL ]; then
  215. echo "ENABLE_BABEL=$ENABLE_BABEL" >> $CONFIGURATION_FILE
  216. fi
  217. echo "DEBIAN_REPO=$DEBIAN_REPO" >> $CONFIGURATION_FILE
  218. if [ $NAMESERVER1 ]; then
  219. echo "NAMESERVER1=$NAMESERVER1" >> $CONFIGURATION_FILE
  220. fi
  221. if [ $NAMESERVER2 ]; then
  222. echo "NAMESERVER2=$NAMESERVER2" >> $CONFIGURATION_FILE
  223. fi
  224. if [ "$WIKI_TITLE" ]; then
  225. echo "WIKI_TITLE=$WIKI_TITLE" >> $CONFIGURATION_FILE
  226. fi
  227. if [ $WIKI_DOMAIN_NAME ]; then
  228. echo "WIKI_DOMAIN_NAME=$WIKI_DOMAIN_NAME" >> $CONFIGURATION_FILE
  229. fi
  230. if [ $WIKI_CODE ]; then
  231. echo "WIKI_CODE=$WIKI_CODE" >> $CONFIGURATION_FILE
  232. fi
  233. if [ "$MY_BLOG_TITLE" ]; then
  234. echo "MY_BLOG_TITLE=$MY_BLOG_TITLE" >> $CONFIGURATION_FILE
  235. fi
  236. if [ $FULLBLOG_DOMAIN_NAME ]; then
  237. echo "FULLBLOG_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE
  238. fi
  239. if [ $FULLBLOG_CODE ]; then
  240. echo "FULLBLOG_CODE=$FULLBLOG_CODE" >> $CONFIGURATION_FILE
  241. fi
  242. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  243. echo "OWNCLOUD_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME" >> $CONFIGURATION_FILE
  244. fi
  245. if [ $OWNCLOUD_CODE ]; then
  246. echo "OWNCLOUD_CODE=$OWNCLOUD_CODE" >> $CONFIGURATION_FILE
  247. fi
  248. if [ $HUBZILLA_DOMAIN_NAME ]; then
  249. echo "HUBZILLA_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME" >> $CONFIGURATION_FILE
  250. fi
  251. if [ $HUBZILLA_CODE ]; then
  252. echo "HUBZILLA_CODE=$HUBZILLA_CODE" >> $CONFIGURATION_FILE
  253. fi
  254. if [ $MICROBLOG_DOMAIN_NAME ]; then
  255. echo "MICROBLOG_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE
  256. fi
  257. if [ $MICROBLOG_CODE ]; then
  258. echo "MICROBLOG_CODE=$MICROBLOG_CODE" >> $CONFIGURATION_FILE
  259. fi
  260. if [ ${#MICROBLOG_WELCOME_MESSAGE} -gt 1 ]; then
  261. echo "MICROBLOG_WELCOME_MESSAGE=$MICROBLOG_WELCOME_MESSAGE" >> $CONFIGURATION_FILE
  262. fi
  263. if [ $MICROBLOG_BACKGROUND_IMAGE_URL ]; then
  264. echo "MICROBLOG_BACKGROUND_IMAGE_URL=$MICROBLOG_BACKGROUND_IMAGE_URL" >> $CONFIGURATION_FILE
  265. fi
  266. if [ $GIT_DOMAIN_NAME ]; then
  267. echo "GIT_DOMAIN_NAME=$GIT_DOMAIN_NAME" >> $CONFIGURATION_FILE
  268. fi
  269. if [ $GIT_CODE ]; then
  270. echo "GIT_CODE=$GIT_CODE" >> $CONFIGURATION_FILE
  271. fi
  272. if [ $MEDIAGOBLIN_DOMAIN_NAME ]; then
  273. echo "MEDIAGOBLIN_DOMAIN_NAME=$MEDIAGOBLIN_DOMAIN_NAME" >> $CONFIGURATION_FILE
  274. fi
  275. if [ $MEDIAGOBLIN_CODE ]; then
  276. echo "MEDIAGOBLIN_CODE=$MEDIAGOBLIN_CODE" >> $CONFIGURATION_FILE
  277. fi
  278. if [ $HWRNG_TYPE ]; then
  279. echo "HWRNG_TYPE=$HWRNG_TYPE" >> $CONFIGURATION_FILE
  280. fi
  281. if [ $ENABLE_SOCIAL_KEY_MANAGEMENT ]; then
  282. echo "ENABLE_SOCIAL_KEY_MANAGEMENT=$ENABLE_SOCIAL_KEY_MANAGEMENT" >> $CONFIGURATION_FILE
  283. fi
  284. if [ $ESSID ]; then
  285. echo "ESSID=$ESSID" >> $CONFIGURATION_FILE
  286. fi
  287. if [ $BATMAN_CELLID ]; then
  288. echo "BATMAN_CELLID=$BATMAN_CELLID" >> $CONFIGURATION_FILE
  289. fi
  290. if [ $WIFI_CHANNEL ]; then
  291. echo "WIFI_CHANNEL=$WIFI_CHANNEL" >> $CONFIGURATION_FILE
  292. fi
  293. if [ $DH_KEYLENGTH ]; then
  294. echo "DH_KEYLENGTH=$DH_KEYLENGTH" >> $CONFIGURATION_FILE
  295. fi
  296. echo "ONION_ONLY=$ONION_ONLY" >> $CONFIGURATION_FILE
  297. if [ $FRIENDS_MIRRORS_SERVER ]; then
  298. echo "FRIENDS_MIRRORS_SERVER=$FRIENDS_MIRRORS_SERVER" >> $CONFIGURATION_FILE
  299. fi
  300. if [ $FRIENDS_MIRRORS_SSH_PORT ]; then
  301. echo "FRIENDS_MIRRORS_SSH_PORT=$FRIENDS_MIRRORS_SSH_PORT" >> $CONFIGURATION_FILE
  302. fi
  303. if [ $FRIENDS_MIRRORS_PASSWORD ]; then
  304. echo "FRIENDS_MIRRORS_PASSWORD=$FRIENDS_MIRRORS_PASSWORD" >> $CONFIGURATION_FILE
  305. fi
  306. }
  307. # test a domain name to see if it's valid
  308. function validate_domain_name {
  309. # count the number of dots in the domain name
  310. dots=${TEST_DOMAIN_NAME//[^.]}
  311. no_of_dots=${#dots}
  312. if (( no_of_dots > 3 )); then
  313. 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"
  314. fi
  315. if (( no_of_dots == 0 )); then
  316. 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"
  317. fi
  318. }
  319. function interactive_gpg_from_remote {
  320. REMOTE_SERVERS_LIST=/home/$MY_USERNAME/keyshareservers.txt
  321. # get a list of remote servers
  322. ${PROJECT_NAME}-remote -u $MY_USERNAME -l $REMOTE_SERVERS_LIST -t "Remote server"
  323. if [ ! -f $REMOTE_SERVERS_LIST ]; then
  324. dialog --title $"Encryption keys" --msgbox $'Error obtaining server list' 6 70
  325. return 1
  326. fi
  327. # check the number of entries in the file
  328. no_of_servers=$(cat $REMOTE_SERVERS_LIST | wc -l)
  329. if (( no_of_servers < 3 )); then
  330. dialog --title $"Encryption keys" \
  331. --msgbox $'There must be at least three servers to recover the key' 6 70
  332. return 2
  333. fi
  334. # try to recover the key from the servers
  335. apt-get -y install libgfshare-bin gnupg
  336. ${PROJECT_NAME}-recoverkey -u $MY_USERNAME -l $REMOTE_SERVERS_LIST
  337. if [ ! "$?" = "0" ]; then
  338. dialog --title $"Encryption keys" --msgbox $'Your key could not be recovered' 6 70
  339. return 3
  340. fi
  341. dialog --title $"Encryption keys" --msgbox $'Your key has been recovered' 6 70
  342. return 0
  343. }
  344. function reconstruct_key {
  345. if [ ! -d /home/$MY_USERNAME/.gnupg_fragments ]; then
  346. return
  347. fi
  348. cd /home/$MY_USERNAME/.gnupg_fragments
  349. no_of_shares=$(ls -afq keyshare.asc.* | wc -l)
  350. if (( no_of_shares < 4 )); then
  351. dialog --title $"Encryption keys" --msgbox $'Not enough fragments to reconstruct the key' 6 70
  352. exit 7348
  353. fi
  354. apt-get -y install libgfshare-bin gnupg
  355. gfcombine /home/$MY_USERNAME/.gnupg_fragments/keyshare*
  356. if [ ! "$?" = "0" ]; then
  357. dialog --title $"Encryption keys" --msgbox $'Unable to reconstruct the key' 6 70
  358. exit 7348
  359. fi
  360. KEYS_FILE=/home/$MY_USERNAME/.gnupg_fragments/keyshare.asc
  361. if [ ! -f $KEYS_FILE ]; then
  362. dialog --title $"Encryption keys" --msgbox $'Unable to reconstruct the key' 6 70
  363. fi
  364. su -c "gpg --allow-secret-key-import --import $KEYS_FILE" - $MY_USERNAME
  365. if [ ! "$?" = "0" ]; then
  366. echo $'Unable to import gpg key'
  367. shred -zu $KEYS_FILE
  368. rm -rf /home/$MY_USERNAME/.tempgnupg
  369. exit 9654
  370. fi
  371. shred -zu $KEYS_FILE
  372. dialog --title $"Encryption keys" --msgbox $'Key has been reconstructed' 6 70
  373. }
  374. function interactive_gpg_from_usb {
  375. dialog --title $"Encryption keys" \
  376. --msgbox $'Plug in a USB drive containing a copy of your full key or key fragment' 6 70
  377. HOME_DIR=/home/$MY_USERNAME
  378. GPG_LOADING="yes"
  379. SSH_IMPORTED="no"
  380. GPG_CTR=0
  381. while [[ $GPG_LOADING == "yes" ]]
  382. do
  383. if [[ $INSTALLING_ON_BBB == "yes" ]]; then
  384. GPG_USB_DRIVE='/dev/sda1'
  385. if [ ! -b $GPG_USB_DRIVE ]; then
  386. if (( GPG_CTR > 0 )); then
  387. reconstruct_key
  388. return 0
  389. fi
  390. dialog --title $"Encryption keys" --msgbox $'No USB drive found' 6 30
  391. exit 739836
  392. fi
  393. else
  394. GPG_USB_DRIVE='/dev/sdb1'
  395. if [ ! -b $GPG_USB_DRIVE ]; then
  396. GPG_USB_DRIVE='/dev/sdc1'
  397. if [ ! -b $GPG_USB_DRIVE ]; then
  398. GPG_USB_DRIVE='/dev/sdd1'
  399. if [ ! -b $GPG_USB_DRIVE ]; then
  400. if (( GPG_CTR > 0 )); then
  401. reconstruct_key
  402. return 0
  403. fi
  404. dialog --title $"Encryption keys" --msgbox $'No USB drive found' 6 30
  405. exit 27852
  406. fi
  407. fi
  408. fi
  409. fi
  410. GPG_USB_MOUNT='/mnt/usb'
  411. umount -f $GPG_USB_MOUNT
  412. if [ ! -d $GPG_USB_MOUNT ]; then
  413. mkdir -p $GPG_USB_MOUNT
  414. fi
  415. if [ -f /dev/mapper/encrypted_usb ]; then
  416. rm -rf /dev/mapper/encrypted_usb
  417. fi
  418. cryptsetup luksClose encrypted_usb
  419. cryptsetup luksOpen $GPG_USB_DRIVE encrypted_usb
  420. if [ "$?" = "0" ]; then
  421. GPG_USB_DRIVE=/dev/mapper/encrypted_usb
  422. fi
  423. mount $GPG_USB_DRIVE $GPG_USB_MOUNT
  424. if [ ! "$?" = "0" ]; then
  425. if (( GPG_CTR > 0 )); then
  426. rm -rf $GPG_USB_MOUNT
  427. reconstruct_key
  428. return 0
  429. fi
  430. dialog --title $"Encryption keys" \
  431. --msgbox $"There was a problem mounting the USB drive to $GPG_USB_MOUNT" 6 70
  432. rm -rf $GPG_USB_MOUNT
  433. exit 74393
  434. fi
  435. if [ ! -d $GPG_USB_MOUNT/.gnupg ]; then
  436. if [ ! -d $GPG_USB_MOUNT/.gnupg_fragments ]; then
  437. if (( GPG_CTR > 0 )); then
  438. umount -f $GPG_USB_MOUNT
  439. rm -rf $GPG_USB_MOUNT
  440. reconstruct_key
  441. return 0
  442. fi
  443. dialog --title $"Encryption keys" \
  444. --msgbox $"The directory $GPG_USB_MOUNT/.gnupg or $GPG_USB_MOUNT/.gnupg_fragments was not found" 6 70
  445. umount -f $GPG_USB_MOUNT
  446. rm -rf $GPG_USB_MOUNT
  447. exit 723814
  448. fi
  449. fi
  450. if [ -d $GPG_USB_MOUNT/.gnupg ]; then
  451. if [ ! -d $HOME_DIR/.gnupg ]; then
  452. mkdir $HOME_DIR/.gnupg
  453. fi
  454. cp -r $GPG_USB_MOUNT/.gnupg/* $HOME_DIR/.gnupg
  455. GPG_LOADING="no"
  456. dialog --title $"Encryption keys" \
  457. --msgbox $"GPG Keyring loaded to $HOME_DIR" 6 70
  458. else
  459. if [ ! -d $HOME_DIR/.gnupg_fragments ]; then
  460. mkdir $HOME_DIR/.gnupg_fragments
  461. fi
  462. cp -r $GPG_USB_MOUNT/.gnupg_fragments/* $HOME_DIR/.gnupg_fragments
  463. fi
  464. if [[ $SSH_IMPORTED == "no" ]]; then
  465. if [ -d $GPG_USB_MOUNT/.ssh ]; then
  466. if [ ! -d $HOME_DIR/.ssh ]; then
  467. mkdir $HOME_DIR/.ssh
  468. fi
  469. cp $GPG_USB_MOUNT/.ssh/* $HOME_DIR/.ssh
  470. dialog --title $"Encryption keys" \
  471. --msgbox $"ssh keys imported" 6 70
  472. SSH_IMPORTED="yes"
  473. fi
  474. fi
  475. umount -f $GPG_USB_MOUNT
  476. rm -rf $GPG_USB_MOUNT
  477. if [[ $GPG_LOADING == "yes" ]]; then
  478. dialog --title $"Encryption keys" \
  479. --msgbox $"Now remove the USB drive. Insert the next drive containing a key fragment, or select Ok to finish" 6 70
  480. fi
  481. GPG_CTR=$((GPG_CTR + 1))
  482. done
  483. }
  484. function interactive_gpg {
  485. GPG_CONFIGURED="no"
  486. while [[ $GPG_CONFIGURED != "yes" ]]
  487. do
  488. GPG_CONFIGURED="yes"
  489. data=$(tempfile 2>/dev/null)
  490. trap "rm -f $data" 0 1 2 5 15
  491. dialog --backtitle $"Freedombone Configuration" \
  492. --radiolist $"GPG/PGP keys for your system:" 13 70 3 \
  493. 1 $"Generate new keys (new user)" on \
  494. 2 $"Import keys from USB drive/s" off \
  495. 3 $"Retrieve keys from friends servers" off 2> $data
  496. sel=$?
  497. case $sel in
  498. 1) exit 1;;
  499. 255) exit 2;;
  500. esac
  501. case $(cat $data) in
  502. 1) if [ -d /home/$MY_USERNAME/.gnupg ]; then
  503. rm -rf /home/$MY_USERNAME/.gnupg
  504. fi
  505. break;;
  506. 2) interactive_gpg_from_usb
  507. break;;
  508. 3) interactive_gpg_from_remote
  509. if [ ! "$?" = "0" ]; then
  510. GPG_CONFIGURED="no"
  511. fi;;
  512. esac
  513. done
  514. }
  515. function set_main_repo {
  516. data=$(tempfile 2>/dev/null)
  517. trap "rm -f $data" 0 1 2 5 15
  518. dialog --backtitle $"Freedombone Control Panel" \
  519. --title $"Main Repository (Mirrors)" \
  520. --form $"If you don't know what this means then just select Ok.\n\nIf you don't wish to use the default repositories they can be obtained from mirrored repos on another ${PROJECT_NAME} system.\n\nThe repositories are for applications which are not yet packaged for Debian." 18 65 4 \
  521. $"URL:" 1 1 "$FRIENDS_MIRRORS_SERVER" 1 18 40 18 \
  522. $"SSH Port:" 2 1 "$FRIENDS_MIRRORS_SSH_PORT" 2 18 10 10000 \
  523. $"Password:" 3 1 "$FRIENDS_MIRRORS_PASSWORD" 3 18 40 10000 \
  524. 2> $data
  525. sel=$?
  526. case $sel in
  527. 1) return;;
  528. 255) return;;
  529. esac
  530. new_mirrors_url=$(cat $data | sed -n 1p)
  531. new_mirrors_ssh_port=$(cat $data | sed -n 2p)
  532. new_mirrors_password=$(cat $data | sed -n 3p)
  533. if [ ${#new_mirrors_url} -lt 2 ]; then
  534. return
  535. fi
  536. if [ ${#new_mirrors_ssh_port} -lt 1 ]; then
  537. return
  538. fi
  539. if [ ${#new_mirrors_password} -lt 10 ]; then
  540. dialog --title $"Main Repository" \
  541. --msgbox $'Mirrors password was too short. Should be at least 10 characters.' 6 40
  542. return
  543. fi
  544. if [[ $new_mirrors_url == *"."* ]]; then
  545. FRIENDS_MIRRORS_SERVER=$new_mirrors_url
  546. FRIENDS_MIRRORS_SSH_PORT=$new_mirrors_ssh_port
  547. FRIENDS_MIRRORS_PASSWORD=$new_mirrors_password
  548. dialog --title $"Main Repository" \
  549. --msgbox $"Main repository set to $FRIENDS_MIRRORS_SERVER" 6 60
  550. fi
  551. }
  552. function interactive_select_language {
  553. data=$(tempfile 2>/dev/null)
  554. trap "rm -f $data" 0 1 2 5 15
  555. dialog --backtitle $"Freedombone Configuration" \
  556. --radiolist $"Select your language:" 12 40 4 \
  557. 1 $"English" on \
  558. 2 $"French" off \
  559. 3 $"German" off \
  560. 4 $"Spanish" off 2> $data
  561. sel=$?
  562. case $sel in
  563. 1) exit 1;;
  564. 255) exit 1;;
  565. esac
  566. case $(cat $data) in
  567. 1) DEFAULT_LANGUAGE='en_GB.UTF-8';;
  568. 2) DEFAULT_LANGUAGE='fr_FR.UTF-8';;
  569. 3) DEFAULT_LANGUAGE='de_DE.UTF-8';;
  570. 3) DEFAULT_LANGUAGE='es_ES.UTF-8';;
  571. esac
  572. save_configuration_file
  573. update-locale LANG=${DEFAULT_LANGUAGE}
  574. update-locale LANGUAGE=${DEFAULT_LANGUAGE}
  575. update-locale LC_MESSAGES=${DEFAULT_LANGUAGE}
  576. update-locale LC_ALL=${DEFAULT_LANGUAGE}
  577. update-locale LC_CTYPE=${DEFAULT_LANGUAGE}
  578. }
  579. function select_user {
  580. SELECTED_USERNAME=
  581. users_array=($(ls /home))
  582. delete=(mirrors git)
  583. for del in ${delete[@]}
  584. do
  585. users_array=(${users_array[@]/$del})
  586. done
  587. i=0
  588. W=()
  589. name=()
  590. for u in ${users_array[@]}
  591. do
  592. i=$((i+1))
  593. W+=($i "$u")
  594. name+=("$u")
  595. done
  596. user_index=$(dialog --backtitle $"Freedombone Configuration" --title $"Select User" --menu $"Select one of the following:" 24 40 17 "${W[@]}" 3>&2 2>&1 1>&3)
  597. if [ $? -eq 0 ]; then
  598. SELECTED_USERNAME="${name[$((user_index-1))]}"
  599. fi
  600. }
  601. function interactive_configuration {
  602. # create a temporary copy of the configuration file
  603. # which can be used to pre-populate selections
  604. if [ -f $CONFIGURATION_FILE ]; then
  605. cp $CONFIGURATION_FILE temp.cfg
  606. fi
  607. interactive_select_language
  608. if [[ $ONION_ONLY == "no" ]]; then
  609. INITIAL_MESSAGE=$"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"
  610. else
  611. INITIAL_MESSAGE=$"Welcome to the Freedombone interactive installer. Communications freedom is only a short time away.\n\nWeb sites created will only be viewable within a Tor browser.\n\nFor more information please visit $FREEDOMBONE_WEBSITE or send a Bitmessage to $FREEDOMBONE_BITMESSAGE"
  612. fi
  613. dialog --title $"Freedombone" --msgbox "$INITIAL_MESSAGE" 15 50
  614. data=$(tempfile 2>/dev/null)
  615. trap "rm -f $data" 0 1 2 5 15
  616. dialog --backtitle $"Freedombone Configuration" \
  617. --radiolist $"Type of Installation:" 18 40 11 \
  618. 1 $"Full" on \
  619. 2 $"Writer" off \
  620. 3 $"Cloud" off \
  621. 4 $"Chat" off \
  622. 5 $"Mailbox" off \
  623. 6 $"Non-Mailbox" off \
  624. 7 $"Social" off \
  625. 8 $"Media" off \
  626. 9 $"Developer" off \
  627. 10 $"Mesh (router)" off \
  628. 11 $"Mesh (user device)" off 2> $data
  629. sel=$?
  630. case $sel in
  631. 1) exit 1;;
  632. 255) exit 1;;
  633. esac
  634. case $(cat $data) in
  635. 1) SYSTEM_TYPE=$VARIANT_FULL;;
  636. 2) SYSTEM_TYPE=$VARIANT_WRITER;;
  637. 3) SYSTEM_TYPE=$VARIANT_CLOUD;;
  638. 4) SYSTEM_TYPE=$VARIANT_CHAT;;
  639. 5) SYSTEM_TYPE=$VARIANT_MAILBOX;;
  640. 6) SYSTEM_TYPE=$VARIANT_NONMAILBOX;;
  641. 7) SYSTEM_TYPE=$VARIANT_SOCIAL;;
  642. 8) SYSTEM_TYPE=$VARIANT_MEDIA;;
  643. 9) SYSTEM_TYPE=$VARIANT_DEVELOPER;;
  644. 10) SYSTEM_TYPE=$VARIANT_MESH;;
  645. 11) SYSTEM_TYPE=$VARIANT_MESH_USER;;
  646. esac
  647. save_configuration_file
  648. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" && $SYSTEM_TYPE != "$VARIANT_MESH_USER" ]]; then
  649. set_main_repo
  650. save_configuration_file
  651. fi
  652. if [[ $SYSTEM_TYPE == "$VARIANT_MESH" || $SYSTEM_TYPE == "$VARIANT_MESH_USER" ]]; then
  653. ENABLE_BATMAN="yes"
  654. ENABLE_CJDNS="no"
  655. ENABLE_BABEL="no"
  656. #data=$(tempfile 2>/dev/null)
  657. #trap "rm -f $data" 0 1 2 5 15
  658. #dialog --backtitle "Freedombone Configuration" \
  659. # --radiolist "Select your type of mesh network:" 10 40 3 \
  660. # 1 "Babel" off \
  661. # 2 "B.A.T.M.A.N. Advanced" on \
  662. # 3 "cjdns" off 2> $data
  663. #sel=$?
  664. #case $sel in
  665. # 1) exit 1;;
  666. # 255) exit 1;;
  667. #esac
  668. #case $(cat $data) in
  669. # 1) ENABLE_BABEL="yes";;
  670. # 2) ENABLE_BATMAN="yes";;
  671. # 3) ENABLE_CJDNS="yes";;
  672. #esac
  673. save_configuration_file
  674. data=$(tempfile 2>/dev/null)
  675. trap "rm -f $data" 0 1 2 5 15
  676. dialog --backtitle $"Freedombone Configuration" \
  677. --inputbox $"Wireless Mesh ESSID\n\nIf you press enter the default will be '$ESSID'" 10 40 "$(grep 'ESSID' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  678. sel=$?
  679. case $sel in
  680. 0) ESSID=$(cat $data);;
  681. 1) exit 1;;
  682. 255) exit 1;;
  683. esac
  684. save_configuration_file
  685. if [[ $SYSTEM_TYPE != "$VARIANT_MESH_USER" ]]; then
  686. data=$(tempfile 2>/dev/null)
  687. trap "rm -f $data" 0 1 2 5 15
  688. dialog --backtitle $"Freedombone Configuration" \
  689. --inputbox $"Give your mesh peer a name" 10 40 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  690. sel=$?
  691. case $sel in
  692. 0) DEFAULT_DOMAIN_NAME=$(cat $data);;
  693. 1) exit 1;;
  694. 255) exit 1;;
  695. esac
  696. else
  697. DEFAULT_DOMAIN_NAME=$(hostname)
  698. fi
  699. save_configuration_file
  700. data=$(tempfile 2>/dev/null)
  701. trap "rm -f $data" 0 1 2 5 15
  702. dialog --backtitle $"Freedombone Configuration" \
  703. --radiolist $"Wifi Channel (spaced to be non-overlapping):" 11 50 4 \
  704. 1 "1" on \
  705. 2 "5" off \
  706. 3 "9" off \
  707. 4 "13" off 2> $data
  708. sel=$?
  709. case $sel in
  710. 1) exit 1;;
  711. 255) exit 1;;
  712. esac
  713. case $(cat $data) in
  714. 1) WIFI_CHANNEL=1;;
  715. 2) WIFI_CHANNEL=5;;
  716. 3) WIFI_CHANNEL=9;;
  717. 4) WIFI_CHANNEL=13;;
  718. esac
  719. save_configuration_file
  720. fi
  721. #if [[ $ENABLE_BATMAN == "yes" ]]; then
  722. # data=$(tempfile 2>/dev/null)
  723. # trap "rm -f $data" 0 1 2 5 15
  724. # dialog --backtitle "Freedombone Configuration" \
  725. # --inputbox "Optionally register with an Access Point" 10 40 "$(grep 'BATMAN_CELLID' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  726. # sel=$?
  727. # case $sel in
  728. # 0) BATMAN_CELLID=$(cat $data);;
  729. # 1) exit 1;;
  730. # 255) exit 1;;
  731. # esac
  732. # save_configuration_file
  733. #fi
  734. if [[ $SYSTEM_TYPE == "$VARIANT_MESH_USER" ]]; then
  735. ${PROJECT_NAME}-client --essid $ESSID --channel $WIFI_CHANNEL
  736. if [ "$?" = "0" ]; then
  737. clear
  738. echo ".---. . . "
  739. echo "| | | "
  740. echo "|--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. "
  741. echo "| | (.-' (.-' ( | ( )| | | | )( )| | (.-' "
  742. echo "' ' --' --' -' - -' ' ' -' -' -' ' - --'"
  743. echo ''
  744. echo $'Your system is now ready for connection to the mesh network'
  745. echo ''
  746. echo $'To connect to the network open a terminal and type:'
  747. echo ''
  748. echo ' meshweb'
  749. echo ''
  750. echo $'To disconnect from the mesh and return to the internet type:'
  751. echo ''
  752. echo ' sudo batman stop'
  753. echo ''
  754. echo $'To turn your system into a dedicated mesh peer you could add'
  755. echo $'the meshweb command to your startup applications'
  756. echo ''
  757. touch /tmp/meshuserdevice
  758. exit 0
  759. else
  760. echo $'Failed to fully install the mesh networking system'
  761. exit 74589
  762. fi
  763. fi
  764. if [ -d /home/$GENERIC_IMAGE_USERNAME ]; then
  765. if [ ! -f $IMAGE_PASSWORD_FILE ]; then
  766. echo 'Cannot find the password file for the admin user'
  767. exit 62753
  768. fi
  769. # when installing from an image which comes with a known default user account
  770. SELECTED_USERNAME=
  771. while [ ! $SELECTED_USERNAME ]
  772. do
  773. if [ ! $SELECTED_USERNAME ]; then
  774. SELECTED_USERNAME=$(grep 'MY_USERNAME' temp.cfg | awk -F '=' '{print $2}')
  775. fi
  776. data=$(tempfile 2>/dev/null)
  777. trap "rm -f $data" 0 1 2 5 15
  778. dialog --backtitle $"Freedombone Configuration" \
  779. --title $"Username" \
  780. --inputbox $"Set your username for the system\n\nYour username should not contain any spaces" 12 60 "$SELECTED_USERNAME" 2> $data
  781. sel=$?
  782. case $sel in
  783. 0) possible_username=$(cat $data)
  784. SELECTED_USERNAME=
  785. if [[ $possible_username != *' '* && $possible_username != *'/'* && $possible_username != *'\'* && $possible_username != *'*'* ]]; then
  786. if [ $possible_username ]; then
  787. if [ ${#possible_username} -gt 1 ]; then
  788. if [[ $possible_username != $GENERIC_IMAGE_USERNAME ]]; then
  789. MY_USERNAME=$(cat $data)
  790. useradd -m -s /bin/bash $MY_USERNAME
  791. if [ -d /home/$MY_USERNAME ]; then
  792. echo "${MY_USERNAME}:$(printf `cat $IMAGE_PASSWORD_FILE`)" | chpasswd
  793. # Add the user as a sudoer - they will be the new admin user
  794. if ! grep -q "$MY_USERNAME ALL=(ALL) ALL" /etc/sudoers; then
  795. echo "$MY_USERNAME ALL=(ALL) ALL" >> /etc/sudoers
  796. # remove the generic image admin user from sudoers
  797. sed -i "s|${GENERIC_IMAGE_USERNAME}.*||g" /etc/sudoers
  798. fi
  799. break
  800. fi
  801. fi
  802. fi
  803. fi
  804. fi
  805. ;;
  806. 1) exit 1;;
  807. 255) exit 1;;
  808. esac
  809. done
  810. else
  811. no_of_users=$(find /home/* -maxdepth 0 -type d | wc -l)
  812. if [ $no_of_users -eq 1 ]; then
  813. # only a single user on the system
  814. MY_USERNAME=$(ls /home)
  815. else
  816. # select one from a number of users
  817. if [[ $SYSTEM_TYPE == "$VARIANT_MESH" && $DEFAULT_DOMAIN_NAME && -d /home/$DEFAULT_DOMAIN_NAME ]]; then
  818. MY_USERNAME=$DEFAULT_DOMAIN_NAME
  819. else
  820. select_user
  821. if [ ! $SELECTED_USERNAME ]; then
  822. echo $'No username selected'
  823. exit 72589
  824. fi
  825. MY_USERNAME="$SELECTED_USERNAME"
  826. fi
  827. fi
  828. fi
  829. if [ ! $MY_USERNAME ]; then
  830. echo $'No user account was selected'
  831. exit 64398
  832. fi
  833. if [[ $MY_USERNAME == '-f' ]]; then
  834. echo $'No user account was selected'
  835. exit 8347
  836. fi
  837. if [[ $MY_USERNAME == 'debian' || $MY_USERNAME == 'fbone' ]]; then
  838. echo $"Don't use the default user account"
  839. exit 9341
  840. fi
  841. if [ ! -d /home/$MY_USERNAME ]; then
  842. echo $"The directory /home/$MY_USERNAME does not exist"
  843. exit 6437
  844. fi
  845. save_configuration_file
  846. if [[ $MINIMAL_INSTALL == "no" ]]; then
  847. if [[ $(grep "INSTALLING_ON_BBB" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then
  848. dialog --title $"Install Target" \
  849. --backtitle $"Freedombone Configuration" \
  850. --yesno $"\nAre you installing onto a Beaglebone Black?" 7 60
  851. else
  852. dialog --title $"Install Target" \
  853. --backtitle $"Freedombone Configuration" \
  854. --defaultno \
  855. --yesno $"\nAre you installing onto a Beaglebone Black?" 7 60
  856. fi
  857. sel=$?
  858. case $sel in
  859. 0) INSTALLING_ON_BBB="yes";;
  860. 1) INSTALLING_ON_BBB="no";;
  861. 255) exit 1;;
  862. esac
  863. if [[ $INSTALLING_ON_BBB == "yes" ]]; then
  864. USB_DRIVE=/dev/sda1
  865. fi
  866. save_configuration_file
  867. fi
  868. if [[ $MINIMAL_INSTALL == "no" ]]; then
  869. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  870. interactive_gpg
  871. data=$(tempfile 2>/dev/null)
  872. trap "rm -f $data" 0 1 2 5 15
  873. 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."
  874. if [[ $(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then
  875. dialog --title $"Social Key Management" \
  876. --backtitle $"Freedombone Configuration" \
  877. --yesno "$SOCIAL_KEY_STR" 15 60
  878. else
  879. dialog --title $"Social Key Management" \
  880. --backtitle $"Freedombone Configuration" \
  881. --defaultno \
  882. --yesno "$SOCIAL_KEY_STR" 15 60
  883. fi
  884. sel=$?
  885. case $sel in
  886. 0) ENABLE_SOCIAL_KEY_MANAGEMENT="yes";;
  887. 255) exit 1;;
  888. esac
  889. save_configuration_file
  890. fi
  891. else
  892. # enable for the minimal case
  893. ENABLE_SOCIAL_KEY_MANAGEMENT="yes"
  894. fi
  895. if [[ $MINIMAL_INSTALL == "no" ]]; then
  896. data=$(tempfile 2>/dev/null)
  897. trap "rm -f $data" 0 1 2 5 15
  898. if [[ $INSTALLING_ON_BBB != "yes" ]]; then
  899. dialog --backtitle $"Freedombone Configuration" \
  900. --radiolist $"Type of Random Number Generator:" 10 40 2 \
  901. 1 Haveged on \
  902. 2 OneRNG off 2> $data
  903. sel=$?
  904. case $sel in
  905. 1) exit 1;;
  906. 255) exit 1;;
  907. esac
  908. case $(cat $data) in
  909. 2) HWRNG_TYPE="onerng"
  910. dialog --title $"OneRNG Device" \
  911. --msgbox $"Please ensure that the OneRNG device is disconnected. You can reconnect it later during the installation" 8 60
  912. ;;
  913. 255) exit 1;;
  914. esac
  915. else
  916. HWRNG_TYPE="beaglebone"
  917. fi
  918. save_configuration_file
  919. fi
  920. if [[ $MINIMAL_INSTALL == "no" ]]; then
  921. data=$(tempfile 2>/dev/null)
  922. trap "rm -f $data" 0 1 2 5 15
  923. dialog --backtitle $"Freedombone Configuration" \
  924. --radiolist $"Where to download Debian packages from:" 25 45 49 \
  925. 1 $"Australia" off \
  926. 2 $"Austria" off \
  927. 3 $"Belarus" off \
  928. 4 $"Belgium" off \
  929. 5 $"Bosnia and Herzegovina" off \
  930. 6 $"Brazil" off \
  931. 7 $"Bulgaria" off \
  932. 8 $"Canada" off \
  933. 9 $"Chile" off \
  934. 10 $"China" off \
  935. 11 $"Croatia" off \
  936. 12 $"Czech Republic" off \
  937. 13 $"Denmark" off \
  938. 14 $"El Salvador" off \
  939. 15 $"Estonia" off \
  940. 16 $"Finland" off \
  941. 17 $"France 1" off \
  942. 18 $"France 2" off \
  943. 19 $"Germany 1" off \
  944. 20 $"Germany 2" off \
  945. 21 $"Greece" off \
  946. 22 $"Hungary" off \
  947. 23 $"Iceland" off \
  948. 24 $"Iran" off \
  949. 25 $"Ireland" off \
  950. 26 $"Italy" off \
  951. 27 $"Japan" off \
  952. 28 $"Korea" off \
  953. 29 $"Lithuania" off \
  954. 30 $"Mexico" off \
  955. 31 $"Netherlands" off \
  956. 32 $"New Caledonia" off \
  957. 33 $"New Zealand" off \
  958. 34 $"Norway" off \
  959. 35 $"Poland" off \
  960. 36 $"Portugal" off \
  961. 37 $"Romania" off \
  962. 38 $"Russia" off \
  963. 39 $"Slovakia" off \
  964. 40 $"Slovenia" off \
  965. 41 $"Spain" off \
  966. 42 $"Sweden" off \
  967. 43 $"Switzerland" off \
  968. 44 $"Taiwan" off \
  969. 45 $"Thailand" off \
  970. 46 $"Turkey" off \
  971. 47 $"Ukraine" off \
  972. 48 $"United Kingdom" off \
  973. 49 $"United States" on 2> $data
  974. sel=$?
  975. case $sel in
  976. 1) exit 1;;
  977. 255) exit 1;;
  978. esac
  979. case $(cat $data) in
  980. 1) DEBIAN_REPO='ftp.au.debian.org';;
  981. 2) DEBIAN_REPO='ftp.at.debian.org';;
  982. 3) DEBIAN_REPO='ftp.by.debian.org';;
  983. 4) DEBIAN_REPO='ftp.be.debian.org';;
  984. 5) DEBIAN_REPO='ftp.ba.debian.org';;
  985. 6) DEBIAN_REPO='ftp.br.debian.org';;
  986. 7) DEBIAN_REPO='ftp.bg.debian.org';;
  987. 8) DEBIAN_REPO='ftp.ca.debian.org';;
  988. 9) DEBIAN_REPO='ftp.cl.debian.org';;
  989. 10) DEBIAN_REPO='ftp.cn.debian.org';;
  990. 11) DEBIAN_REPO='ftp.hr.debian.org';;
  991. 12) DEBIAN_REPO='ftp.cz.debian.org';;
  992. 13) DEBIAN_REPO='ftp.dk.debian.org';;
  993. 14) DEBIAN_REPO='ftp.sv.debian.org';;
  994. 15) DEBIAN_REPO='ftp.ee.debian.org';;
  995. 16) DEBIAN_REPO='ftp.fi.debian.org';;
  996. 17) DEBIAN_REPO='ftp2.fr.debian.org';;
  997. 18) DEBIAN_REPO='ftp.fr.debian.org';;
  998. 19) DEBIAN_REPO='ftp2.de.debian.org';;
  999. 20) DEBIAN_REPO='ftp.de.debian.org';;
  1000. 21) DEBIAN_REPO='ftp.gr.debian.org';;
  1001. 22) DEBIAN_REPO='ftp.hu.debian.org';;
  1002. 23) DEBIAN_REPO='ftp.is.debian.org';;
  1003. 24) DEBIAN_REPO='ftp.ir.debian.org';;
  1004. 25) DEBIAN_REPO='ftp.ie.debian.org';;
  1005. 26) DEBIAN_REPO='ftp.it.debian.org';;
  1006. 27) DEBIAN_REPO='ftp.jp.debian.org';;
  1007. 28) DEBIAN_REPO='ftp.kr.debian.org';;
  1008. 29) DEBIAN_REPO='ftp.lt.debian.org';;
  1009. 30) DEBIAN_REPO='ftp.mx.debian.org';;
  1010. 31) DEBIAN_REPO='ftp.nl.debian.org';;
  1011. 32) DEBIAN_REPO='ftp.nc.debian.org';;
  1012. 33) DEBIAN_REPO='ftp.nz.debian.org';;
  1013. 34) DEBIAN_REPO='ftp.no.debian.org';;
  1014. 35) DEBIAN_REPO='ftp.pl.debian.org';;
  1015. 36) DEBIAN_REPO='ftp.pt.debian.org';;
  1016. 37) DEBIAN_REPO='ftp.ro.debian.org';;
  1017. 38) DEBIAN_REPO='ftp.ru.debian.org';;
  1018. 39) DEBIAN_REPO='ftp.sk.debian.org';;
  1019. 40) DEBIAN_REPO='ftp.si.debian.org';;
  1020. 41) DEBIAN_REPO='ftp.es.debian.org';;
  1021. 42) DEBIAN_REPO='ftp.se.debian.org';;
  1022. 43) DEBIAN_REPO='ftp.ch.debian.org';;
  1023. 44) DEBIAN_REPO='ftp.tw.debian.org';;
  1024. 45) DEBIAN_REPO='ftp.th.debian.org';;
  1025. 46) DEBIAN_REPO='ftp.tr.debian.org';;
  1026. 47) DEBIAN_REPO='ftp.ua.debian.org';;
  1027. 48) DEBIAN_REPO='ftp.uk.debian.org';;
  1028. 49) DEBIAN_REPO='ftp.us.debian.org';;
  1029. 255) exit 1;;
  1030. esac
  1031. save_configuration_file
  1032. else
  1033. DEBIAN_REPO='ftp.de.debian.org'
  1034. fi
  1035. if [[ $MINIMAL_INSTALL == "no" && $ONION_ONLY == "no" ]]; then
  1036. data=$(tempfile 2>/dev/null)
  1037. trap "rm -f $data" 0 1 2 5 15
  1038. dialog --backtitle $"Freedombone Configuration" \
  1039. --radiolist $"Pick a domain name service (DNS):" 25 50 16 \
  1040. 1 $"Digital Courage" on \
  1041. 2 $"German Privacy Foundation 1" off \
  1042. 3 $"German Privacy Foundation 2" off \
  1043. 4 $"Chaos Computer Club" off \
  1044. 5 $"ClaraNet" off \
  1045. 6 $"OpenNIC 1" off \
  1046. 7 $"OpenNIC 2" off \
  1047. 8 $"OpenNIC 3" off \
  1048. 9 $"OpenNIC 4" off \
  1049. 10 $"OpenNIC 5" off \
  1050. 11 $"OpenNIC 6" off \
  1051. 12 $"OpenNIC 7" off \
  1052. 13 $"PowerNS" off \
  1053. 14 $"ValiDOM" off \
  1054. 15 $"Freie Unzensierte" off \
  1055. 16 $"Google" off 2> $data
  1056. sel=$?
  1057. case $sel in
  1058. 1) exit 1;;
  1059. 255) exit 1;;
  1060. esac
  1061. case $(cat $data) in
  1062. 1) NAMESERVER1='85.214.73.63'
  1063. NAMESERVER2='213.73.91.35'
  1064. ;;
  1065. 2) NAMESERVER1='87.118.100.175'
  1066. NAMESERVER2='94.75.228.29'
  1067. ;;
  1068. 3) NAMESERVER1='85.25.251.254'
  1069. NAMESERVER2='2.141.58.13'
  1070. ;;
  1071. 4) NAMESERVER1='213.73.91.35'
  1072. NAMESERVER2='85.214.73.63'
  1073. ;;
  1074. 5) NAMESERVER1='212.82.225.7'
  1075. NAMESERVER2='212.82.226.212'
  1076. ;;
  1077. 6) NAMESERVER1='58.6.115.42'
  1078. NAMESERVER2='58.6.115.43'
  1079. ;;
  1080. 7) NAMESERVER1='119.31.230.42'
  1081. NAMESERVER2='200.252.98.162'
  1082. ;;
  1083. 8) NAMESERVER1='217.79.186.148'
  1084. NAMESERVER2='81.89.98.6'
  1085. ;;
  1086. 9) NAMESERVER1='78.159.101.37'
  1087. NAMESERVER2='203.167.220.153'
  1088. ;;
  1089. 10) NAMESERVER1='82.229.244.191'
  1090. NAMESERVER2='82.229.244.191'
  1091. ;;
  1092. 11) NAMESERVER1='216.87.84.211'
  1093. NAMESERVER2='66.244.95.20'
  1094. ;;
  1095. 12) NAMESERVER1='207.192.69.155'
  1096. NAMESERVER2='72.14.189.120'
  1097. ;;
  1098. 13) NAMESERVER1='194.145.226.26'
  1099. NAMESERVER2='77.220.232.44'
  1100. ;;
  1101. 14) NAMESERVER1='78.46.89.147'
  1102. NAMESERVER2='88.198.75.145'
  1103. ;;
  1104. 15) NAMESERVER1='85.25.149.144'
  1105. NAMESERVER2='87.106.37.196'
  1106. ;;
  1107. 16) NAMESERVER1='8.8.8.8'
  1108. NAMESERVER2='4.4.4.4'
  1109. ;;
  1110. 255) exit 1;;
  1111. esac
  1112. save_configuration_file
  1113. else
  1114. # as defaults for a minimal install process these settings are debatable
  1115. NAMESERVER1='85.214.73.63'
  1116. NAMESERVER2='213.73.91.35'
  1117. fi
  1118. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" && $ONION_ONLY == "no" ]]; then
  1119. data=$(tempfile 2>/dev/null)
  1120. trap "rm -f $data" 0 1 2 5 15
  1121. dialog --backtitle $"Freedombone Configuration" \
  1122. --radiolist $"Choose Dynamic DNS provider:" 15 40 14 \
  1123. 1 dyndns off \
  1124. 2 freedns on \
  1125. 3 zoneedit off \
  1126. 4 no-ip off \
  1127. 5 easydns off \
  1128. 6 tzo off \
  1129. 7 3322 off \
  1130. 8 dnsomatic off \
  1131. 9 tunnelbroker off \
  1132. 10 dns.he.net off \
  1133. 11 dynsip off \
  1134. 12 sitelutions off \
  1135. 13 dnsexit off \
  1136. 14 changeip off 2> $data
  1137. sel=$?
  1138. case $sel in
  1139. 1) exit 1;;
  1140. 255) exit 1;;
  1141. esac
  1142. case $(cat $data) in
  1143. 1) DDNS_PROVIDER="default@dyndns.org";;
  1144. 2) DDNS_PROVIDER="default@freedns.afraid.org";;
  1145. 3) DDNS_PROVIDER="default@zoneedit.com";;
  1146. 4) DDNS_PROVIDER="default@no-ip.com";;
  1147. 5) DDNS_PROVIDER="default@easydns.com";;
  1148. 6) DDNS_PROVIDER="default@tzo.com";;
  1149. 7) DDNS_PROVIDER="dyndns@3322.org";;
  1150. 8) DDNS_PROVIDER="default@dnsomatic.com";;
  1151. 9) DDNS_PROVIDER="ipv6tb@he.net";;
  1152. 10) DDNS_PROVIDER="dyndns@he.net";;
  1153. 11) DDNS_PROVIDER="default@dynsip.org";;
  1154. 12) DDNS_PROVIDER="default@sitelutions.com";;
  1155. 13) DDNS_PROVIDER="default@dnsexit.com";;
  1156. 14) DDNS_PROVIDER="default@changeip.com";;
  1157. 255) exit 1;;
  1158. esac
  1159. save_configuration_file
  1160. valid_ddns_username=
  1161. while [ ! $valid_ddns_username ]
  1162. do
  1163. data=$(tempfile 2>/dev/null)
  1164. trap "rm -f $data" 0 1 2 5 15
  1165. dialog --backtitle $"Freedombone Configuration" \
  1166. --inputbox $"Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  1167. sel=$?
  1168. case $sel in
  1169. 0) possible_username=$(cat $data)
  1170. if [ "$possible_username" ]; then
  1171. if [ ${#possible_username} -gt 1 ]; then
  1172. valid_ddns_username=$(cat $data)
  1173. DDNS_USERNAME=$valid_ddns_username
  1174. break;
  1175. fi
  1176. fi
  1177. ;;
  1178. 1) exit 1;;
  1179. 255) exit 1;;
  1180. esac
  1181. done
  1182. save_configuration_file
  1183. valid_ddns_password=
  1184. while [ ! $valid_ddns_password ]
  1185. do
  1186. data=$(tempfile 2>/dev/null)
  1187. trap "rm -f $data" 0 1 2 5 15
  1188. dialog --backtitle $"Freedombone Configuration" \
  1189. --clear \
  1190. --insecure \
  1191. --passwordbox $"Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  1192. sel=$?
  1193. case $sel in
  1194. 0) possible_password=$(cat $data)
  1195. if [ "$possible_password" ]; then
  1196. if [ ${#possible_password} -gt 1 ]; then
  1197. valid_ddns_password=$(cat $data)
  1198. DDNS_PASSWORD=$valid_ddns_password
  1199. break;
  1200. fi
  1201. fi
  1202. ;;
  1203. 1) exit 1;;
  1204. 255) exit 1;;
  1205. esac
  1206. if [ ${#DDNS_PASSWORD} -lt $MINIMUM_PASSWORD_LENGTH ]; then
  1207. 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
  1208. DDNS_PASSWORD=""
  1209. fi
  1210. done
  1211. save_configuration_file
  1212. fi
  1213. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  1214. valid_name=
  1215. while [ ! $valid_name ]
  1216. do
  1217. data=$(tempfile 2>/dev/null)
  1218. trap "rm -f $data" 0 1 2 5 15
  1219. dialog --backtitle $"Freedombone Configuration" \
  1220. --inputbox $"Your full name (or nick)" 10 30 "$(grep 'MY_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  1221. sel=$?
  1222. case $sel in
  1223. 0) possible_name=$(cat $data)
  1224. if [ "$possible_name" ]; then
  1225. if [ ${#possible_name} -gt 1 ]; then
  1226. valid_name="$possible_name"
  1227. MY_NAME="$possible_name"
  1228. break;
  1229. fi
  1230. fi
  1231. ;;
  1232. 1) exit 1;;
  1233. 255) exit 1;;
  1234. esac
  1235. done
  1236. save_configuration_file
  1237. fi
  1238. if [[ $MINIMAL_INSTALL == "no" && $ONION_ONLY == "no" ]]; then
  1239. SET_STATIC_IP="no"
  1240. dialog --title $"Static local IP address" \
  1241. --backtitle $"Freedombone Configuration" \
  1242. --defaultno \
  1243. --yesno $"\nDo you want to set a static local IP address for this system?\n\nFor example, 192.168.1.10" 10 60
  1244. sel=$?
  1245. case $sel in
  1246. 0) SET_STATIC_IP="yes";;
  1247. 255) exit 1;;
  1248. esac
  1249. if [[ $SET_STATIC_IP == "yes" ]]; then
  1250. if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  1251. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep 'LOCAL_NETWORK_STATIC_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  1252. if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  1253. LOCAL_NETWORK_STATIC_IP_ADDRESS='192.168..'
  1254. fi
  1255. fi
  1256. if [ ! $ROUTER_IP_ADDRESS ]; then
  1257. ROUTER_IP_ADDRESS=$(grep 'ROUTER_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  1258. if [ ! $ROUTER_IP_ADDRESS ]; then
  1259. ROUTER_IP_ADDRESS='192.168..'
  1260. fi
  1261. fi
  1262. data=$(tempfile 2>/dev/null)
  1263. trap "rm -f $data" 0 1 2 5 15
  1264. dialog --backtitle $"Freedombone Configuration" \
  1265. --title $"Local Network Configuration" \
  1266. --form $"\nPlease enter the IP addresses:" 11 55 3 \
  1267. $"This system:" 1 1 "$LOCAL_NETWORK_STATIC_IP_ADDRESS" 1 16 16 15 \
  1268. $"Internet router:" 2 1 "$ROUTER_IP_ADDRESS" 2 16 16 15 \
  1269. 2> $data
  1270. sel=$?
  1271. case $sel in
  1272. 1) exit 1;;
  1273. 255) exit 1;;
  1274. esac
  1275. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(cat $data | sed -n 1p)
  1276. ROUTER_IP_ADDRESS=$(cat $data | sed -n 2p)
  1277. save_configuration_file
  1278. fi
  1279. fi
  1280. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1281. if [[ $ONION_ONLY != "no" ]]; then
  1282. WIKI_TITLE='My Wiki'
  1283. WIKI_DOMAIN_NAME='wiki.local'
  1284. else
  1285. WIKI_DETAILS_COMPLETE=
  1286. while [ ! $WIKI_DETAILS_COMPLETE ]
  1287. do
  1288. data=$(tempfile 2>/dev/null)
  1289. trap "rm -f $data" 0 1 2 5 15
  1290. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1291. dialog --backtitle $"Freedombone Configuration" \
  1292. --title $"Wiki Configuration" \
  1293. --form $"\nPlease enter your wiki details:" 11 55 4 \
  1294. $"Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1295. $"Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \
  1296. $"Code:" 3 1 "$(grep 'WIKI_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 33 255 \
  1297. 2> $data
  1298. else
  1299. dialog --backtitle $"Freedombone Configuration" \
  1300. --title $"Wiki Configuration" \
  1301. --form $"\nPlease enter your wiki details:" 11 55 3 \
  1302. $"Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1303. $"Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \
  1304. 2> $data
  1305. fi
  1306. sel=$?
  1307. case $sel in
  1308. 1) exit 1;;
  1309. 255) exit 1;;
  1310. esac
  1311. WIKI_TITLE=$(cat $data | sed -n 1p)
  1312. WIKI_DOMAIN_NAME=$(cat $data | sed -n 2p)
  1313. if [ $WIKI_DOMAIN_NAME ]; then
  1314. TEST_DOMAIN_NAME=$WIKI_DOMAIN_NAME
  1315. validate_domain_name
  1316. if [[ $TEST_DOMAIN_NAME != $WIKI_DOMAIN_NAME ]]; then
  1317. WIKI_DOMAIN_NAME=
  1318. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1319. else
  1320. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1321. WIKI_CODE=$(cat $data | sed -n 3p)
  1322. validate_freedns_code "$WIKI_CODE"
  1323. if [ ! $VALID_CODE ]; then
  1324. WIKI_DOMAIN_NAME=
  1325. fi
  1326. fi
  1327. fi
  1328. fi
  1329. if [ $WIKI_DOMAIN_NAME ]; then
  1330. WIKI_DETAILS_COMPLETE="yes"
  1331. fi
  1332. done
  1333. fi
  1334. save_configuration_file
  1335. fi
  1336. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1337. if [[ $ONION_ONLY != "no" ]]; then
  1338. MY_BLOG_TITLE='My Blog'
  1339. FULLBLOG_DOMAIN_NAME='blog.local'
  1340. else
  1341. FULLBLOG_DETAILS_COMPLETE=
  1342. while [ ! $FULLBLOG_DETAILS_COMPLETE ]
  1343. do
  1344. data=$(tempfile 2>/dev/null)
  1345. trap "rm -f $data" 0 1 2 5 15
  1346. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1347. dialog --backtitle $"Freedombone Configuration" \
  1348. --title $"Blog Configuration" \
  1349. --form $"\nPlease enter your blog details:" 11 55 4 \
  1350. $"Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1351. $"Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \
  1352. $"Code:" 3 1 "$(grep 'FULLBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 33 255 \
  1353. 2> $data
  1354. else
  1355. dialog --backtitle $"Freedombone Configuration" \
  1356. --title $"Blog Configuration" \
  1357. --form $"\nPlease enter your blog details:" 11 55 3 \
  1358. $"Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1359. $"Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \
  1360. 2> $data
  1361. fi
  1362. sel=$?
  1363. case $sel in
  1364. 1) exit 1;;
  1365. 255) exit 1;;
  1366. esac
  1367. MY_BLOG_TITLE=$(cat $data | sed -n 1p)
  1368. FULLBLOG_DOMAIN_NAME=$(cat $data | sed -n 2p)
  1369. if [ $FULLBLOG_DOMAIN_NAME ]; then
  1370. if [[ $FULLBLOG_DOMAIN_NAME == "$WIKI_DOMAIN_NAME" ]]; then
  1371. FULLBLOG_DOMAIN_NAME=""
  1372. fi
  1373. TEST_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME
  1374. validate_domain_name
  1375. if [[ $TEST_DOMAIN_NAME != $FULLBLOG_DOMAIN_NAME ]]; then
  1376. FULLBLOG_DOMAIN_NAME=
  1377. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1378. else
  1379. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1380. FULLBLOG_CODE=$(cat $data | sed -n 3p)
  1381. validate_freedns_code "$FULLBLOG_CODE"
  1382. if [ ! $VALID_CODE ]; then
  1383. FULLBLOG_DOMAIN_NAME=
  1384. fi
  1385. fi
  1386. fi
  1387. fi
  1388. if [ $FULLBLOG_DOMAIN_NAME ]; then
  1389. FULLBLOG_DETAILS_COMPLETE="yes"
  1390. fi
  1391. done
  1392. fi
  1393. save_configuration_file
  1394. fi
  1395. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1396. if [[ $ONION_ONLY != "no" ]]; then
  1397. OWNCLOUD_DOMAIN_NAME='owncloud.local'
  1398. else
  1399. OWNCLOUD_DETAILS_COMPLETE=
  1400. while [ ! $OWNCLOUD_DETAILS_COMPLETE ]
  1401. do
  1402. data=$(tempfile 2>/dev/null)
  1403. trap "rm -f $data" 0 1 2 5 15
  1404. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1405. dialog --backtitle $"Freedombone Configuration" \
  1406. --title $"Owncloud Configuration" \
  1407. --form $"\nPlease enter your Owncloud details:" 11 55 3 \
  1408. $"Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1409. $"Code:" 2 1 "$(grep 'OWNCLOUD_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \
  1410. 2> $data
  1411. else
  1412. dialog --backtitle $"Freedombone Configuration" \
  1413. --title $"Owncloud Configuration" \
  1414. --form $"\nPlease enter your Owncloud details:" 11 55 3 \
  1415. $"Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1416. 2> $data
  1417. fi
  1418. sel=$?
  1419. case $sel in
  1420. 1) exit 1;;
  1421. 255) exit 1;;
  1422. esac
  1423. OWNCLOUD_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1424. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  1425. TEST_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME
  1426. validate_domain_name
  1427. if [[ $TEST_DOMAIN_NAME != $OWNCLOUD_DOMAIN_NAME ]]; then
  1428. OWNCLOUD_DOMAIN_NAME=
  1429. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1430. else
  1431. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1432. OWNCLOUD_CODE=$(cat $data | sed -n 2p)
  1433. validate_freedns_code "$OWNCLOUD_CODE"
  1434. if [ ! $VALID_CODE ]; then
  1435. OWNCLOUD_DOMAIN_NAME=
  1436. fi
  1437. fi
  1438. fi
  1439. fi
  1440. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  1441. OWNCLOUD_DETAILS_COMPLETE="yes"
  1442. fi
  1443. done
  1444. fi
  1445. save_configuration_file
  1446. fi
  1447. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1448. if [[ $ONION_ONLY != "no" ]]; then
  1449. HUBZILLA_DOMAIN_NAME='hubzilla.local'
  1450. else
  1451. HUBZILLA_DETAILS_COMPLETE=
  1452. while [ ! $HUBZILLA_DETAILS_COMPLETE ]
  1453. do
  1454. data=$(tempfile 2>/dev/null)
  1455. trap "rm -f $data" 0 1 2 5 15
  1456. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1457. dialog --backtitle $"Freedombone Configuration" \
  1458. --title $"Hubzilla Configuration" \
  1459. --form $"\nPlease enter your Hubzilla details.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 55 3 \
  1460. $"Domain:" 1 1 "$(grep 'HUBZILLA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1461. $"Code:" 2 1 "$(grep 'HUBZILLA_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \
  1462. 2> $data
  1463. else
  1464. dialog --backtitle $"Freedombone Configuration" \
  1465. --title $"Hubzilla Configuration" \
  1466. --form $"\nPlease enter your Hubzilla details\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 11 55 3 \
  1467. $"Domain:" 1 1 "$(grep 'HUBZILLA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1468. 2> $data
  1469. fi
  1470. sel=$?
  1471. case $sel in
  1472. 1) exit 1;;
  1473. 255) exit 1;;
  1474. esac
  1475. HUBZILLA_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1476. if [ $HUBZILLA_DOMAIN_NAME ]; then
  1477. TEST_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME
  1478. validate_domain_name
  1479. if [[ $TEST_DOMAIN_NAME != $HUBZILLA_DOMAIN_NAME ]]; then
  1480. HUBZILLA_DOMAIN_NAME=
  1481. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1482. else
  1483. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1484. HUBZILLA_CODE=$(cat $data | sed -n 2p)
  1485. validate_freedns_code "$HUBZILLA_CODE"
  1486. if [ ! $VALID_CODE ]; then
  1487. HUBZILLA_DOMAIN_NAME=
  1488. fi
  1489. fi
  1490. fi
  1491. fi
  1492. if [ $HUBZILLA_DOMAIN_NAME ]; then
  1493. HUBZILLA_DETAILS_COMPLETE="yes"
  1494. fi
  1495. done
  1496. fi
  1497. save_configuration_file
  1498. fi
  1499. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1500. if [[ $ONION_ONLY != "no" ]]; then
  1501. MICROBLOG_DOMAIN_NAME='microblog.local'
  1502. else
  1503. MICROBLOG_DETAILS_COMPLETE=
  1504. while [ ! $MICROBLOG_DETAILS_COMPLETE ]
  1505. do
  1506. data=$(tempfile 2>/dev/null)
  1507. trap "rm -f $data" 0 1 2 5 15
  1508. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1509. dialog --backtitle $"Freedombone Configuration" \
  1510. --title $"Microblog Configuration" \
  1511. --form $"\nPlease enter your Microblog details. Welcome message and background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 4 \
  1512. $"Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
  1513. $"Welcome Message:" 2 1 "$(grep '$MICROBLOG_WELCOME_MESSAGE' temp.cfg | awk -F '=' '{print $2}')" 2 25 255 255 \
  1514. $"Background image URL:" 3 1 "$(grep '$MICROBLOG_BACKGROUND_IMAGE_URL' temp.cfg | awk -F '=' '{print $2}')" 3 25 255 255 \
  1515. $"Code:" 4 1 "$(grep 'MICROBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 4 25 33 255 \
  1516. 2> $data
  1517. else
  1518. dialog --backtitle $"Freedombone Configuration" \
  1519. --title $"Microblog Configuration" \
  1520. --form $"\nPlease enter your Microblog details. Welcome message and background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 4 \
  1521. $"Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \
  1522. $"Welcome Message:" 2 1 "$(grep '$MICROBLOG_WELCOME_MESSAGE' temp.cfg | awk -F '=' '{print $2}')" 2 25 255 255 \
  1523. $"Background image URL:" 3 1 "$(grep '$MICROBLOG_BACKGROUND_IMAGE_URL' temp.cfg | awk -F '=' '{print $2}')" 3 25 255 255 \
  1524. 2> $data
  1525. fi
  1526. sel=$?
  1527. case $sel in
  1528. 1) exit 1;;
  1529. 255) exit 1;;
  1530. esac
  1531. MICROBLOG_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1532. welcome_msg=$(cat $data | sed -n 2p)
  1533. if [ ${#welcome_msg} -gt 1 ]; then
  1534. MICROBLOG_WELCOME_MESSAGE=$welcome_msg
  1535. fi
  1536. img_url=$(cat $data | sed -n 3p)
  1537. if [ ${#img_url} -gt 1 ]; then
  1538. MICROBLOG_BACKGROUND_IMAGE_URL=$img_url
  1539. fi
  1540. if [ $MICROBLOG_DOMAIN_NAME ]; then
  1541. if [[ $MICROBLOG_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then
  1542. MICROBLOG_DOMAIN_NAME=""
  1543. fi
  1544. TEST_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME
  1545. validate_domain_name
  1546. if [[ $TEST_DOMAIN_NAME != $MICROBLOG_DOMAIN_NAME ]]; then
  1547. MICROBLOG_DOMAIN_NAME=
  1548. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1549. else
  1550. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1551. MICROBLOG_CODE=$(cat $data | sed -n 4p)
  1552. validate_freedns_code "$MICROBLOG_CODE"
  1553. if [ ! $VALID_CODE ]; then
  1554. MICROBLOG_DOMAIN_NAME=
  1555. fi
  1556. fi
  1557. fi
  1558. fi
  1559. if [ $MICROBLOG_DOMAIN_NAME ]; then
  1560. MICROBLOG_DETAILS_COMPLETE="yes"
  1561. fi
  1562. done
  1563. fi
  1564. save_configuration_file
  1565. fi
  1566. if [[ $SYSTEM_TYPE == "$VARIANT_DEVELOPER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1567. if [[ $ONION_ONLY != "no" ]]; then
  1568. GIT_DOMAIN_NAME='git.local'
  1569. else
  1570. DEVELOPER_DETAILS_COMPLETE=
  1571. while [ ! $DEVELOPER_DETAILS_COMPLETE ]
  1572. do
  1573. data=$(tempfile 2>/dev/null)
  1574. trap "rm -f $data" 0 1 2 5 15
  1575. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1576. dialog --backtitle $"Freedombone Configuration" \
  1577. --title $"Developer Configuration" \
  1578. --form $"\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 3 \
  1579. $"Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1580. $"Code:" 2 1 "$(grep 'GIT_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \
  1581. 2> $data
  1582. else
  1583. dialog --backtitle $"Freedombone Configuration" \
  1584. --title $"Developer Configuration" \
  1585. --form $"\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 2 \
  1586. $"Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1587. 2> $data
  1588. fi
  1589. sel=$?
  1590. case $sel in
  1591. 1) exit 1;;
  1592. 255) exit 1;;
  1593. esac
  1594. GIT_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1595. if [ $GIT_DOMAIN_NAME ]; then
  1596. TEST_DOMAIN_NAME=$GIT_DOMAIN_NAME
  1597. validate_domain_name
  1598. if [[ $TEST_DOMAIN_NAME != $GIT_DOMAIN_NAME ]]; then
  1599. GIT_DOMAIN_NAME=
  1600. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1601. else
  1602. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1603. GIT_CODE=$(cat $data | sed -n 2p)
  1604. validate_freedns_code "$GIT_CODE"
  1605. if [ ! $VALID_CODE ]; then
  1606. GIT_DOMAIN_NAME=
  1607. fi
  1608. fi
  1609. fi
  1610. else
  1611. DEVELOPER_DETAILS_COMPLETE="yes"
  1612. fi
  1613. if [ $GIT_DOMAIN_NAME ]; then
  1614. DEVELOPER_DETAILS_COMPLETE="yes"
  1615. fi
  1616. done
  1617. fi
  1618. save_configuration_file
  1619. fi
  1620. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  1621. if [[ $ONION_ONLY != "no" ]]; then
  1622. DEFAULT_DOMAIN_NAME="${PROJECT_NAME}.local"
  1623. else
  1624. DEFAULT_DOMAIN_DETAILS_COMPLETE=
  1625. while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ]
  1626. do
  1627. data=$(tempfile 2>/dev/null)
  1628. trap "rm -f $data" 0 1 2 5 15
  1629. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1630. dialog --backtitle $"Freedombone Configuration" \
  1631. --title $"Your main domain name" \
  1632. --form $"\nWhich domain name should your email/XMPP/IRC/VoIP be associated with?" 11 55 3 \
  1633. $"Domain:" 1 1 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \
  1634. $"Code:" 2 1 "$(grep 'DEFAULT_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \
  1635. 2> $data
  1636. sel=$?
  1637. case $sel in
  1638. 1) exit 1;;
  1639. 255) exit 1;;
  1640. esac
  1641. DEFAULT_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1642. DEFAULT_DOMAIN_CODE=$(cat $data | sed -n 2p)
  1643. if [ $DEFAULT_DOMAIN_NAME ]; then
  1644. validate_freedns_code "$DEFAULT_DOMAIN_CODE"
  1645. if [ ! $VALID_CODE ]; then
  1646. DEFAULT_DOMAIN_NAME=
  1647. fi
  1648. fi
  1649. else
  1650. dialog --backtitle $"Freedombone Configuration" \
  1651. --inputbox $"Which domain name should your email/XMPP/IRC/VoIP be associated with?" 10 45 \
  1652. "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  1653. sel=$?
  1654. case $sel in
  1655. 0) DEFAULT_DOMAIN_NAME=$(cat $data);;
  1656. 1) exit 1;;
  1657. 255) exit 1;;
  1658. esac
  1659. fi
  1660. if [ $DEFAULT_DOMAIN_NAME ]; then
  1661. TEST_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME
  1662. validate_domain_name
  1663. if [[ $TEST_DOMAIN_NAME != $DEFAULT_DOMAIN_NAME ]]; then
  1664. DEFAULT_DOMAIN_NAME=
  1665. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1666. else
  1667. DEFAULT_DOMAIN_DETAILS_COMPLETE="yes"
  1668. fi
  1669. fi
  1670. done
  1671. fi
  1672. save_configuration_file
  1673. if [[ $ONION_ONLY != "no" ]]; then
  1674. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  1675. else
  1676. while [ ${#MY_EMAIL_ADDRESS} -lt 5 ]
  1677. do
  1678. EMAIL_ADDRESS=$(grep 'MY_EMAIL_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  1679. if [ ! $EMAIL_ADDRESS ]; then
  1680. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  1681. fi
  1682. if [ ${#MY_EMAIL_ADDRESS} -lt 5 ]; then
  1683. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  1684. fi
  1685. data=$(tempfile 2>/dev/null)
  1686. trap "rm -f $data" 0 1 2 5 15
  1687. dialog --backtitle $"Freedombone Configuration" \
  1688. --inputbox $"Your email address" 10 30 "$EMAIL_ADDRESS" 2> $data
  1689. sel=$?
  1690. case $sel in
  1691. 0) MY_EMAIL_ADDRESS=$(cat $data);;
  1692. 1) exit 1;;
  1693. 255) exit 1;;
  1694. esac
  1695. done
  1696. fi
  1697. save_configuration_file
  1698. fi
  1699. # delete the temporary configuration file
  1700. if [ -f temp.cfg ]; then
  1701. shred -zu temp.cfg
  1702. fi
  1703. }
  1704. function show_result {
  1705. #clear
  1706. echo ''
  1707. echo -n $"Configuration filename:"
  1708. echo " $CONFIGURATION_FILE"
  1709. echo ''
  1710. echo $'Contents:'
  1711. echo ''
  1712. cat $CONFIGURATION_FILE
  1713. echo ''
  1714. }
  1715. function read_configuration {
  1716. if [ ! $CONFIGURATION_FILE ]; then
  1717. CONFIGURATION_FILE='freedombone.cfg'
  1718. fi
  1719. if [ -f $CONFIGURATION_FILE ]; then
  1720. if grep -q "FRIENDS_MIRRORS_SERVER" $CONFIGURATION_FILE; then
  1721. FRIENDS_MIRRORS_SERVER=$(grep "FRIENDS_MIRRORS_SERVER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1722. fi
  1723. if grep -q "FRIENDS_MIRRORS_SSH_PORT" $CONFIGURATION_FILE; then
  1724. FRIENDS_MIRRORS_SSH_PORT=$(grep "FRIENDS_MIRRORS_SSH_PORT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1725. fi
  1726. if grep -q "FRIENDS_MIRRORS_PASSWORD" $CONFIGURATION_FILE; then
  1727. FRIENDS_MIRRORS_PASSWORD=$(grep "FRIENDS_MIRRORS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1728. fi
  1729. if grep -q "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE; then
  1730. ENABLE_SOCIAL_KEY_MANAGEMENT=$(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1731. fi
  1732. if grep -q "GIT_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1733. GIT_DOMAIN_NAME=$(grep "GIT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1734. fi
  1735. if grep -q "GIT_CODE" $CONFIGURATION_FILE; then
  1736. GIT_CODE=$(grep "GIT_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1737. fi
  1738. if grep -q "MY_USERNAME" $CONFIGURATION_FILE; then
  1739. MY_USERNAME=$(grep "MY_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1740. fi
  1741. if grep -q "DOMAIN_NAME" $CONFIGURATION_FILE; then
  1742. # for backwards compatability
  1743. DEFAULT_DOMAIN_NAME=$(grep "DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1744. fi
  1745. if grep -q "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1746. DEFAULT_DOMAIN_NAME=$(grep "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1747. fi
  1748. if grep -q "DEFAULT_DOMAIN_CODE" $CONFIGURATION_FILE; then
  1749. DEFAULT_DOMAIN_CODE=$(grep "DEFAULT_DOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1750. fi
  1751. if grep -q "NAMESERVER1" $CONFIGURATION_FILE; then
  1752. NAMESERVER1=$(grep "NAMESERVER1" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1753. fi
  1754. if grep -q "NAMESERVER2" $CONFIGURATION_FILE; then
  1755. NAMESERVER2=$(grep "NAMESERVER2" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1756. fi
  1757. if grep -q "DEBIAN_REPO" $CONFIGURATION_FILE; then
  1758. DEBIAN_REPO=$(grep "DEBIAN_REPO" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1759. 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."
  1760. fi
  1761. if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
  1762. DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1763. fi
  1764. if grep -q "DDNS_USERNAME" $CONFIGURATION_FILE; then
  1765. DDNS_USERNAME=$(grep "DDNS_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1766. fi
  1767. if grep -q "DDNS_PASSWORD" $CONFIGURATION_FILE; then
  1768. DDNS_PASSWORD=$(grep "DDNS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1769. fi
  1770. if grep -q "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE; then
  1771. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1772. fi
  1773. if grep -q "ENABLE_CJDNS" $CONFIGURATION_FILE; then
  1774. ENABLE_CJDNS=$(grep "ENABLE_CJDNS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1775. fi
  1776. if grep -q "ENABLE_BATMAN" $CONFIGURATION_FILE; then
  1777. ENABLE_BATMAN=$(grep "ENABLE_BATMAN" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1778. fi
  1779. if grep -q "ENABLE_BABEL" $CONFIGURATION_FILE; then
  1780. ENABLE_BABEL=$(grep "ENABLE_BABEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1781. fi
  1782. if grep -q "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE; then
  1783. ROUTER_IP_ADDRESS=$(grep "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1784. fi
  1785. if grep -q "WIKI_TITLE" $CONFIGURATION_FILE; then
  1786. WIKI_TITLE=$(grep "WIKI_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1787. fi
  1788. if grep -q "MY_NAME" $CONFIGURATION_FILE; then
  1789. MY_NAME=$(grep "MY_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1790. fi
  1791. if grep -q "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE; then
  1792. MY_EMAIL_ADDRESS=$(grep "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1793. fi
  1794. if grep -q "INSTALLING_ON_BBB" $CONFIGURATION_FILE; then
  1795. INSTALLING_ON_BBB=$(grep "INSTALLING_ON_BBB" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1796. fi
  1797. if grep -q "USB_DRIVE" $CONFIGURATION_FILE; then
  1798. USB_DRIVE=$(grep "USB_DRIVE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1799. fi
  1800. if grep -q "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE; then
  1801. PUBLIC_MAILING_LIST=$(grep "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1802. fi
  1803. if grep -q "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1804. MICROBLOG_DOMAIN_NAME=$(grep "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1805. fi
  1806. if grep -q "MICROBLOG_CODE" $CONFIGURATION_FILE; then
  1807. MICROBLOG_CODE=$(grep "MICROBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1808. fi
  1809. if grep -q "MICROBLOG_WELCOME_MESSAGE" $CONFIGURATION_FILE; then
  1810. MICROBLOG_WELCOME_MESSAGE=$(grep "MICROBLOG_WELCOME_MESSAGE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1811. fi
  1812. if grep -q "MICROBLOG_BACKGROUND_IMAGE_URL" $CONFIGURATION_FILE; then
  1813. MICROBLOG_BACKGROUND_IMAGE_URL=$(grep "MICROBLOG_BACKGROUND_IMAGE_URL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1814. fi
  1815. if grep -q "HUBZILLA_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1816. HUBZILLA_DOMAIN_NAME=$(grep "HUBZILLA_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1817. fi
  1818. if grep -q "HUBZILLA_CODE" $CONFIGURATION_FILE; then
  1819. HUBZILLA_CODE=$(grep "HUBZILLA_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1820. fi
  1821. if grep -q "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1822. OWNCLOUD_DOMAIN_NAME=$(grep "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1823. fi
  1824. if grep -q "OWNCLOUD_CODE" $CONFIGURATION_FILE; then
  1825. OWNCLOUD_CODE=$(grep "OWNCLOUD_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1826. fi
  1827. if grep -q "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1828. WIKI_DOMAIN_NAME=$(grep "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1829. fi
  1830. if grep -q "WIKI_CODE" $CONFIGURATION_FILE; then
  1831. WIKI_CODE=$(grep "WIKI_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1832. fi
  1833. if grep -q "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1834. FULLBLOG_DOMAIN_NAME=$(grep "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1835. fi
  1836. if grep -q "FULLBLOG_CODE" $CONFIGURATION_FILE; then
  1837. FULLBLOG_CODE=$(grep "FULLBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1838. fi
  1839. if grep -q "MY_BLOG_TITLE" $CONFIGURATION_FILE; then
  1840. MY_BLOG_TITLE=$(grep "MY_BLOG_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1841. fi
  1842. if grep -q "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE; then
  1843. MY_BLOG_SUBTITLE=$(grep "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1844. fi
  1845. if grep -q "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1846. MEDIAGOBLIN_DOMAIN_NAME=$(grep "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1847. fi
  1848. if grep -q "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE; then
  1849. MEDIAGOBLIN_CODE=$(grep "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1850. fi
  1851. if grep -q "ESSID" $CONFIGURATION_FILE; then
  1852. ESSID=$(grep "ESSID" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1853. fi
  1854. if grep -q "BATMAN_CELLID" $CONFIGURATION_FILE; then
  1855. BATMAN_CELLID=$(grep "BATMAN_CELLID" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1856. fi
  1857. if grep -q "WIFI_CHANNEL" $CONFIGURATION_FILE; then
  1858. WIFI_CHANNEL=$(grep "WIFI_CHANNEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1859. fi
  1860. if grep -q "ONION_ONLY" $CONFIGURATION_FILE; then
  1861. ONION_ONLY=$(grep "ONION_ONLY" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1862. fi
  1863. fi
  1864. }
  1865. read_configuration
  1866. interactive_configuration
  1867. show_result
  1868. exit 0