freedombone-config 57KB

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