freedombone-config 78KB

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