freedombone-config 62KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608
  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. HUBZILLA_DOMAIN_NAME=
  78. HUBZILLA_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 [ $HUBZILLA_DOMAIN_NAME ]; then
  200. echo "HUBZILLA_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME" >> $CONFIGURATION_FILE
  201. fi
  202. if [ $HUBZILLA_CODE ]; then
  203. echo "HUBZILLA_CODE=$HUBZILLA_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. It is known (as of 2015) that
  653. # 1024bit DH may be breakable, so this is really a tradeoff between security and the
  654. # available hardware
  655. DH_KEYLENGTH=1024
  656. fi
  657. save_configuration_file
  658. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  659. interactive_gpg
  660. data=$(tempfile 2>/dev/null)
  661. trap "rm -f $data" 0 1 2 5 15
  662. 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."
  663. if [[ $(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then
  664. dialog --title "Social Key Management" \
  665. --backtitle "Freedombone Configuration" \
  666. --yesno "$SOCIAL_KEY_STR" 15 60
  667. else
  668. dialog --title "Social Key Management" \
  669. --backtitle "Freedombone Configuration" \
  670. --defaultno \
  671. --yesno "$SOCIAL_KEY_STR" 15 60
  672. fi
  673. sel=$?
  674. case $sel in
  675. 0) ENABLE_SOCIAL_KEY_MANAGEMENT="yes";;
  676. 255) exit 1;;
  677. esac
  678. save_configuration_file
  679. fi
  680. data=$(tempfile 2>/dev/null)
  681. trap "rm -f $data" 0 1 2 5 15
  682. if [[ $INSTALLING_ON_BBB != "yes" ]]; then
  683. dialog --backtitle "Freedombone Configuration" \
  684. --radiolist "Type of Random Number Generator:" 10 40 2 \
  685. 1 Haveged on \
  686. 2 OneRNG off 2> $data
  687. sel=$?
  688. case $sel in
  689. 1) exit 1;;
  690. 255) exit 1;;
  691. esac
  692. case $(cat $data) in
  693. 2) HWRNG_TYPE="onerng"
  694. dialog --title "OneRNG Device" \
  695. --msgbox "Please ensure that the OneRNG device is disconnected. You can reconnect it later during the installation" 8 60
  696. ;;
  697. 255) exit 1;;
  698. esac
  699. else
  700. HWRNG_TYPE="beaglebone"
  701. fi
  702. save_configuration_file
  703. data=$(tempfile 2>/dev/null)
  704. trap "rm -f $data" 0 1 2 5 15
  705. dialog --backtitle "Freedombone Configuration" \
  706. --radiolist "Where to download Debian packages from:" 25 45 49 \
  707. 1 "Australia" off \
  708. 2 "Austria" off \
  709. 3 "Belarus" off \
  710. 4 "Belgium" off \
  711. 5 "Bosnia and Herzegovina" off \
  712. 6 "Brazil" off \
  713. 7 "Bulgaria" off \
  714. 8 "Canada" off \
  715. 9 "Chile" off \
  716. 10 "China" off \
  717. 11 "Croatia" off \
  718. 12 "Czech Republic" off \
  719. 13 "Denmark" off \
  720. 14 "El Salvador" off \
  721. 15 "Estonia" off \
  722. 16 "Finland" off \
  723. 17 "France 1" off \
  724. 18 "France 2" off \
  725. 19 "Germany 1" off \
  726. 20 "Germany 2" off \
  727. 21 "Greece" off \
  728. 22 "Hungary" off \
  729. 23 "Iceland" off \
  730. 24 "Iran" off \
  731. 25 "Ireland" off \
  732. 26 "Italy" off \
  733. 27 "Japan" off \
  734. 28 "Korea" off \
  735. 29 "Lithuania" off \
  736. 30 "Mexico" off \
  737. 31 "Netherlands" off \
  738. 32 "New Caledonia" off \
  739. 33 "New Zealand" off \
  740. 34 "Norway" off \
  741. 35 "Poland" off \
  742. 36 "Portugal" off \
  743. 37 "Romania" off \
  744. 38 "Russia" off \
  745. 39 "Slovakia" off \
  746. 40 "Slovenia" off \
  747. 41 "Spain" off \
  748. 42 "Sweden" off \
  749. 43 "Switzerland" off \
  750. 44 "Taiwan" off \
  751. 45 "Thailand" off \
  752. 46 "Turkey" off \
  753. 47 "Ukraine" off \
  754. 48 "United Kingdom" off \
  755. 49 "United States" on 2> $data
  756. sel=$?
  757. case $sel in
  758. 1) exit 1;;
  759. 255) exit 1;;
  760. esac
  761. case $(cat $data) in
  762. 1) DEBIAN_REPO='ftp.au.debian.org';;
  763. 2) DEBIAN_REPO='ftp.at.debian.org';;
  764. 3) DEBIAN_REPO='ftp.by.debian.org';;
  765. 4) DEBIAN_REPO='ftp.be.debian.org';;
  766. 5) DEBIAN_REPO='ftp.ba.debian.org';;
  767. 6) DEBIAN_REPO='ftp.br.debian.org';;
  768. 7) DEBIAN_REPO='ftp.bg.debian.org';;
  769. 8) DEBIAN_REPO='ftp.ca.debian.org';;
  770. 9) DEBIAN_REPO='ftp.cl.debian.org';;
  771. 10) DEBIAN_REPO='ftp.cn.debian.org';;
  772. 11) DEBIAN_REPO='ftp.hr.debian.org';;
  773. 12) DEBIAN_REPO='ftp.cz.debian.org';;
  774. 13) DEBIAN_REPO='ftp.dk.debian.org';;
  775. 14) DEBIAN_REPO='ftp.sv.debian.org';;
  776. 15) DEBIAN_REPO='ftp.ee.debian.org';;
  777. 16) DEBIAN_REPO='ftp.fi.debian.org';;
  778. 17) DEBIAN_REPO='ftp2.fr.debian.org';;
  779. 18) DEBIAN_REPO='ftp.fr.debian.org';;
  780. 19) DEBIAN_REPO='ftp2.de.debian.org';;
  781. 20) DEBIAN_REPO='ftp.de.debian.org';;
  782. 21) DEBIAN_REPO='ftp.gr.debian.org';;
  783. 22) DEBIAN_REPO='ftp.hu.debian.org';;
  784. 23) DEBIAN_REPO='ftp.is.debian.org';;
  785. 24) DEBIAN_REPO='ftp.ir.debian.org';;
  786. 25) DEBIAN_REPO='ftp.ie.debian.org';;
  787. 26) DEBIAN_REPO='ftp.it.debian.org';;
  788. 27) DEBIAN_REPO='ftp.jp.debian.org';;
  789. 28) DEBIAN_REPO='ftp.kr.debian.org';;
  790. 29) DEBIAN_REPO='ftp.lt.debian.org';;
  791. 30) DEBIAN_REPO='ftp.mx.debian.org';;
  792. 31) DEBIAN_REPO='ftp.nl.debian.org';;
  793. 32) DEBIAN_REPO='ftp.nc.debian.org';;
  794. 33) DEBIAN_REPO='ftp.nz.debian.org';;
  795. 34) DEBIAN_REPO='ftp.no.debian.org';;
  796. 35) DEBIAN_REPO='ftp.pl.debian.org';;
  797. 36) DEBIAN_REPO='ftp.pt.debian.org';;
  798. 37) DEBIAN_REPO='ftp.ro.debian.org';;
  799. 38) DEBIAN_REPO='ftp.ru.debian.org';;
  800. 39) DEBIAN_REPO='ftp.sk.debian.org';;
  801. 40) DEBIAN_REPO='ftp.si.debian.org';;
  802. 41) DEBIAN_REPO='ftp.es.debian.org';;
  803. 42) DEBIAN_REPO='ftp.se.debian.org';;
  804. 43) DEBIAN_REPO='ftp.ch.debian.org';;
  805. 44) DEBIAN_REPO='ftp.tw.debian.org';;
  806. 45) DEBIAN_REPO='ftp.th.debian.org';;
  807. 46) DEBIAN_REPO='ftp.tr.debian.org';;
  808. 47) DEBIAN_REPO='ftp.ua.debian.org';;
  809. 48) DEBIAN_REPO='ftp.uk.debian.org';;
  810. 49) DEBIAN_REPO='ftp.us.debian.org';;
  811. 255) exit 1;;
  812. esac
  813. save_configuration_file
  814. data=$(tempfile 2>/dev/null)
  815. trap "rm -f $data" 0 1 2 5 15
  816. dialog --backtitle "Freedombone Configuration" \
  817. --radiolist "Pick a domain name service (DNS):" 25 50 16 \
  818. 1 "Digital Courage" on \
  819. 2 "German Privacy Foundation 1" off \
  820. 3 "German Privacy Foundation 2" off \
  821. 4 "Chaos Computer Club" off \
  822. 5 "ClaraNet" off \
  823. 6 "OpenNIC 1" off \
  824. 7 "OpenNIC 2" off \
  825. 8 "OpenNIC 3" off \
  826. 9 "OpenNIC 4" off \
  827. 10 "OpenNIC 5" off \
  828. 11 "OpenNIC 6" off \
  829. 12 "OpenNIC 7" off \
  830. 13 "PowerNS" off \
  831. 14 "ValiDOM" off \
  832. 15 "Freie Unzensierte" off \
  833. 16 "Google" off 2> $data
  834. sel=$?
  835. case $sel in
  836. 1) exit 1;;
  837. 255) exit 1;;
  838. esac
  839. case $(cat $data) in
  840. 1) NAMESERVER1='85.214.73.63'
  841. NAMESERVER2='213.73.91.35'
  842. ;;
  843. 2) NAMESERVER1='87.118.100.175'
  844. NAMESERVER2='94.75.228.29'
  845. ;;
  846. 3) NAMESERVER1='85.25.251.254'
  847. NAMESERVER2='2.141.58.13'
  848. ;;
  849. 4) NAMESERVER1='213.73.91.35'
  850. NAMESERVER2='85.214.73.63'
  851. ;;
  852. 5) NAMESERVER1='212.82.225.7'
  853. NAMESERVER2='212.82.226.212'
  854. ;;
  855. 6) NAMESERVER1='58.6.115.42'
  856. NAMESERVER2='58.6.115.43'
  857. ;;
  858. 7) NAMESERVER1='119.31.230.42'
  859. NAMESERVER2='200.252.98.162'
  860. ;;
  861. 8) NAMESERVER1='217.79.186.148'
  862. NAMESERVER2='81.89.98.6'
  863. ;;
  864. 9) NAMESERVER1='78.159.101.37'
  865. NAMESERVER2='203.167.220.153'
  866. ;;
  867. 10) NAMESERVER1='82.229.244.191'
  868. NAMESERVER2='82.229.244.191'
  869. ;;
  870. 11) NAMESERVER1='216.87.84.211'
  871. NAMESERVER2='66.244.95.20'
  872. ;;
  873. 12) NAMESERVER1='207.192.69.155'
  874. NAMESERVER2='72.14.189.120'
  875. ;;
  876. 13) NAMESERVER1='194.145.226.26'
  877. NAMESERVER2='77.220.232.44'
  878. ;;
  879. 14) NAMESERVER1='78.46.89.147'
  880. NAMESERVER2='88.198.75.145'
  881. ;;
  882. 15) NAMESERVER1='85.25.149.144'
  883. NAMESERVER2='87.106.37.196'
  884. ;;
  885. 16) NAMESERVER1='8.8.8.8'
  886. NAMESERVER2='4.4.4.4'
  887. ;;
  888. 255) exit 1;;
  889. esac
  890. save_configuration_file
  891. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  892. data=$(tempfile 2>/dev/null)
  893. trap "rm -f $data" 0 1 2 5 15
  894. dialog --backtitle "Freedombone Configuration" \
  895. --radiolist "Choose Dynamic DNS provider:" 15 40 14 \
  896. 1 dyndns off \
  897. 2 freedns on \
  898. 3 zoneedit off \
  899. 4 no-ip off \
  900. 5 easydns off \
  901. 6 tzo off \
  902. 7 3322 off \
  903. 8 dnsomatic off \
  904. 9 tunnelbroker off \
  905. 10 dns.he.net off \
  906. 11 dynsip off \
  907. 12 sitelutions off \
  908. 13 dnsexit off \
  909. 14 changeip off 2> $data
  910. sel=$?
  911. case $sel in
  912. 1) exit 1;;
  913. 255) exit 1;;
  914. esac
  915. case $(cat $data) in
  916. 1) DDNS_PROVIDER="default@dyndns.org";;
  917. 2) DDNS_PROVIDER="default@freedns.afraid.org";;
  918. 3) DDNS_PROVIDER="default@zoneedit.com";;
  919. 4) DDNS_PROVIDER="default@no-ip.com";;
  920. 5) DDNS_PROVIDER="default@easydns.com";;
  921. 6) DDNS_PROVIDER="default@tzo.com";;
  922. 7) DDNS_PROVIDER="dyndns@3322.org";;
  923. 8) DDNS_PROVIDER="default@dnsomatic.com";;
  924. 9) DDNS_PROVIDER="ipv6tb@he.net";;
  925. 10) DDNS_PROVIDER="dyndns@he.net";;
  926. 11) DDNS_PROVIDER="default@dynsip.org";;
  927. 12) DDNS_PROVIDER="default@sitelutions.com";;
  928. 13) DDNS_PROVIDER="default@dnsexit.com";;
  929. 14) DDNS_PROVIDER="default@changeip.com";;
  930. 255) exit 1;;
  931. esac
  932. save_configuration_file
  933. while [ ! $DDNS_USERNAME ]
  934. do
  935. data=$(tempfile 2>/dev/null)
  936. trap "rm -f $data" 0 1 2 5 15
  937. dialog --backtitle "Freedombone Configuration" \
  938. --inputbox "Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  939. sel=$?
  940. case $sel in
  941. 0) DDNS_USERNAME=$(cat $data);;
  942. 1) exit 1;;
  943. 255) exit 1;;
  944. esac
  945. done
  946. save_configuration_file
  947. while [ ! $DDNS_PASSWORD ]
  948. do
  949. data=$(tempfile 2>/dev/null)
  950. trap "rm -f $data" 0 1 2 5 15
  951. dialog --backtitle "Freedombone Configuration" \
  952. --clear \
  953. --insecure \
  954. --passwordbox "Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  955. sel=$?
  956. case $sel in
  957. 0) DDNS_PASSWORD=$(cat $data);;
  958. 1) exit 1;;
  959. 255) exit 1;;
  960. esac
  961. if [ ${#DDNS_PASSWORD} -lt $MINIMUM_PASSWORD_LENGTH ]; then
  962. 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
  963. DDNS_PASSWORD=""
  964. fi
  965. done
  966. save_configuration_file
  967. fi
  968. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  969. while [ ! $MY_NAME ]
  970. do
  971. data=$(tempfile 2>/dev/null)
  972. trap "rm -f $data" 0 1 2 5 15
  973. dialog --backtitle "Freedombone Configuration" \
  974. --inputbox "Your full name (or nick)" 10 30 "$(grep 'MY_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  975. sel=$?
  976. case $sel in
  977. 0) MY_NAME=$(cat $data);;
  978. 1) exit 1;;
  979. 255) exit 1;;
  980. esac
  981. done
  982. save_configuration_file
  983. fi
  984. if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  985. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep 'LOCAL_NETWORK_STATIC_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  986. if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  987. LOCAL_NETWORK_STATIC_IP_ADDRESS='192.168..'
  988. fi
  989. fi
  990. if [ ! $ROUTER_IP_ADDRESS ]; then
  991. ROUTER_IP_ADDRESS=$(grep 'ROUTER_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  992. if [ ! $ROUTER_IP_ADDRESS ]; then
  993. ROUTER_IP_ADDRESS='192.168..'
  994. fi
  995. fi
  996. data=$(tempfile 2>/dev/null)
  997. trap "rm -f $data" 0 1 2 5 15
  998. dialog --backtitle "Freedombone Configuration" \
  999. --title "Local Network Configuration" \
  1000. --form "\nPlease enter the IP addresses:" 11 55 3 \
  1001. "This system:" 1 1 "$LOCAL_NETWORK_STATIC_IP_ADDRESS" 1 16 16 15 \
  1002. "Internet router:" 2 1 "$ROUTER_IP_ADDRESS" 2 16 16 15 \
  1003. 2> $data
  1004. sel=$?
  1005. case $sel in
  1006. 1) exit 1;;
  1007. 255) exit 1;;
  1008. esac
  1009. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(cat $data | sed -n 1p)
  1010. ROUTER_IP_ADDRESS=$(cat $data | sed -n 2p)
  1011. save_configuration_file
  1012. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1013. WIKI_DETAILS_COMPLETE=
  1014. while [ ! $WIKI_DETAILS_COMPLETE ]
  1015. do
  1016. data=$(tempfile 2>/dev/null)
  1017. trap "rm -f $data" 0 1 2 5 15
  1018. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1019. dialog --backtitle "Freedombone Configuration" \
  1020. --title "Wiki Configuration" \
  1021. --form "\nPlease enter your wiki details:" 11 55 4 \
  1022. "Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  1023. "Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \
  1024. "Code:" 3 1 "$(grep 'WIKI_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 25 40 \
  1025. 2> $data
  1026. else
  1027. dialog --backtitle "Freedombone Configuration" \
  1028. --title "Wiki Configuration" \
  1029. --form "\nPlease enter your wiki details:" 11 55 3 \
  1030. "Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  1031. "Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \
  1032. 2> $data
  1033. fi
  1034. sel=$?
  1035. case $sel in
  1036. 1) exit 1;;
  1037. 255) exit 1;;
  1038. esac
  1039. WIKI_TITLE=$(cat $data | sed -n 1p)
  1040. WIKI_DOMAIN_NAME=$(cat $data | sed -n 2p)
  1041. if [ $WIKI_DOMAIN_NAME ]; then
  1042. TEST_DOMAIN_NAME=$WIKI_DOMAIN_NAME
  1043. validate_domain_name
  1044. if [[ $TEST_DOMAIN_NAME != $WIKI_DOMAIN_NAME ]]; then
  1045. WIKI_DOMAIN_NAME=
  1046. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1047. else
  1048. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1049. WIKI_CODE=$(cat $data | sed -n 3p)
  1050. if [ ${#WIKI_CODE} -lt 30 ]; then
  1051. WIKI_DOMAIN_NAME=
  1052. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1053. fi
  1054. fi
  1055. fi
  1056. fi
  1057. if [ $WIKI_DOMAIN_NAME ]; then
  1058. WIKI_DETAILS_COMPLETE="yes"
  1059. fi
  1060. done
  1061. save_configuration_file
  1062. fi
  1063. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1064. FULLBLOG_DETAILS_COMPLETE=
  1065. while [ ! $FULLBLOG_DETAILS_COMPLETE ]
  1066. do
  1067. data=$(tempfile 2>/dev/null)
  1068. trap "rm -f $data" 0 1 2 5 15
  1069. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1070. dialog --backtitle "Freedombone Configuration" \
  1071. --title "Blog Configuration" \
  1072. --form "\nPlease enter your blog details:" 11 55 4 \
  1073. "Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1074. "Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1075. "Code:" 3 1 "$(grep 'FULLBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 25 30 \
  1076. 2> $data
  1077. else
  1078. dialog --backtitle "Freedombone Configuration" \
  1079. --title "Blog Configuration" \
  1080. --form "\nPlease enter your blog details:" 11 55 3 \
  1081. "Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1082. "Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1083. 2> $data
  1084. fi
  1085. sel=$?
  1086. case $sel in
  1087. 1) exit 1;;
  1088. 255) exit 1;;
  1089. esac
  1090. MY_BLOG_TITLE=$(cat $data | sed -n 1p)
  1091. FULLBLOG_DOMAIN_NAME=$(cat $data | sed -n 2p)
  1092. if [ $FULLBLOG_DOMAIN_NAME ]; then
  1093. if [[ $FULLBLOG_DOMAIN_NAME == "$WIKI_DOMAIN_NAME" ]]; then
  1094. FULLBLOG_DOMAIN_NAME=""
  1095. fi
  1096. TEST_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME
  1097. validate_domain_name
  1098. if [[ $TEST_DOMAIN_NAME != $FULLBLOG_DOMAIN_NAME ]]; then
  1099. FULLBLOG_DOMAIN_NAME=
  1100. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1101. else
  1102. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1103. FULLBLOG_CODE=$(cat $data | sed -n 3p)
  1104. if [ ${#FULLBLOG_CODE} -lt 30 ]; then
  1105. FULLBLOG_DOMAIN_NAME=
  1106. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1107. fi
  1108. fi
  1109. fi
  1110. fi
  1111. if [ $FULLBLOG_DOMAIN_NAME ]; then
  1112. FULLBLOG_DETAILS_COMPLETE="yes"
  1113. fi
  1114. done
  1115. save_configuration_file
  1116. fi
  1117. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1118. OWNCLOUD_DETAILS_COMPLETE=
  1119. while [ ! $OWNCLOUD_DETAILS_COMPLETE ]
  1120. do
  1121. data=$(tempfile 2>/dev/null)
  1122. trap "rm -f $data" 0 1 2 5 15
  1123. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1124. dialog --backtitle "Freedombone Configuration" \
  1125. --title "Owncloud Configuration" \
  1126. --form "\nPlease enter your Owncloud details:" 11 55 3 \
  1127. "Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1128. "Code:" 2 1 "$(grep 'OWNCLOUD_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1129. 2> $data
  1130. else
  1131. dialog --backtitle "Freedombone Configuration" \
  1132. --title "Owncloud Configuration" \
  1133. --form "\nPlease enter your Owncloud details:" 11 55 3 \
  1134. "Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1135. 2> $data
  1136. fi
  1137. sel=$?
  1138. case $sel in
  1139. 1) exit 1;;
  1140. 255) exit 1;;
  1141. esac
  1142. OWNCLOUD_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1143. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  1144. TEST_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME
  1145. validate_domain_name
  1146. if [[ $TEST_DOMAIN_NAME != $OWNCLOUD_DOMAIN_NAME ]]; then
  1147. OWNCLOUD_DOMAIN_NAME=
  1148. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1149. else
  1150. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1151. OWNCLOUD_CODE=$(cat $data | sed -n 2p)
  1152. if [ ${#OWNCLOUD_CODE} -lt 30 ]; then
  1153. OWNCLOUD_DOMAIN_NAME=
  1154. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1155. fi
  1156. fi
  1157. fi
  1158. fi
  1159. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  1160. OWNCLOUD_DETAILS_COMPLETE="yes"
  1161. fi
  1162. done
  1163. save_configuration_file
  1164. fi
  1165. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1166. HUBZILLA_DETAILS_COMPLETE=
  1167. while [ ! $HUBZILLA_DETAILS_COMPLETE ]
  1168. do
  1169. data=$(tempfile 2>/dev/null)
  1170. trap "rm -f $data" 0 1 2 5 15
  1171. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1172. dialog --backtitle "Freedombone Configuration" \
  1173. --title "Hubzilla Configuration" \
  1174. --form "\nPlease enter your Hubzilla details:" 11 55 3 \
  1175. "Domain:" 1 1 "$(grep 'HUBZILLA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1176. "Code:" 2 1 "$(grep 'HUBZILLA_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1177. 2> $data
  1178. else
  1179. dialog --backtitle "Freedombone Configuration" \
  1180. --title "Hubzilla Configuration" \
  1181. --form "\nPlease enter your Hubzilla details:" 11 55 3 \
  1182. "Domain:" 1 1 "$(grep 'HUBZILLA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1183. 2> $data
  1184. fi
  1185. sel=$?
  1186. case $sel in
  1187. 1) exit 1;;
  1188. 255) exit 1;;
  1189. esac
  1190. HUBZILLA_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1191. if [ $HUBZILLA_DOMAIN_NAME ]; then
  1192. TEST_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME
  1193. validate_domain_name
  1194. if [[ $TEST_DOMAIN_NAME != $HUBZILLA_DOMAIN_NAME ]]; then
  1195. HUBZILLA_DOMAIN_NAME=
  1196. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1197. else
  1198. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1199. HUBZILLA_CODE=$(cat $data | sed -n 2p)
  1200. if [ ${#HUBZILLA_CODE} -lt 30 ]; then
  1201. HUBZILLA_DOMAIN_NAME=
  1202. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1203. fi
  1204. fi
  1205. fi
  1206. fi
  1207. if [ $HUBZILLA_DOMAIN_NAME ]; then
  1208. HUBZILLA_DETAILS_COMPLETE="yes"
  1209. fi
  1210. done
  1211. save_configuration_file
  1212. fi
  1213. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1214. MICROBLOG_DETAILS_COMPLETE=
  1215. while [ ! $MICROBLOG_DETAILS_COMPLETE ]
  1216. do
  1217. data=$(tempfile 2>/dev/null)
  1218. trap "rm -f $data" 0 1 2 5 15
  1219. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1220. dialog --backtitle "Freedombone Configuration" \
  1221. --title "Microblog Configuration" \
  1222. --form "\nPlease enter your Microblog details:" 11 55 3 \
  1223. "Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1224. "Code:" 2 1 "$(grep 'MICROBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1225. 2> $data
  1226. else
  1227. dialog --backtitle "Freedombone Configuration" \
  1228. --title "Microblog Configuration" \
  1229. --form "\nPlease enter your Microblog details:" 11 55 3 \
  1230. "Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1231. 2> $data
  1232. fi
  1233. sel=$?
  1234. case $sel in
  1235. 1) exit 1;;
  1236. 255) exit 1;;
  1237. esac
  1238. MICROBLOG_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1239. if [ $MICROBLOG_DOMAIN_NAME ]; then
  1240. if [[ $MICROBLOG_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then
  1241. MICROBLOG_DOMAIN_NAME=""
  1242. fi
  1243. TEST_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME
  1244. validate_domain_name
  1245. if [[ $TEST_DOMAIN_NAME != $MICROBLOG_DOMAIN_NAME ]]; then
  1246. MICROBLOG_DOMAIN_NAME=
  1247. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1248. else
  1249. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1250. MICROBLOG_CODE=$(cat $data | sed -n 2p)
  1251. if [ ${#MICROBLOG_CODE} -lt 30 ]; then
  1252. MICROBLOG_DOMAIN_NAME=
  1253. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1254. fi
  1255. fi
  1256. fi
  1257. fi
  1258. if [ $MICROBLOG_DOMAIN_NAME ]; then
  1259. MICROBLOG_DETAILS_COMPLETE="yes"
  1260. fi
  1261. done
  1262. save_configuration_file
  1263. fi
  1264. if [[ $SYSTEM_TYPE == "$VARIANT_DEVELOPER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1265. DEVELOPER_DETAILS_COMPLETE=
  1266. while [ ! $DEVELOPER_DETAILS_COMPLETE ]
  1267. do
  1268. data=$(tempfile 2>/dev/null)
  1269. trap "rm -f $data" 0 1 2 5 15
  1270. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1271. dialog --backtitle "Freedombone Configuration" \
  1272. --title "Developer Configuration" \
  1273. --form "\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 3 \
  1274. "Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  1275. "Code:" 2 1 "$(grep 'GIT_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \
  1276. 2> $data
  1277. else
  1278. dialog --backtitle "Freedombone Configuration" \
  1279. --title "Developer Configuration" \
  1280. --form "\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 2 \
  1281. "Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  1282. 2> $data
  1283. fi
  1284. sel=$?
  1285. case $sel in
  1286. 1) exit 1;;
  1287. 255) exit 1;;
  1288. esac
  1289. GIT_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1290. if [ $GIT_DOMAIN_NAME ]; then
  1291. TEST_DOMAIN_NAME=$GIT_DOMAIN_NAME
  1292. validate_domain_name
  1293. if [[ $TEST_DOMAIN_NAME != $GIT_DOMAIN_NAME ]]; then
  1294. GIT_DOMAIN_NAME=
  1295. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1296. else
  1297. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1298. GIT_CODE=$(cat $data | sed -n 2p)
  1299. if [ ${#GIT_CODE} -lt 30 ]; then
  1300. GIT_DOMAIN_NAME=
  1301. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1302. fi
  1303. fi
  1304. fi
  1305. else
  1306. DEVELOPER_DETAILS_COMPLETE="yes"
  1307. fi
  1308. if [ $GIT_DOMAIN_NAME ]; then
  1309. DEVELOPER_DETAILS_COMPLETE="yes"
  1310. fi
  1311. done
  1312. save_configuration_file
  1313. fi
  1314. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  1315. DEFAULT_DOMAIN_DETAILS_COMPLETE=
  1316. while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ]
  1317. do
  1318. data=$(tempfile 2>/dev/null)
  1319. trap "rm -f $data" 0 1 2 5 15
  1320. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1321. dialog --backtitle "Freedombone Configuration" \
  1322. --title "Default Domain" \
  1323. --form "\nWhich domain name should your email/XMPP/IRC/VoIP be associated with?" 11 55 3 \
  1324. "Domain:" 1 1 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1325. "Code:" 2 1 "$(grep 'DEFAULT_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1326. 2> $data
  1327. sel=$?
  1328. case $sel in
  1329. 1) exit 1;;
  1330. 255) exit 1;;
  1331. esac
  1332. DEFAULT_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1333. DEFAULT_DOMAIN_CODE=$(cat $data | sed -n 2p)
  1334. if [ $DEFAULT_DOMAIN_NAME ]; then
  1335. if [ ${#DEFAULT_DOMAIN_CODE} -lt 30 ]; then
  1336. DEFAULT_DOMAIN_NAME=
  1337. dialog --title "FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1338. fi
  1339. fi
  1340. else
  1341. dialog --backtitle "Freedombone Configuration" \
  1342. --inputbox "Which domain name should your email/XMPP/IRC/VoIP be associated with?" 10 45 \
  1343. "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  1344. sel=$?
  1345. case $sel in
  1346. 0) DEFAULT_DOMAIN_NAME=$(cat $data);;
  1347. 1) exit 1;;
  1348. 255) exit 1;;
  1349. esac
  1350. fi
  1351. if [ $DEFAULT_DOMAIN_NAME ]; then
  1352. TEST_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME
  1353. validate_domain_name
  1354. if [[ $TEST_DOMAIN_NAME != $DEFAULT_DOMAIN_NAME ]]; then
  1355. DEFAULT_DOMAIN_NAME=
  1356. dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1357. else
  1358. DEFAULT_DOMAIN_DETAILS_COMPLETE="yes"
  1359. fi
  1360. fi
  1361. done
  1362. save_configuration_file
  1363. while [ ${#MY_EMAIL_ADDRESS} -lt 5 ]
  1364. do
  1365. EMAIL_ADDRESS=$(grep 'MY_EMAIL_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  1366. if [ ! $EMAIL_ADDRESS ]; then
  1367. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  1368. fi
  1369. if [ ${#MY_EMAIL_ADDRESS} -lt 5 ]; then
  1370. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  1371. fi
  1372. data=$(tempfile 2>/dev/null)
  1373. trap "rm -f $data" 0 1 2 5 15
  1374. dialog --backtitle "Freedombone Configuration" \
  1375. --inputbox "Your email address" 10 30 "$EMAIL_ADDRESS" 2> $data
  1376. sel=$?
  1377. case $sel in
  1378. 0) MY_EMAIL_ADDRESS=$(cat $data);;
  1379. 1) exit 1;;
  1380. 255) exit 1;;
  1381. esac
  1382. done
  1383. save_configuration_file
  1384. fi
  1385. # delete the temporary configuration file
  1386. if [ -f temp.cfg ]; then
  1387. shred -zu temp.cfg
  1388. fi
  1389. }
  1390. function show_result {
  1391. clear
  1392. echo ''
  1393. echo "Configuration filename: $CONFIGURATION_FILE"
  1394. echo ''
  1395. echo 'Contents:'
  1396. echo ''
  1397. cat $CONFIGURATION_FILE
  1398. echo ''
  1399. }
  1400. function read_configuration {
  1401. if [ ! $CONFIGURATION_FILE ]; then
  1402. CONFIGURATION_FILE='freedombone.cfg'
  1403. fi
  1404. if [ -f $CONFIGURATION_FILE ]; then
  1405. if grep -q "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE; then
  1406. ENABLE_SOCIAL_KEY_MANAGEMENT=$(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1407. fi
  1408. if grep -q "GIT_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1409. GIT_DOMAIN_NAME=$(grep "GIT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1410. fi
  1411. if grep -q "GIT_CODE" $CONFIGURATION_FILE; then
  1412. GIT_CODE=$(grep "GIT_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1413. fi
  1414. if grep -q "MY_USERNAME" $CONFIGURATION_FILE; then
  1415. MY_USERNAME=$(grep "MY_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1416. fi
  1417. if grep -q "DOMAIN_NAME" $CONFIGURATION_FILE; then
  1418. # for backwards compatability
  1419. DEFAULT_DOMAIN_NAME=$(grep "DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1420. fi
  1421. if grep -q "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1422. DEFAULT_DOMAIN_NAME=$(grep "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1423. fi
  1424. if grep -q "DEFAULT_DOMAIN_CODE" $CONFIGURATION_FILE; then
  1425. DEFAULT_DOMAIN_CODE=$(grep "DEFAULT_DOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1426. fi
  1427. if grep -q "NAMESERVER1" $CONFIGURATION_FILE; then
  1428. NAMESERVER1=$(grep "NAMESERVER1" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1429. fi
  1430. if grep -q "NAMESERVER2" $CONFIGURATION_FILE; then
  1431. NAMESERVER2=$(grep "NAMESERVER2" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1432. fi
  1433. if grep -q "DEBIAN_REPO" $CONFIGURATION_FILE; then
  1434. DEBIAN_REPO=$(grep "DEBIAN_REPO" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1435. 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."
  1436. fi
  1437. if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
  1438. DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1439. fi
  1440. if grep -q "DDNS_USERNAME" $CONFIGURATION_FILE; then
  1441. DDNS_USERNAME=$(grep "DDNS_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1442. fi
  1443. if grep -q "DDNS_PASSWORD" $CONFIGURATION_FILE; then
  1444. DDNS_PASSWORD=$(grep "DDNS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1445. fi
  1446. if grep -q "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE; then
  1447. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1448. fi
  1449. if grep -q "ENABLE_CJDNS" $CONFIGURATION_FILE; then
  1450. ENABLE_CJDNS=$(grep "ENABLE_CJDNS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1451. fi
  1452. if grep -q "ENABLE_BATMAN" $CONFIGURATION_FILE; then
  1453. ENABLE_BATMAN=$(grep "ENABLE_BATMAN" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1454. fi
  1455. if grep -q "ENABLE_BABEL" $CONFIGURATION_FILE; then
  1456. ENABLE_BABEL=$(grep "ENABLE_BABEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1457. fi
  1458. if grep -q "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE; then
  1459. ROUTER_IP_ADDRESS=$(grep "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1460. fi
  1461. if grep -q "WIKI_TITLE" $CONFIGURATION_FILE; then
  1462. WIKI_TITLE=$(grep "WIKI_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1463. fi
  1464. if grep -q "MY_NAME" $CONFIGURATION_FILE; then
  1465. MY_NAME=$(grep "MY_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1466. fi
  1467. if grep -q "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE; then
  1468. MY_EMAIL_ADDRESS=$(grep "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1469. fi
  1470. if grep -q "INSTALLING_ON_BBB" $CONFIGURATION_FILE; then
  1471. INSTALLING_ON_BBB=$(grep "INSTALLING_ON_BBB" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1472. fi
  1473. if grep -q "USB_DRIVE" $CONFIGURATION_FILE; then
  1474. USB_DRIVE=$(grep "USB_DRIVE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1475. fi
  1476. if grep -q "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE; then
  1477. PUBLIC_MAILING_LIST=$(grep "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1478. fi
  1479. if grep -q "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1480. MICROBLOG_DOMAIN_NAME=$(grep "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1481. fi
  1482. if grep -q "MICROBLOG_CODE" $CONFIGURATION_FILE; then
  1483. MICROBLOG_CODE=$(grep "MICROBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1484. fi
  1485. if grep -q "HUBZILLA_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1486. HUBZILLA_DOMAIN_NAME=$(grep "HUBZILLA_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1487. fi
  1488. if grep -q "HUBZILLA_CODE" $CONFIGURATION_FILE; then
  1489. HUBZILLA_CODE=$(grep "HUBZILLA_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1490. fi
  1491. if grep -q "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1492. OWNCLOUD_DOMAIN_NAME=$(grep "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1493. fi
  1494. if grep -q "OWNCLOUD_CODE" $CONFIGURATION_FILE; then
  1495. OWNCLOUD_CODE=$(grep "OWNCLOUD_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1496. fi
  1497. if grep -q "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1498. WIKI_DOMAIN_NAME=$(grep "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1499. fi
  1500. if grep -q "WIKI_CODE" $CONFIGURATION_FILE; then
  1501. WIKI_CODE=$(grep "WIKI_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1502. fi
  1503. if grep -q "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1504. FULLBLOG_DOMAIN_NAME=$(grep "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1505. fi
  1506. if grep -q "FULLBLOG_CODE" $CONFIGURATION_FILE; then
  1507. FULLBLOG_CODE=$(grep "FULLBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1508. fi
  1509. if grep -q "MY_BLOG_TITLE" $CONFIGURATION_FILE; then
  1510. MY_BLOG_TITLE=$(grep "MY_BLOG_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1511. fi
  1512. if grep -q "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE; then
  1513. MY_BLOG_SUBTITLE=$(grep "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1514. fi
  1515. if grep -q "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1516. MEDIAGOBLIN_DOMAIN_NAME=$(grep "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1517. fi
  1518. if grep -q "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE; then
  1519. MEDIAGOBLIN_CODE=$(grep "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1520. fi
  1521. if grep -q "ESSID" $CONFIGURATION_FILE; then
  1522. ESSID=$(grep "ESSID" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1523. fi
  1524. if grep -q "BATMAN_CELLID" $CONFIGURATION_FILE; then
  1525. BATMAN_CELLID=$(grep "BATMAN_CELLID" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1526. fi
  1527. if grep -q "WIFI_CHANNEL" $CONFIGURATION_FILE; then
  1528. WIFI_CHANNEL=$(grep "WIFI_CHANNEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1529. fi
  1530. fi
  1531. }
  1532. read_configuration
  1533. interactive_configuration
  1534. show_result
  1535. exit 0