freedombone-config 80KB

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