freedombone-config 70KB

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