freedombone-config 85KB

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