freedombone-config 84KB

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