freedombone-config 85KB

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