freedombone-config 76KB

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