freedombone-config 65KB

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