freedombone-config 64KB

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