freedombone-config 59KB

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