freedombone-config 78KB

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