freedombone-config 67KB

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