freedombone-config 67KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706
  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. fi
  717. save_configuration_file
  718. fi
  719. if [[ $MINIMAL_INSTALL == "no" ]]; then
  720. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  721. interactive_gpg
  722. data=$(tempfile 2>/dev/null)
  723. trap "rm -f $data" 0 1 2 5 15
  724. 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."
  725. if [[ $(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then
  726. dialog --title $"Social Key Management" \
  727. --backtitle $"Freedombone Configuration" \
  728. --yesno "$SOCIAL_KEY_STR" 15 60
  729. else
  730. dialog --title $"Social Key Management" \
  731. --backtitle $"Freedombone Configuration" \
  732. --defaultno \
  733. --yesno "$SOCIAL_KEY_STR" 15 60
  734. fi
  735. sel=$?
  736. case $sel in
  737. 0) ENABLE_SOCIAL_KEY_MANAGEMENT="yes";;
  738. 255) exit 1;;
  739. esac
  740. save_configuration_file
  741. fi
  742. else
  743. # enable for the minimal case
  744. ENABLE_SOCIAL_KEY_MANAGEMENT="yes"
  745. fi
  746. if [[ $MINIMAL_INSTALL == "no" ]]; then
  747. data=$(tempfile 2>/dev/null)
  748. trap "rm -f $data" 0 1 2 5 15
  749. if [[ $INSTALLING_ON_BBB != "yes" ]]; then
  750. dialog --backtitle $"Freedombone Configuration" \
  751. --radiolist $"Type of Random Number Generator:" 10 40 2 \
  752. 1 Haveged on \
  753. 2 OneRNG off 2> $data
  754. sel=$?
  755. case $sel in
  756. 1) exit 1;;
  757. 255) exit 1;;
  758. esac
  759. case $(cat $data) in
  760. 2) HWRNG_TYPE="onerng"
  761. dialog --title $"OneRNG Device" \
  762. --msgbox $"Please ensure that the OneRNG device is disconnected. You can reconnect it later during the installation" 8 60
  763. ;;
  764. 255) exit 1;;
  765. esac
  766. else
  767. HWRNG_TYPE="beaglebone"
  768. fi
  769. save_configuration_file
  770. fi
  771. if [[ $MINIMAL_INSTALL == "no" ]]; then
  772. data=$(tempfile 2>/dev/null)
  773. trap "rm -f $data" 0 1 2 5 15
  774. dialog --backtitle $"Freedombone Configuration" \
  775. --radiolist $"Where to download Debian packages from:" 25 45 49 \
  776. 1 $"Australia" off \
  777. 2 $"Austria" off \
  778. 3 $"Belarus" off \
  779. 4 $"Belgium" off \
  780. 5 $"Bosnia and Herzegovina" off \
  781. 6 $"Brazil" off \
  782. 7 $"Bulgaria" off \
  783. 8 $"Canada" off \
  784. 9 $"Chile" off \
  785. 10 $"China" off \
  786. 11 $"Croatia" off \
  787. 12 $"Czech Republic" off \
  788. 13 $"Denmark" off \
  789. 14 $"El Salvador" off \
  790. 15 $"Estonia" off \
  791. 16 $"Finland" off \
  792. 17 $"France 1" off \
  793. 18 $"France 2" off \
  794. 19 $"Germany 1" off \
  795. 20 $"Germany 2" off \
  796. 21 $"Greece" off \
  797. 22 $"Hungary" off \
  798. 23 $"Iceland" off \
  799. 24 $"Iran" off \
  800. 25 $"Ireland" off \
  801. 26 $"Italy" off \
  802. 27 $"Japan" off \
  803. 28 $"Korea" off \
  804. 29 $"Lithuania" off \
  805. 30 $"Mexico" off \
  806. 31 $"Netherlands" off \
  807. 32 $"New Caledonia" off \
  808. 33 $"New Zealand" off \
  809. 34 $"Norway" off \
  810. 35 $"Poland" off \
  811. 36 $"Portugal" off \
  812. 37 $"Romania" off \
  813. 38 $"Russia" off \
  814. 39 $"Slovakia" off \
  815. 40 $"Slovenia" off \
  816. 41 $"Spain" off \
  817. 42 $"Sweden" off \
  818. 43 $"Switzerland" off \
  819. 44 $"Taiwan" off \
  820. 45 $"Thailand" off \
  821. 46 $"Turkey" off \
  822. 47 $"Ukraine" off \
  823. 48 $"United Kingdom" off \
  824. 49 $"United States" on 2> $data
  825. sel=$?
  826. case $sel in
  827. 1) exit 1;;
  828. 255) exit 1;;
  829. esac
  830. case $(cat $data) in
  831. 1) DEBIAN_REPO='ftp.au.debian.org';;
  832. 2) DEBIAN_REPO='ftp.at.debian.org';;
  833. 3) DEBIAN_REPO='ftp.by.debian.org';;
  834. 4) DEBIAN_REPO='ftp.be.debian.org';;
  835. 5) DEBIAN_REPO='ftp.ba.debian.org';;
  836. 6) DEBIAN_REPO='ftp.br.debian.org';;
  837. 7) DEBIAN_REPO='ftp.bg.debian.org';;
  838. 8) DEBIAN_REPO='ftp.ca.debian.org';;
  839. 9) DEBIAN_REPO='ftp.cl.debian.org';;
  840. 10) DEBIAN_REPO='ftp.cn.debian.org';;
  841. 11) DEBIAN_REPO='ftp.hr.debian.org';;
  842. 12) DEBIAN_REPO='ftp.cz.debian.org';;
  843. 13) DEBIAN_REPO='ftp.dk.debian.org';;
  844. 14) DEBIAN_REPO='ftp.sv.debian.org';;
  845. 15) DEBIAN_REPO='ftp.ee.debian.org';;
  846. 16) DEBIAN_REPO='ftp.fi.debian.org';;
  847. 17) DEBIAN_REPO='ftp2.fr.debian.org';;
  848. 18) DEBIAN_REPO='ftp.fr.debian.org';;
  849. 19) DEBIAN_REPO='ftp2.de.debian.org';;
  850. 20) DEBIAN_REPO='ftp.de.debian.org';;
  851. 21) DEBIAN_REPO='ftp.gr.debian.org';;
  852. 22) DEBIAN_REPO='ftp.hu.debian.org';;
  853. 23) DEBIAN_REPO='ftp.is.debian.org';;
  854. 24) DEBIAN_REPO='ftp.ir.debian.org';;
  855. 25) DEBIAN_REPO='ftp.ie.debian.org';;
  856. 26) DEBIAN_REPO='ftp.it.debian.org';;
  857. 27) DEBIAN_REPO='ftp.jp.debian.org';;
  858. 28) DEBIAN_REPO='ftp.kr.debian.org';;
  859. 29) DEBIAN_REPO='ftp.lt.debian.org';;
  860. 30) DEBIAN_REPO='ftp.mx.debian.org';;
  861. 31) DEBIAN_REPO='ftp.nl.debian.org';;
  862. 32) DEBIAN_REPO='ftp.nc.debian.org';;
  863. 33) DEBIAN_REPO='ftp.nz.debian.org';;
  864. 34) DEBIAN_REPO='ftp.no.debian.org';;
  865. 35) DEBIAN_REPO='ftp.pl.debian.org';;
  866. 36) DEBIAN_REPO='ftp.pt.debian.org';;
  867. 37) DEBIAN_REPO='ftp.ro.debian.org';;
  868. 38) DEBIAN_REPO='ftp.ru.debian.org';;
  869. 39) DEBIAN_REPO='ftp.sk.debian.org';;
  870. 40) DEBIAN_REPO='ftp.si.debian.org';;
  871. 41) DEBIAN_REPO='ftp.es.debian.org';;
  872. 42) DEBIAN_REPO='ftp.se.debian.org';;
  873. 43) DEBIAN_REPO='ftp.ch.debian.org';;
  874. 44) DEBIAN_REPO='ftp.tw.debian.org';;
  875. 45) DEBIAN_REPO='ftp.th.debian.org';;
  876. 46) DEBIAN_REPO='ftp.tr.debian.org';;
  877. 47) DEBIAN_REPO='ftp.ua.debian.org';;
  878. 48) DEBIAN_REPO='ftp.uk.debian.org';;
  879. 49) DEBIAN_REPO='ftp.us.debian.org';;
  880. 255) exit 1;;
  881. esac
  882. save_configuration_file
  883. else
  884. DEBIAN_REPO='ftp.de.debian.org'
  885. fi
  886. if [[ $MINIMAL_INSTALL == "no" ]]; then
  887. data=$(tempfile 2>/dev/null)
  888. trap "rm -f $data" 0 1 2 5 15
  889. dialog --backtitle $"Freedombone Configuration" \
  890. --radiolist $"Pick a domain name service (DNS):" 25 50 16 \
  891. 1 $"Digital Courage" on \
  892. 2 $"German Privacy Foundation 1" off \
  893. 3 $"German Privacy Foundation 2" off \
  894. 4 $"Chaos Computer Club" off \
  895. 5 $"ClaraNet" off \
  896. 6 $"OpenNIC 1" off \
  897. 7 $"OpenNIC 2" off \
  898. 8 $"OpenNIC 3" off \
  899. 9 $"OpenNIC 4" off \
  900. 10 $"OpenNIC 5" off \
  901. 11 $"OpenNIC 6" off \
  902. 12 $"OpenNIC 7" off \
  903. 13 $"PowerNS" off \
  904. 14 $"ValiDOM" off \
  905. 15 $"Freie Unzensierte" off \
  906. 16 $"Google" off 2> $data
  907. sel=$?
  908. case $sel in
  909. 1) exit 1;;
  910. 255) exit 1;;
  911. esac
  912. case $(cat $data) in
  913. 1) NAMESERVER1='85.214.73.63'
  914. NAMESERVER2='213.73.91.35'
  915. ;;
  916. 2) NAMESERVER1='87.118.100.175'
  917. NAMESERVER2='94.75.228.29'
  918. ;;
  919. 3) NAMESERVER1='85.25.251.254'
  920. NAMESERVER2='2.141.58.13'
  921. ;;
  922. 4) NAMESERVER1='213.73.91.35'
  923. NAMESERVER2='85.214.73.63'
  924. ;;
  925. 5) NAMESERVER1='212.82.225.7'
  926. NAMESERVER2='212.82.226.212'
  927. ;;
  928. 6) NAMESERVER1='58.6.115.42'
  929. NAMESERVER2='58.6.115.43'
  930. ;;
  931. 7) NAMESERVER1='119.31.230.42'
  932. NAMESERVER2='200.252.98.162'
  933. ;;
  934. 8) NAMESERVER1='217.79.186.148'
  935. NAMESERVER2='81.89.98.6'
  936. ;;
  937. 9) NAMESERVER1='78.159.101.37'
  938. NAMESERVER2='203.167.220.153'
  939. ;;
  940. 10) NAMESERVER1='82.229.244.191'
  941. NAMESERVER2='82.229.244.191'
  942. ;;
  943. 11) NAMESERVER1='216.87.84.211'
  944. NAMESERVER2='66.244.95.20'
  945. ;;
  946. 12) NAMESERVER1='207.192.69.155'
  947. NAMESERVER2='72.14.189.120'
  948. ;;
  949. 13) NAMESERVER1='194.145.226.26'
  950. NAMESERVER2='77.220.232.44'
  951. ;;
  952. 14) NAMESERVER1='78.46.89.147'
  953. NAMESERVER2='88.198.75.145'
  954. ;;
  955. 15) NAMESERVER1='85.25.149.144'
  956. NAMESERVER2='87.106.37.196'
  957. ;;
  958. 16) NAMESERVER1='8.8.8.8'
  959. NAMESERVER2='4.4.4.4'
  960. ;;
  961. 255) exit 1;;
  962. esac
  963. save_configuration_file
  964. else
  965. # as defaults for a minimal install process these settings are debatable
  966. NAMESERVER1='85.214.73.63'
  967. NAMESERVER2='213.73.91.35'
  968. fi
  969. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  970. data=$(tempfile 2>/dev/null)
  971. trap "rm -f $data" 0 1 2 5 15
  972. dialog --backtitle $"Freedombone Configuration" \
  973. --radiolist $"Choose Dynamic DNS provider:" 15 40 14 \
  974. 1 dyndns off \
  975. 2 freedns on \
  976. 3 zoneedit off \
  977. 4 no-ip off \
  978. 5 easydns off \
  979. 6 tzo off \
  980. 7 3322 off \
  981. 8 dnsomatic off \
  982. 9 tunnelbroker off \
  983. 10 dns.he.net off \
  984. 11 dynsip off \
  985. 12 sitelutions off \
  986. 13 dnsexit off \
  987. 14 changeip off 2> $data
  988. sel=$?
  989. case $sel in
  990. 1) exit 1;;
  991. 255) exit 1;;
  992. esac
  993. case $(cat $data) in
  994. 1) DDNS_PROVIDER="default@dyndns.org";;
  995. 2) DDNS_PROVIDER="default@freedns.afraid.org";;
  996. 3) DDNS_PROVIDER="default@zoneedit.com";;
  997. 4) DDNS_PROVIDER="default@no-ip.com";;
  998. 5) DDNS_PROVIDER="default@easydns.com";;
  999. 6) DDNS_PROVIDER="default@tzo.com";;
  1000. 7) DDNS_PROVIDER="dyndns@3322.org";;
  1001. 8) DDNS_PROVIDER="default@dnsomatic.com";;
  1002. 9) DDNS_PROVIDER="ipv6tb@he.net";;
  1003. 10) DDNS_PROVIDER="dyndns@he.net";;
  1004. 11) DDNS_PROVIDER="default@dynsip.org";;
  1005. 12) DDNS_PROVIDER="default@sitelutions.com";;
  1006. 13) DDNS_PROVIDER="default@dnsexit.com";;
  1007. 14) DDNS_PROVIDER="default@changeip.com";;
  1008. 255) exit 1;;
  1009. esac
  1010. save_configuration_file
  1011. while [ ! $DDNS_USERNAME ]
  1012. do
  1013. data=$(tempfile 2>/dev/null)
  1014. trap "rm -f $data" 0 1 2 5 15
  1015. dialog --backtitle $"Freedombone Configuration" \
  1016. --inputbox $"Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  1017. sel=$?
  1018. case $sel in
  1019. 0) DDNS_USERNAME=$(cat $data);;
  1020. 1) exit 1;;
  1021. 255) exit 1;;
  1022. esac
  1023. done
  1024. save_configuration_file
  1025. while [ ! $DDNS_PASSWORD ]
  1026. do
  1027. data=$(tempfile 2>/dev/null)
  1028. trap "rm -f $data" 0 1 2 5 15
  1029. dialog --backtitle $"Freedombone Configuration" \
  1030. --clear \
  1031. --insecure \
  1032. --passwordbox $"Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  1033. sel=$?
  1034. case $sel in
  1035. 0) DDNS_PASSWORD=$(cat $data);;
  1036. 1) exit 1;;
  1037. 255) exit 1;;
  1038. esac
  1039. if [ ${#DDNS_PASSWORD} -lt $MINIMUM_PASSWORD_LENGTH ]; then
  1040. 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
  1041. DDNS_PASSWORD=""
  1042. fi
  1043. done
  1044. save_configuration_file
  1045. fi
  1046. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  1047. while [ ! $MY_NAME ]
  1048. do
  1049. data=$(tempfile 2>/dev/null)
  1050. trap "rm -f $data" 0 1 2 5 15
  1051. dialog --backtitle $"Freedombone Configuration" \
  1052. --inputbox $"Your full name (or nick)" 10 30 "$(grep 'MY_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  1053. sel=$?
  1054. case $sel in
  1055. 0) MY_NAME=$(cat $data);;
  1056. 1) exit 1;;
  1057. 255) exit 1;;
  1058. esac
  1059. done
  1060. save_configuration_file
  1061. fi
  1062. if [[ $MINIMAL_INSTALL == "no" ]]; then
  1063. SET_STATIC_IP="no"
  1064. dialog --title $"Static local IP address" \
  1065. --backtitle $"Freedombone Configuration" \
  1066. --defaultno \
  1067. --yesno $"\nDo you want to set a static local IP address for this system?\n\nFor example, 192.168.1.10" 10 60
  1068. sel=$?
  1069. case $sel in
  1070. 0) SET_STATIC_IP="yes";;
  1071. 255) exit 1;;
  1072. esac
  1073. if [[ $SET_STATIC_IP == "yes" ]]; then
  1074. if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  1075. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep 'LOCAL_NETWORK_STATIC_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  1076. if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then
  1077. LOCAL_NETWORK_STATIC_IP_ADDRESS='192.168..'
  1078. fi
  1079. fi
  1080. if [ ! $ROUTER_IP_ADDRESS ]; then
  1081. ROUTER_IP_ADDRESS=$(grep 'ROUTER_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  1082. if [ ! $ROUTER_IP_ADDRESS ]; then
  1083. ROUTER_IP_ADDRESS='192.168..'
  1084. fi
  1085. fi
  1086. data=$(tempfile 2>/dev/null)
  1087. trap "rm -f $data" 0 1 2 5 15
  1088. dialog --backtitle $"Freedombone Configuration" \
  1089. --title $"Local Network Configuration" \
  1090. --form $"\nPlease enter the IP addresses:" 11 55 3 \
  1091. $"This system:" 1 1 "$LOCAL_NETWORK_STATIC_IP_ADDRESS" 1 16 16 15 \
  1092. $"Internet router:" 2 1 "$ROUTER_IP_ADDRESS" 2 16 16 15 \
  1093. 2> $data
  1094. sel=$?
  1095. case $sel in
  1096. 1) exit 1;;
  1097. 255) exit 1;;
  1098. esac
  1099. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(cat $data | sed -n 1p)
  1100. ROUTER_IP_ADDRESS=$(cat $data | sed -n 2p)
  1101. save_configuration_file
  1102. fi
  1103. fi
  1104. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1105. WIKI_DETAILS_COMPLETE=
  1106. while [ ! $WIKI_DETAILS_COMPLETE ]
  1107. do
  1108. data=$(tempfile 2>/dev/null)
  1109. trap "rm -f $data" 0 1 2 5 15
  1110. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1111. dialog --backtitle $"Freedombone Configuration" \
  1112. --title $"Wiki Configuration" \
  1113. --form $"\nPlease enter your wiki details:" 11 55 4 \
  1114. $"Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  1115. $"Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \
  1116. $"Code:" 3 1 "$(grep 'WIKI_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 25 40 \
  1117. 2> $data
  1118. else
  1119. dialog --backtitle $"Freedombone Configuration" \
  1120. --title $"Wiki Configuration" \
  1121. --form $"\nPlease enter your wiki details:" 11 55 3 \
  1122. $"Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  1123. $"Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \
  1124. 2> $data
  1125. fi
  1126. sel=$?
  1127. case $sel in
  1128. 1) exit 1;;
  1129. 255) exit 1;;
  1130. esac
  1131. WIKI_TITLE=$(cat $data | sed -n 1p)
  1132. WIKI_DOMAIN_NAME=$(cat $data | sed -n 2p)
  1133. if [ $WIKI_DOMAIN_NAME ]; then
  1134. TEST_DOMAIN_NAME=$WIKI_DOMAIN_NAME
  1135. validate_domain_name
  1136. if [[ $TEST_DOMAIN_NAME != $WIKI_DOMAIN_NAME ]]; then
  1137. WIKI_DOMAIN_NAME=
  1138. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1139. else
  1140. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1141. WIKI_CODE=$(cat $data | sed -n 3p)
  1142. if [ ${#WIKI_CODE} -lt 30 ]; then
  1143. WIKI_DOMAIN_NAME=
  1144. dialog --title $"FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1145. fi
  1146. fi
  1147. fi
  1148. fi
  1149. if [ $WIKI_DOMAIN_NAME ]; then
  1150. WIKI_DETAILS_COMPLETE="yes"
  1151. fi
  1152. done
  1153. save_configuration_file
  1154. fi
  1155. if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1156. FULLBLOG_DETAILS_COMPLETE=
  1157. while [ ! $FULLBLOG_DETAILS_COMPLETE ]
  1158. do
  1159. data=$(tempfile 2>/dev/null)
  1160. trap "rm -f $data" 0 1 2 5 15
  1161. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1162. dialog --backtitle $"Freedombone Configuration" \
  1163. --title $"Blog Configuration" \
  1164. --form $"\nPlease enter your blog details:" 11 55 4 \
  1165. $"Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1166. $"Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1167. $"Code:" 3 1 "$(grep 'FULLBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 25 30 \
  1168. 2> $data
  1169. else
  1170. dialog --backtitle $"Freedombone Configuration" \
  1171. --title $"Blog Configuration" \
  1172. --form $"\nPlease enter your blog details:" 11 55 3 \
  1173. $"Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1174. $"Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1175. 2> $data
  1176. fi
  1177. sel=$?
  1178. case $sel in
  1179. 1) exit 1;;
  1180. 255) exit 1;;
  1181. esac
  1182. MY_BLOG_TITLE=$(cat $data | sed -n 1p)
  1183. FULLBLOG_DOMAIN_NAME=$(cat $data | sed -n 2p)
  1184. if [ $FULLBLOG_DOMAIN_NAME ]; then
  1185. if [[ $FULLBLOG_DOMAIN_NAME == "$WIKI_DOMAIN_NAME" ]]; then
  1186. FULLBLOG_DOMAIN_NAME=""
  1187. fi
  1188. TEST_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME
  1189. validate_domain_name
  1190. if [[ $TEST_DOMAIN_NAME != $FULLBLOG_DOMAIN_NAME ]]; then
  1191. FULLBLOG_DOMAIN_NAME=
  1192. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1193. else
  1194. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1195. FULLBLOG_CODE=$(cat $data | sed -n 3p)
  1196. if [ ${#FULLBLOG_CODE} -lt 30 ]; then
  1197. FULLBLOG_DOMAIN_NAME=
  1198. dialog --title $"FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1199. fi
  1200. fi
  1201. fi
  1202. fi
  1203. if [ $FULLBLOG_DOMAIN_NAME ]; then
  1204. FULLBLOG_DETAILS_COMPLETE="yes"
  1205. fi
  1206. done
  1207. save_configuration_file
  1208. fi
  1209. if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1210. OWNCLOUD_DETAILS_COMPLETE=
  1211. while [ ! $OWNCLOUD_DETAILS_COMPLETE ]
  1212. do
  1213. data=$(tempfile 2>/dev/null)
  1214. trap "rm -f $data" 0 1 2 5 15
  1215. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1216. dialog --backtitle $"Freedombone Configuration" \
  1217. --title $"Owncloud Configuration" \
  1218. --form $"\nPlease enter your Owncloud details:" 11 55 3 \
  1219. $"Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1220. $"Code:" 2 1 "$(grep 'OWNCLOUD_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1221. 2> $data
  1222. else
  1223. dialog --backtitle $"Freedombone Configuration" \
  1224. --title $"Owncloud Configuration" \
  1225. --form $"\nPlease enter your Owncloud details:" 11 55 3 \
  1226. $"Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1227. 2> $data
  1228. fi
  1229. sel=$?
  1230. case $sel in
  1231. 1) exit 1;;
  1232. 255) exit 1;;
  1233. esac
  1234. OWNCLOUD_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1235. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  1236. TEST_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME
  1237. validate_domain_name
  1238. if [[ $TEST_DOMAIN_NAME != $OWNCLOUD_DOMAIN_NAME ]]; then
  1239. OWNCLOUD_DOMAIN_NAME=
  1240. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1241. else
  1242. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1243. OWNCLOUD_CODE=$(cat $data | sed -n 2p)
  1244. if [ ${#OWNCLOUD_CODE} -lt 30 ]; then
  1245. OWNCLOUD_DOMAIN_NAME=
  1246. dialog --title $"FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1247. fi
  1248. fi
  1249. fi
  1250. fi
  1251. if [ $OWNCLOUD_DOMAIN_NAME ]; then
  1252. OWNCLOUD_DETAILS_COMPLETE="yes"
  1253. fi
  1254. done
  1255. save_configuration_file
  1256. fi
  1257. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1258. HUBZILLA_DETAILS_COMPLETE=
  1259. while [ ! $HUBZILLA_DETAILS_COMPLETE ]
  1260. do
  1261. data=$(tempfile 2>/dev/null)
  1262. trap "rm -f $data" 0 1 2 5 15
  1263. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1264. dialog --backtitle $"Freedombone Configuration" \
  1265. --title $"Hubzilla Configuration" \
  1266. --form $"\nPlease enter your Hubzilla details:" 11 55 3 \
  1267. $"Domain:" 1 1 "$(grep 'HUBZILLA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1268. $"Code:" 2 1 "$(grep 'HUBZILLA_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1269. 2> $data
  1270. else
  1271. dialog --backtitle $"Freedombone Configuration" \
  1272. --title $"Hubzilla Configuration" \
  1273. --form $"\nPlease enter your Hubzilla details:" 11 55 3 \
  1274. $"Domain:" 1 1 "$(grep 'HUBZILLA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1275. 2> $data
  1276. fi
  1277. sel=$?
  1278. case $sel in
  1279. 1) exit 1;;
  1280. 255) exit 1;;
  1281. esac
  1282. HUBZILLA_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1283. if [ $HUBZILLA_DOMAIN_NAME ]; then
  1284. TEST_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME
  1285. validate_domain_name
  1286. if [[ $TEST_DOMAIN_NAME != $HUBZILLA_DOMAIN_NAME ]]; then
  1287. HUBZILLA_DOMAIN_NAME=
  1288. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1289. else
  1290. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1291. HUBZILLA_CODE=$(cat $data | sed -n 2p)
  1292. if [ ${#HUBZILLA_CODE} -lt 30 ]; then
  1293. HUBZILLA_DOMAIN_NAME=
  1294. dialog --title $"FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1295. fi
  1296. fi
  1297. fi
  1298. fi
  1299. if [ $HUBZILLA_DOMAIN_NAME ]; then
  1300. HUBZILLA_DETAILS_COMPLETE="yes"
  1301. fi
  1302. done
  1303. save_configuration_file
  1304. fi
  1305. if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1306. MICROBLOG_DETAILS_COMPLETE=
  1307. while [ ! $MICROBLOG_DETAILS_COMPLETE ]
  1308. do
  1309. data=$(tempfile 2>/dev/null)
  1310. trap "rm -f $data" 0 1 2 5 15
  1311. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1312. dialog --backtitle $"Freedombone Configuration" \
  1313. --title $"Microblog Configuration" \
  1314. --form $"\nPlease enter your Microblog details:" 11 55 3 \
  1315. $"Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1316. $"Code:" 2 1 "$(grep 'MICROBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1317. 2> $data
  1318. else
  1319. dialog --backtitle $"Freedombone Configuration" \
  1320. --title $"Microblog Configuration" \
  1321. --form $"\nPlease enter your Microblog details:" 11 55 3 \
  1322. $"Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1323. 2> $data
  1324. fi
  1325. sel=$?
  1326. case $sel in
  1327. 1) exit 1;;
  1328. 255) exit 1;;
  1329. esac
  1330. MICROBLOG_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1331. if [ $MICROBLOG_DOMAIN_NAME ]; then
  1332. if [[ $MICROBLOG_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then
  1333. MICROBLOG_DOMAIN_NAME=""
  1334. fi
  1335. TEST_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME
  1336. validate_domain_name
  1337. if [[ $TEST_DOMAIN_NAME != $MICROBLOG_DOMAIN_NAME ]]; then
  1338. MICROBLOG_DOMAIN_NAME=
  1339. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1340. else
  1341. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1342. MICROBLOG_CODE=$(cat $data | sed -n 2p)
  1343. if [ ${#MICROBLOG_CODE} -lt 30 ]; then
  1344. MICROBLOG_DOMAIN_NAME=
  1345. dialog --title $"FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1346. fi
  1347. fi
  1348. fi
  1349. fi
  1350. if [ $MICROBLOG_DOMAIN_NAME ]; then
  1351. MICROBLOG_DETAILS_COMPLETE="yes"
  1352. fi
  1353. done
  1354. save_configuration_file
  1355. fi
  1356. if [[ $SYSTEM_TYPE == "$VARIANT_DEVELOPER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then
  1357. DEVELOPER_DETAILS_COMPLETE=
  1358. while [ ! $DEVELOPER_DETAILS_COMPLETE ]
  1359. do
  1360. data=$(tempfile 2>/dev/null)
  1361. trap "rm -f $data" 0 1 2 5 15
  1362. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1363. dialog --backtitle $"Freedombone Configuration" \
  1364. --title $"Developer Configuration" \
  1365. --form $"\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 3 \
  1366. $"Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  1367. $"Code:" 2 1 "$(grep 'GIT_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \
  1368. 2> $data
  1369. else
  1370. dialog --backtitle $"Freedombone Configuration" \
  1371. --title $"Developer Configuration" \
  1372. --form $"\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 2 \
  1373. $"Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 40 \
  1374. 2> $data
  1375. fi
  1376. sel=$?
  1377. case $sel in
  1378. 1) exit 1;;
  1379. 255) exit 1;;
  1380. esac
  1381. GIT_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1382. if [ $GIT_DOMAIN_NAME ]; then
  1383. TEST_DOMAIN_NAME=$GIT_DOMAIN_NAME
  1384. validate_domain_name
  1385. if [[ $TEST_DOMAIN_NAME != $GIT_DOMAIN_NAME ]]; then
  1386. GIT_DOMAIN_NAME=
  1387. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1388. else
  1389. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1390. GIT_CODE=$(cat $data | sed -n 2p)
  1391. if [ ${#GIT_CODE} -lt 30 ]; then
  1392. GIT_DOMAIN_NAME=
  1393. dialog --title $"FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1394. fi
  1395. fi
  1396. fi
  1397. else
  1398. DEVELOPER_DETAILS_COMPLETE="yes"
  1399. fi
  1400. if [ $GIT_DOMAIN_NAME ]; then
  1401. DEVELOPER_DETAILS_COMPLETE="yes"
  1402. fi
  1403. done
  1404. save_configuration_file
  1405. fi
  1406. if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then
  1407. DEFAULT_DOMAIN_DETAILS_COMPLETE=
  1408. while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ]
  1409. do
  1410. data=$(tempfile 2>/dev/null)
  1411. trap "rm -f $data" 0 1 2 5 15
  1412. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  1413. dialog --backtitle $"Freedombone Configuration" \
  1414. --title $"Your main domain name" \
  1415. --form $"\nWhich domain name should your email/XMPP/IRC/VoIP be associated with?" 11 55 3 \
  1416. $"Domain:" 1 1 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \
  1417. $"Code:" 2 1 "$(grep 'DEFAULT_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \
  1418. 2> $data
  1419. sel=$?
  1420. case $sel in
  1421. 1) exit 1;;
  1422. 255) exit 1;;
  1423. esac
  1424. DEFAULT_DOMAIN_NAME=$(cat $data | sed -n 1p)
  1425. DEFAULT_DOMAIN_CODE=$(cat $data | sed -n 2p)
  1426. if [ $DEFAULT_DOMAIN_NAME ]; then
  1427. if [ ${#DEFAULT_DOMAIN_CODE} -lt 30 ]; then
  1428. DEFAULT_DOMAIN_NAME=
  1429. dialog --title $"FreeDNS code" --msgbox "$FREEDNS_MESSAGE" 15 50
  1430. fi
  1431. fi
  1432. else
  1433. dialog --backtitle $"Freedombone Configuration" \
  1434. --inputbox $"Which domain name should your email/XMPP/IRC/VoIP be associated with?" 10 45 \
  1435. "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  1436. sel=$?
  1437. case $sel in
  1438. 0) DEFAULT_DOMAIN_NAME=$(cat $data);;
  1439. 1) exit 1;;
  1440. 255) exit 1;;
  1441. esac
  1442. fi
  1443. if [ $DEFAULT_DOMAIN_NAME ]; then
  1444. TEST_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME
  1445. validate_domain_name
  1446. if [[ $TEST_DOMAIN_NAME != $DEFAULT_DOMAIN_NAME ]]; then
  1447. DEFAULT_DOMAIN_NAME=
  1448. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  1449. else
  1450. DEFAULT_DOMAIN_DETAILS_COMPLETE="yes"
  1451. fi
  1452. fi
  1453. done
  1454. save_configuration_file
  1455. while [ ${#MY_EMAIL_ADDRESS} -lt 5 ]
  1456. do
  1457. EMAIL_ADDRESS=$(grep 'MY_EMAIL_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  1458. if [ ! $EMAIL_ADDRESS ]; then
  1459. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  1460. fi
  1461. if [ ${#MY_EMAIL_ADDRESS} -lt 5 ]; then
  1462. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  1463. fi
  1464. data=$(tempfile 2>/dev/null)
  1465. trap "rm -f $data" 0 1 2 5 15
  1466. dialog --backtitle $"Freedombone Configuration" \
  1467. --inputbox $"Your email address" 10 30 "$EMAIL_ADDRESS" 2> $data
  1468. sel=$?
  1469. case $sel in
  1470. 0) MY_EMAIL_ADDRESS=$(cat $data);;
  1471. 1) exit 1;;
  1472. 255) exit 1;;
  1473. esac
  1474. done
  1475. save_configuration_file
  1476. fi
  1477. # delete the temporary configuration file
  1478. if [ -f temp.cfg ]; then
  1479. shred -zu temp.cfg
  1480. fi
  1481. }
  1482. function show_result {
  1483. clear
  1484. echo ''
  1485. echo -n $"Configuration filename:"
  1486. echo " $CONFIGURATION_FILE"
  1487. echo ''
  1488. echo $'Contents:'
  1489. echo ''
  1490. cat $CONFIGURATION_FILE
  1491. echo ''
  1492. }
  1493. function read_configuration {
  1494. if [ ! $CONFIGURATION_FILE ]; then
  1495. CONFIGURATION_FILE='freedombone.cfg'
  1496. fi
  1497. if [ -f $CONFIGURATION_FILE ]; then
  1498. if grep -q "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE; then
  1499. ENABLE_SOCIAL_KEY_MANAGEMENT=$(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1500. fi
  1501. if grep -q "GIT_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1502. GIT_DOMAIN_NAME=$(grep "GIT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1503. fi
  1504. if grep -q "GIT_CODE" $CONFIGURATION_FILE; then
  1505. GIT_CODE=$(grep "GIT_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1506. fi
  1507. if grep -q "MY_USERNAME" $CONFIGURATION_FILE; then
  1508. MY_USERNAME=$(grep "MY_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1509. fi
  1510. if grep -q "DOMAIN_NAME" $CONFIGURATION_FILE; then
  1511. # for backwards compatability
  1512. DEFAULT_DOMAIN_NAME=$(grep "DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1513. fi
  1514. if grep -q "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1515. DEFAULT_DOMAIN_NAME=$(grep "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1516. fi
  1517. if grep -q "DEFAULT_DOMAIN_CODE" $CONFIGURATION_FILE; then
  1518. DEFAULT_DOMAIN_CODE=$(grep "DEFAULT_DOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1519. fi
  1520. if grep -q "NAMESERVER1" $CONFIGURATION_FILE; then
  1521. NAMESERVER1=$(grep "NAMESERVER1" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1522. fi
  1523. if grep -q "NAMESERVER2" $CONFIGURATION_FILE; then
  1524. NAMESERVER2=$(grep "NAMESERVER2" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1525. fi
  1526. if grep -q "DEBIAN_REPO" $CONFIGURATION_FILE; then
  1527. DEBIAN_REPO=$(grep "DEBIAN_REPO" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1528. 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."
  1529. fi
  1530. if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then
  1531. DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1532. fi
  1533. if grep -q "DDNS_USERNAME" $CONFIGURATION_FILE; then
  1534. DDNS_USERNAME=$(grep "DDNS_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1535. fi
  1536. if grep -q "DDNS_PASSWORD" $CONFIGURATION_FILE; then
  1537. DDNS_PASSWORD=$(grep "DDNS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1538. fi
  1539. if grep -q "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE; then
  1540. LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1541. fi
  1542. if grep -q "ENABLE_CJDNS" $CONFIGURATION_FILE; then
  1543. ENABLE_CJDNS=$(grep "ENABLE_CJDNS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1544. fi
  1545. if grep -q "ENABLE_BATMAN" $CONFIGURATION_FILE; then
  1546. ENABLE_BATMAN=$(grep "ENABLE_BATMAN" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1547. fi
  1548. if grep -q "ENABLE_BABEL" $CONFIGURATION_FILE; then
  1549. ENABLE_BABEL=$(grep "ENABLE_BABEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1550. fi
  1551. if grep -q "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE; then
  1552. ROUTER_IP_ADDRESS=$(grep "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1553. fi
  1554. if grep -q "WIKI_TITLE" $CONFIGURATION_FILE; then
  1555. WIKI_TITLE=$(grep "WIKI_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1556. fi
  1557. if grep -q "MY_NAME" $CONFIGURATION_FILE; then
  1558. MY_NAME=$(grep "MY_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1559. fi
  1560. if grep -q "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE; then
  1561. MY_EMAIL_ADDRESS=$(grep "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1562. fi
  1563. if grep -q "INSTALLING_ON_BBB" $CONFIGURATION_FILE; then
  1564. INSTALLING_ON_BBB=$(grep "INSTALLING_ON_BBB" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1565. fi
  1566. if grep -q "USB_DRIVE" $CONFIGURATION_FILE; then
  1567. USB_DRIVE=$(grep "USB_DRIVE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1568. fi
  1569. if grep -q "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE; then
  1570. PUBLIC_MAILING_LIST=$(grep "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1571. fi
  1572. if grep -q "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1573. MICROBLOG_DOMAIN_NAME=$(grep "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1574. fi
  1575. if grep -q "MICROBLOG_CODE" $CONFIGURATION_FILE; then
  1576. MICROBLOG_CODE=$(grep "MICROBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1577. fi
  1578. if grep -q "HUBZILLA_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1579. HUBZILLA_DOMAIN_NAME=$(grep "HUBZILLA_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1580. fi
  1581. if grep -q "HUBZILLA_CODE" $CONFIGURATION_FILE; then
  1582. HUBZILLA_CODE=$(grep "HUBZILLA_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1583. fi
  1584. if grep -q "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1585. OWNCLOUD_DOMAIN_NAME=$(grep "OWNCLOUD_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1586. fi
  1587. if grep -q "OWNCLOUD_CODE" $CONFIGURATION_FILE; then
  1588. OWNCLOUD_CODE=$(grep "OWNCLOUD_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1589. fi
  1590. if grep -q "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1591. WIKI_DOMAIN_NAME=$(grep "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1592. fi
  1593. if grep -q "WIKI_CODE" $CONFIGURATION_FILE; then
  1594. WIKI_CODE=$(grep "WIKI_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1595. fi
  1596. if grep -q "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1597. FULLBLOG_DOMAIN_NAME=$(grep "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1598. fi
  1599. if grep -q "FULLBLOG_CODE" $CONFIGURATION_FILE; then
  1600. FULLBLOG_CODE=$(grep "FULLBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1601. fi
  1602. if grep -q "MY_BLOG_TITLE" $CONFIGURATION_FILE; then
  1603. MY_BLOG_TITLE=$(grep "MY_BLOG_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1604. fi
  1605. if grep -q "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE; then
  1606. MY_BLOG_SUBTITLE=$(grep "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1607. fi
  1608. if grep -q "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE; then
  1609. MEDIAGOBLIN_DOMAIN_NAME=$(grep "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1610. fi
  1611. if grep -q "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE; then
  1612. MEDIAGOBLIN_CODE=$(grep "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1613. fi
  1614. if grep -q "ESSID" $CONFIGURATION_FILE; then
  1615. ESSID=$(grep "ESSID" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1616. fi
  1617. if grep -q "BATMAN_CELLID" $CONFIGURATION_FILE; then
  1618. BATMAN_CELLID=$(grep "BATMAN_CELLID" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1619. fi
  1620. if grep -q "WIFI_CHANNEL" $CONFIGURATION_FILE; then
  1621. WIFI_CHANNEL=$(grep "WIFI_CHANNEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
  1622. fi
  1623. fi
  1624. }
  1625. read_configuration
  1626. interactive_configuration
  1627. show_result
  1628. exit 0