freedombone-config 39KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105
  1. #!/bin/bash
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # Interactively creates a configuration file for use with the main
  12. # freedombone command
  13. #
  14. # License
  15. # =======
  16. #
  17. # Copyright (C) 2015-2016 Bob Mottram <bob@freedombone.net>
  18. #
  19. # This program is free software: you can redistribute it and/or modify
  20. # it under the terms of the GNU Affero General Public License as published by
  21. # the Free Software Foundation, either version 3 of the License, or
  22. # (at your option) any later version.
  23. #
  24. # This program is distributed in the hope that it will be useful,
  25. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  26. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  27. # GNU Affero General Public License for more details.
  28. #
  29. # You should have received a copy of the GNU Affero General Public License
  30. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  31. NO_OF_ARGS=$#
  32. PROJECT_NAME='freedombone'
  33. # username created by default within a debian image
  34. GENERIC_IMAGE_USERNAME='fbone'
  35. export TEXTDOMAIN=${PROJECT_NAME}-config
  36. export TEXTDOMAINDIR="/usr/share/locale"
  37. # Web site
  38. FREEDOMBONE_WEBSITE="https://freedombone.net or http://4fvfozz6g3zmvf76.onion"
  39. # Minimum number of characters in a password
  40. MINIMUM_PASSWORD_LENGTH=$(cat /usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-passwords | grep 'MINIMUM_PASSWORD_LENGTH=' | head -n 1 | awk -F '=' '{print $2}')
  41. # file containing new password
  42. IMAGE_PASSWORD_FILE=/root/login.txt
  43. MY_USERNAME=
  44. DEFAULT_DOMAIN_NAME=
  45. DEFAULT_DOMAIN_CODE=
  46. MY_EMAIL_ADDRESS=
  47. SYSTEM_TYPE='full'
  48. INSTALLING_ON_BBB="no"
  49. DDNS_PROVIDER=
  50. DDNS_USERNAME=
  51. DDNS_PASSWORD=
  52. MY_NAME=
  53. LOCAL_NETWORK_STATIC_IP_ADDRESS=
  54. ROUTER_IP_ADDRESS=
  55. ENABLE_BATMAN=
  56. DEBIAN_REPO=
  57. NAMESERVER1=
  58. NAMESERVER2=
  59. DOKUWIKI_TITLE=
  60. DOKUWIKI_DOMAIN_NAME=
  61. DOKUWIKI_CODE=
  62. HTMLY_TITLE=
  63. HTMLY_DOMAIN_NAME=
  64. HTMLY_CODE=
  65. MEDIAGOBLIN_ENABLED='no'
  66. MEDIAGOBLIN_DOMAIN_NAME=
  67. MEDIAGOBLIN_CODE=
  68. MEDIA_SERVER_ENABLED='no'
  69. MEDIA_SERVER_DOMAIN_NAME=
  70. MEDIA_SERVER_CODE=
  71. HUBZILLA_DOMAIN_NAME=
  72. HUBZILLA_CODE=
  73. GNUSOCIAL_DOMAIN_NAME=
  74. GNUSOCIAL_CODE=
  75. GNUSOCIAL_WELCOME_MESSAGE=$"<h1>Welcome to \$GNUSOCIAL_DOMAIN_NAME – a federated social network</h1><p>Another $PROJECT_NAME site</p>"
  76. GNUSOCIAL_BACKGROUND_IMAGE_URL=
  77. GIT_DOMAIN_NAME=
  78. GIT_CODE=
  79. MEDIAGOBLIN_DOMAIN_NAME=
  80. MEDIAGOBLIN_CODE=
  81. USB_DRIVE=/dev/sdb1
  82. HWRNG_TYPE=
  83. ENABLE_SOCIAL_KEY_MANAGEMENT=
  84. WIFI_INTERFACE=wlan0
  85. WIFI_TYPE='wpa2-psk'
  86. WIFI_SSID=
  87. WIFI_PASSPHRASE=
  88. WIFI_HOTSPOT=
  89. WIFI_NETWORKS_FILE=~/${PROJECT_NAME}-wifi.cfg
  90. BATMAN_CELLID='any'
  91. WIFI_CHANNEL=
  92. CONFIGURATION_FILE=
  93. DH_KEYLENGTH=
  94. MINIMAL_INSTALL="yes"
  95. DEFAULT_LANGUAGE='en_GB.UTF-8'
  96. ONION_ONLY="no"
  97. SELECTED_USERNAME=
  98. # Mirrors settings
  99. FRIENDS_MIRRORS_SERVER=
  100. FRIENDS_MIRRORS_SSH_PORT=2222
  101. FRIENDS_MIRRORS_PASSWORD=
  102. MY_MIRRORS_PASSWORD=
  103. VALID_CODE=
  104. PROJECT_INSTALL_DIR=/usr/local/bin
  105. if [ -f /usr/bin/${PROJECT_NAME} ]; then
  106. PROJECT_INSTALL_DIR=/usr/bin
  107. fi
  108. source $PROJECT_INSTALL_DIR/${PROJECT_NAME}-vars
  109. UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-*
  110. for f in $UTILS_FILES
  111. do
  112. source $f
  113. done
  114. APP_FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-*
  115. for f in $APP_FILES
  116. do
  117. source $f
  118. done
  119. function show_help {
  120. echo ''
  121. echo $"${PROJECT_NAME}-config -f [config filename] -m [min password length]"
  122. echo ''
  123. echo $'Creates an inventory of remote backup locations'
  124. echo ''
  125. echo ''
  126. echo $' -h --help Show help'
  127. echo $' -f --filename Configuration file (usually freedombone.cfg)'
  128. echo $' -m --min Minimum password length (characters)'
  129. echo $' -w --www Freedombone web site'
  130. echo $' -b --bm Freedombone support Bitmessage address'
  131. echo $' -o --onion [yes|no] Whether to only create .onion sites'
  132. echo $' --minimal [yes|no] For minimalistic "consumer grade" installs'
  133. echo ''
  134. exit 0
  135. }
  136. function choose_email_address {
  137. if [[ $ONION_ONLY != "no" ]]; then
  138. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  139. else
  140. while [ ${#MY_EMAIL_ADDRESS} -lt 5 ]
  141. do
  142. EMAIL_ADDRESS=$(grep 'MY_EMAIL_ADDRESS' temp.cfg | awk -F '=' '{print $2}')
  143. if [ ! $EMAIL_ADDRESS ]; then
  144. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  145. fi
  146. if [ ${#MY_EMAIL_ADDRESS} -lt 5 ]; then
  147. EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME
  148. fi
  149. data=$(tempfile 2>/dev/null)
  150. trap "rm -f $data" 0 1 2 5 15
  151. dialog --backtitle $"Freedombone Configuration" \
  152. --inputbox $"Your email address" 10 30 "$EMAIL_ADDRESS" 2> $data
  153. sel=$?
  154. case $sel in
  155. 0) MY_EMAIL_ADDRESS=$(cat $data);;
  156. 1) exit 1;;
  157. 255) exit 1;;
  158. esac
  159. done
  160. fi
  161. save_configuration_values
  162. }
  163. function choose_default_domain_name {
  164. if [[ $ONION_ONLY != "no" ]]; then
  165. DEFAULT_DOMAIN_NAME="${PROJECT_NAME}.local"
  166. else
  167. DEFAULT_DOMAIN_DETAILS_COMPLETE=
  168. while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ]
  169. do
  170. data=$(tempfile 2>/dev/null)
  171. trap "rm -f $data" 0 1 2 5 15
  172. if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then
  173. dialog --backtitle $"Freedombone Configuration" \
  174. --title $"Your main domain name" \
  175. --form $"\nWhich domain name should your email/XMPP/IRC/Mumble be associated with?" 13 55 5 \
  176. $"Domain:" 1 1 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 24 33 40 \
  177. $"Code:" 2 1 "$(grep 'DEFAULT_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 24 33 255 \
  178. $"mail subdomain Code:" 3 1 "$(grep 'EMAIL_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 24 33 255 \
  179. $"XMPP subdomain Code:" 4 1 "$(grep 'XMPP_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 4 24 33 255 \
  180. 2> $data
  181. sel=$?
  182. case $sel in
  183. 1) exit 1;;
  184. 255) exit 1;;
  185. esac
  186. DEFAULT_DOMAIN_NAME=$(cat $data | sed -n 1p)
  187. DEFAULT_DOMAIN_CODE=$(cat $data | sed -n 2p)
  188. EMAIL_DOMAIN_CODE=$(cat $data | sed -n 2p)
  189. XMPP_DOMAIN_CODE=$(cat $data | sed -n 2p)
  190. if [ $DEFAULT_DOMAIN_NAME ]; then
  191. validate_freedns_code "$DEFAULT_DOMAIN_CODE"
  192. if [ ! $VALID_CODE ]; then
  193. DEFAULT_DOMAIN_NAME=
  194. fi
  195. fi
  196. if [ $EMAIL_DOMAIN_CODE ]; then
  197. validate_freedns_code "$EMAIL_DOMAIN_CODE"
  198. if [ ! $VALID_CODE ]; then
  199. DEFAULT_DOMAIN_NAME=
  200. EMAIL_DOMAIN_CODE=
  201. else
  202. write_config_param "EMAIL_DOMAIN_CODE" "$EMAIL_DOMAIN_CODE"
  203. fi
  204. fi
  205. if [ $XMPP_DOMAIN_CODE ]; then
  206. validate_freedns_code "$XMPP_DOMAIN_CODE"
  207. if [ ! $VALID_CODE ]; then
  208. DEFAULT_DOMAIN_NAME=
  209. XMPP_DOMAIN_CODE=
  210. else
  211. write_config_param "XMPP_DOMAIN_CODE" "$XMPP_DOMAIN_CODE"
  212. fi
  213. fi
  214. else
  215. dialog --backtitle $"Freedombone Configuration" \
  216. --inputbox $"Which domain name should your email/XMPP/IRC/Mumble be associated with?" 10 45 \
  217. "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  218. sel=$?
  219. case $sel in
  220. 0) DEFAULT_DOMAIN_NAME=$(cat $data);;
  221. 1) exit 1;;
  222. 255) exit 1;;
  223. esac
  224. fi
  225. if [ $DEFAULT_DOMAIN_NAME ]; then
  226. TEST_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME
  227. validate_domain_name
  228. if [[ $TEST_DOMAIN_NAME != $DEFAULT_DOMAIN_NAME ]]; then
  229. DEFAULT_DOMAIN_NAME=
  230. dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50
  231. else
  232. DEFAULT_DOMAIN_DETAILS_COMPLETE="yes"
  233. fi
  234. fi
  235. done
  236. fi
  237. save_configuration_values
  238. }
  239. function choose_dynamic_dns {
  240. if [[ $SYSTEM_TYPE != "mesh"* && $ONION_ONLY == "no" ]]; then
  241. data=$(tempfile 2>/dev/null)
  242. trap "rm -f $data" 0 1 2 5 15
  243. dialog --backtitle $"Freedombone Configuration" \
  244. --radiolist $"Choose Dynamic DNS provider:" 15 40 14 \
  245. 1 dyndns off \
  246. 2 freedns on \
  247. 3 zoneedit off \
  248. 4 no-ip off \
  249. 5 easydns off \
  250. 6 tzo off \
  251. 7 3322 off \
  252. 8 dnsomatic off \
  253. 9 tunnelbroker off \
  254. 10 dns.he.net off \
  255. 11 dynsip off \
  256. 12 sitelutions off \
  257. 13 dnsexit off \
  258. 14 changeip off 2> $data
  259. sel=$?
  260. case $sel in
  261. 1) exit 1;;
  262. 255) exit 1;;
  263. esac
  264. case $(cat $data) in
  265. 1) DDNS_PROVIDER="default@dyndns.org";;
  266. 2) DDNS_PROVIDER="default@freedns.afraid.org";;
  267. 3) DDNS_PROVIDER="default@zoneedit.com";;
  268. 4) DDNS_PROVIDER="default@no-ip.com";;
  269. 5) DDNS_PROVIDER="default@easydns.com";;
  270. 6) DDNS_PROVIDER="default@tzo.com";;
  271. 7) DDNS_PROVIDER="dyndns@3322.org";;
  272. 8) DDNS_PROVIDER="default@dnsomatic.com";;
  273. 9) DDNS_PROVIDER="ipv6tb@he.net";;
  274. 10) DDNS_PROVIDER="dyndns@he.net";;
  275. 11) DDNS_PROVIDER="default@dynsip.org";;
  276. 12) DDNS_PROVIDER="default@sitelutions.com";;
  277. 13) DDNS_PROVIDER="default@dnsexit.com";;
  278. 14) DDNS_PROVIDER="default@changeip.com";;
  279. 255) exit 1;;
  280. esac
  281. save_configuration_values
  282. valid_ddns_username=
  283. while [ ! $valid_ddns_username ]
  284. do
  285. data=$(tempfile 2>/dev/null)
  286. trap "rm -f $data" 0 1 2 5 15
  287. dialog --backtitle $"Freedombone Configuration" \
  288. --inputbox $"Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  289. sel=$?
  290. case $sel in
  291. 0) possible_username=$(cat $data)
  292. if [ "$possible_username" ]; then
  293. if [ ${#possible_username} -gt 1 ]; then
  294. valid_ddns_username=$(cat $data)
  295. DDNS_USERNAME=$valid_ddns_username
  296. break;
  297. fi
  298. fi
  299. ;;
  300. 1) exit 1;;
  301. 255) exit 1;;
  302. esac
  303. done
  304. save_configuration_values
  305. valid_ddns_password=
  306. while [ ! $valid_ddns_password ]
  307. do
  308. data=$(tempfile 2>/dev/null)
  309. trap "rm -f $data" 0 1 2 5 15
  310. dialog --backtitle $"Freedombone Configuration" \
  311. --clear \
  312. --insecure \
  313. --passwordbox $"Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  314. sel=$?
  315. case $sel in
  316. 0) possible_password=$(cat $data)
  317. if [ "$possible_password" ]; then
  318. if [ ${#possible_password} -gt 1 ]; then
  319. valid_ddns_password=$(cat $data)
  320. DDNS_PASSWORD=$valid_ddns_password
  321. break;
  322. fi
  323. fi
  324. ;;
  325. 1) exit 1;;
  326. 255) exit 1;;
  327. esac
  328. if [ ${#DDNS_PASSWORD} -lt $MINIMUM_PASSWORD_LENGTH ]; then
  329. 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
  330. DDNS_PASSWORD=""
  331. fi
  332. done
  333. save_configuration_values
  334. fi
  335. }
  336. function choose_dns {
  337. if [[ $MINIMAL_INSTALL == "no" && $ONION_ONLY == "no" ]]; then
  338. data=$(tempfile 2>/dev/null)
  339. trap "rm -f $data" 0 1 2 5 15
  340. dialog --backtitle $"Freedombone Configuration" \
  341. --radiolist $"Pick a domain name service (DNS):" 25 50 16 \
  342. 1 $"Digital Courage" on \
  343. 2 $"German Privacy Foundation 1" off \
  344. 3 $"German Privacy Foundation 2" off \
  345. 4 $"Chaos Computer Club" off \
  346. 5 $"ClaraNet" off \
  347. 6 $"OpenNIC 1" off \
  348. 7 $"OpenNIC 2" off \
  349. 8 $"OpenNIC 3" off \
  350. 9 $"OpenNIC 4" off \
  351. 10 $"OpenNIC 5" off \
  352. 11 $"OpenNIC 6" off \
  353. 12 $"OpenNIC 7" off \
  354. 13 $"PowerNS" off \
  355. 14 $"ValiDOM" off \
  356. 15 $"Freie Unzensierte" off \
  357. 16 $"Google" off 2> $data
  358. sel=$?
  359. case $sel in
  360. 1) exit 1;;
  361. 255) exit 1;;
  362. esac
  363. case $(cat $data) in
  364. 1) NAMESERVER1='85.214.73.63'
  365. NAMESERVER2='213.73.91.35'
  366. ;;
  367. 2) NAMESERVER1='87.118.100.175'
  368. NAMESERVER2='94.75.228.29'
  369. ;;
  370. 3) NAMESERVER1='85.25.251.254'
  371. NAMESERVER2='2.141.58.13'
  372. ;;
  373. 4) NAMESERVER1='213.73.91.35'
  374. NAMESERVER2='85.214.73.63'
  375. ;;
  376. 5) NAMESERVER1='212.82.225.7'
  377. NAMESERVER2='212.82.226.212'
  378. ;;
  379. 6) NAMESERVER1='58.6.115.42'
  380. NAMESERVER2='58.6.115.43'
  381. ;;
  382. 7) NAMESERVER1='119.31.230.42'
  383. NAMESERVER2='200.252.98.162'
  384. ;;
  385. 8) NAMESERVER1='217.79.186.148'
  386. NAMESERVER2='81.89.98.6'
  387. ;;
  388. 9) NAMESERVER1='78.159.101.37'
  389. NAMESERVER2='203.167.220.153'
  390. ;;
  391. 10) NAMESERVER1='82.229.244.191'
  392. NAMESERVER2='82.229.244.191'
  393. ;;
  394. 11) NAMESERVER1='216.87.84.211'
  395. NAMESERVER2='66.244.95.20'
  396. ;;
  397. 12) NAMESERVER1='207.192.69.155'
  398. NAMESERVER2='72.14.189.120'
  399. ;;
  400. 13) NAMESERVER1='194.145.226.26'
  401. NAMESERVER2='77.220.232.44'
  402. ;;
  403. 14) NAMESERVER1='78.46.89.147'
  404. NAMESERVER2='88.198.75.145'
  405. ;;
  406. 15) NAMESERVER1='85.25.149.144'
  407. NAMESERVER2='87.106.37.196'
  408. ;;
  409. 16) NAMESERVER1='8.8.8.8'
  410. NAMESERVER2='4.4.4.4'
  411. ;;
  412. 255) exit 1;;
  413. esac
  414. save_configuration_values
  415. else
  416. # as defaults for a minimal install process these settings are debatable
  417. NAMESERVER1='85.214.73.63'
  418. NAMESERVER2='213.73.91.35'
  419. fi
  420. }
  421. function choose_debian_repo {
  422. if [[ $MINIMAL_INSTALL == "no" ]]; then
  423. data=$(tempfile 2>/dev/null)
  424. trap "rm -f $data" 0 1 2 5 15
  425. dialog --backtitle $"Freedombone Configuration" \
  426. --radiolist $"Where to download Debian packages from:" 25 45 49 \
  427. 1 $"Australia" off \
  428. 2 $"Austria" off \
  429. 3 $"Belarus" off \
  430. 4 $"Belgium" off \
  431. 5 $"Bosnia and Herzegovina" off \
  432. 6 $"Brazil" off \
  433. 7 $"Bulgaria" off \
  434. 8 $"Canada" off \
  435. 9 $"Chile" off \
  436. 10 $"China" off \
  437. 11 $"Croatia" off \
  438. 12 $"Czech Republic" off \
  439. 13 $"Denmark" off \
  440. 14 $"El Salvador" off \
  441. 15 $"Estonia" off \
  442. 16 $"Finland" off \
  443. 17 $"France 1" off \
  444. 18 $"France 2" off \
  445. 19 $"Germany 1" off \
  446. 20 $"Germany 2" off \
  447. 21 $"Greece" off \
  448. 22 $"Hungary" off \
  449. 23 $"Iceland" off \
  450. 24 $"Iran" off \
  451. 25 $"Ireland" off \
  452. 26 $"Italy" off \
  453. 27 $"Japan" off \
  454. 28 $"Korea" off \
  455. 29 $"Lithuania" off \
  456. 30 $"Mexico" off \
  457. 31 $"Netherlands" off \
  458. 32 $"New Caledonia" off \
  459. 33 $"New Zealand" off \
  460. 34 $"Norway" off \
  461. 35 $"Poland" off \
  462. 36 $"Portugal" off \
  463. 37 $"Romania" off \
  464. 38 $"Russia" off \
  465. 39 $"Slovakia" off \
  466. 40 $"Slovenia" off \
  467. 41 $"Spain" off \
  468. 42 $"Sweden" off \
  469. 43 $"Switzerland" off \
  470. 44 $"Taiwan" off \
  471. 45 $"Thailand" off \
  472. 46 $"Turkey" off \
  473. 47 $"Ukraine" off \
  474. 48 $"United Kingdom" off \
  475. 49 $"United States" on 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) DEBIAN_REPO='ftp.au.debian.org';;
  483. 2) DEBIAN_REPO='ftp.at.debian.org';;
  484. 3) DEBIAN_REPO='ftp.by.debian.org';;
  485. 4) DEBIAN_REPO='ftp.be.debian.org';;
  486. 5) DEBIAN_REPO='ftp.ba.debian.org';;
  487. 6) DEBIAN_REPO='ftp.br.debian.org';;
  488. 7) DEBIAN_REPO='ftp.bg.debian.org';;
  489. 8) DEBIAN_REPO='ftp.ca.debian.org';;
  490. 9) DEBIAN_REPO='ftp.cl.debian.org';;
  491. 10) DEBIAN_REPO='ftp.cn.debian.org';;
  492. 11) DEBIAN_REPO='ftp.hr.debian.org';;
  493. 12) DEBIAN_REPO='ftp.cz.debian.org';;
  494. 13) DEBIAN_REPO='ftp.dk.debian.org';;
  495. 14) DEBIAN_REPO='ftp.sv.debian.org';;
  496. 15) DEBIAN_REPO='ftp.ee.debian.org';;
  497. 16) DEBIAN_REPO='ftp.fi.debian.org';;
  498. 17) DEBIAN_REPO='ftp2.fr.debian.org';;
  499. 18) DEBIAN_REPO='ftp.fr.debian.org';;
  500. 19) DEBIAN_REPO='ftp2.de.debian.org';;
  501. 20) DEBIAN_REPO='ftp.de.debian.org';;
  502. 21) DEBIAN_REPO='ftp.gr.debian.org';;
  503. 22) DEBIAN_REPO='ftp.hu.debian.org';;
  504. 23) DEBIAN_REPO='ftp.is.debian.org';;
  505. 24) DEBIAN_REPO='ftp.ir.debian.org';;
  506. 25) DEBIAN_REPO='ftp.ie.debian.org';;
  507. 26) DEBIAN_REPO='ftp.it.debian.org';;
  508. 27) DEBIAN_REPO='ftp.jp.debian.org';;
  509. 28) DEBIAN_REPO='ftp.kr.debian.org';;
  510. 29) DEBIAN_REPO='ftp.lt.debian.org';;
  511. 30) DEBIAN_REPO='ftp.mx.debian.org';;
  512. 31) DEBIAN_REPO='ftp.nl.debian.org';;
  513. 32) DEBIAN_REPO='ftp.nc.debian.org';;
  514. 33) DEBIAN_REPO='ftp.nz.debian.org';;
  515. 34) DEBIAN_REPO='ftp.no.debian.org';;
  516. 35) DEBIAN_REPO='ftp.pl.debian.org';;
  517. 36) DEBIAN_REPO='ftp.pt.debian.org';;
  518. 37) DEBIAN_REPO='ftp.ro.debian.org';;
  519. 38) DEBIAN_REPO='ftp.ru.debian.org';;
  520. 39) DEBIAN_REPO='ftp.sk.debian.org';;
  521. 40) DEBIAN_REPO='ftp.si.debian.org';;
  522. 41) DEBIAN_REPO='ftp.es.debian.org';;
  523. 42) DEBIAN_REPO='ftp.se.debian.org';;
  524. 43) DEBIAN_REPO='ftp.ch.debian.org';;
  525. 44) DEBIAN_REPO='ftp.tw.debian.org';;
  526. 45) DEBIAN_REPO='ftp.th.debian.org';;
  527. 46) DEBIAN_REPO='ftp.tr.debian.org';;
  528. 47) DEBIAN_REPO='ftp.ua.debian.org';;
  529. 48) DEBIAN_REPO='ftp.uk.debian.org';;
  530. 49) DEBIAN_REPO='ftp.us.debian.org';;
  531. 255) exit 1;;
  532. esac
  533. save_configuration_values
  534. else
  535. DEBIAN_REPO='ftp.de.debian.org'
  536. fi
  537. }
  538. function choose_rng {
  539. if [[ $MINIMAL_INSTALL == "no" ]]; then
  540. data=$(tempfile 2>/dev/null)
  541. trap "rm -f $data" 0 1 2 5 15
  542. if [[ $INSTALLING_ON_BBB != "yes" ]]; then
  543. dialog --backtitle $"Freedombone Configuration" \
  544. --radiolist $"Type of Random Number Generator:" 10 40 2 \
  545. 1 Haveged on \
  546. 2 OneRNG off 2> $data
  547. sel=$?
  548. case $sel in
  549. 1) exit 1;;
  550. 255) exit 1;;
  551. esac
  552. case $(cat $data) in
  553. 2) HWRNG_TYPE="onerng"
  554. dialog --title $"OneRNG Device" \
  555. --msgbox $"Please ensure that the OneRNG device is disconnected. You can reconnect it later during the installation" 8 60
  556. ;;
  557. 255) exit 1;;
  558. esac
  559. else
  560. HWRNG_TYPE="beaglebone"
  561. fi
  562. save_configuration_values
  563. fi
  564. }
  565. function choose_social_key_management {
  566. if [[ $MINIMAL_INSTALL == "no" ]]; then
  567. interactive_gpg
  568. data=$(tempfile 2>/dev/null)
  569. trap "rm -f $data" 0 1 2 5 15
  570. 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."
  571. if [[ $(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then
  572. dialog --title $"Social Key Management" \
  573. --backtitle $"Freedombone Configuration" \
  574. --yesno "$SOCIAL_KEY_STR" 15 60
  575. else
  576. dialog --title $"Social Key Management" \
  577. --backtitle $"Freedombone Configuration" \
  578. --defaultno \
  579. --yesno "$SOCIAL_KEY_STR" 15 60
  580. fi
  581. sel=$?
  582. case $sel in
  583. 0) ENABLE_SOCIAL_KEY_MANAGEMENT="yes";;
  584. 255) exit 1;;
  585. esac
  586. save_configuration_values
  587. else
  588. # enable for the minimal case
  589. ENABLE_SOCIAL_KEY_MANAGEMENT="yes"
  590. fi
  591. }
  592. function choose_username {
  593. if [ -d /home/$GENERIC_IMAGE_USERNAME ]; then
  594. if [ ! -f $IMAGE_PASSWORD_FILE ]; then
  595. echo 'Cannot find the password file for the admin user'
  596. exit 62753
  597. fi
  598. # when installing from an image which comes with a known default user account
  599. SELECTED_USERNAME=
  600. while [ ! $SELECTED_USERNAME ]
  601. do
  602. if [ ! $SELECTED_USERNAME ]; then
  603. SELECTED_USERNAME=$(grep 'MY_USERNAME' temp.cfg | awk -F '=' '{print $2}')
  604. fi
  605. data=$(tempfile 2>/dev/null)
  606. trap "rm -f $data" 0 1 2 5 15
  607. dialog --backtitle $"Freedombone Configuration" \
  608. --title $"Username" \
  609. --inputbox $"Set your username for the system\n\nYour username should not contain any spaces" 12 60 "$SELECTED_USERNAME" 2> $data
  610. sel=$?
  611. case $sel in
  612. 0) possible_username=$(cat $data)
  613. SELECTED_USERNAME=
  614. if [[ $possible_username != *' '* && $possible_username != *'/'* && $possible_username != *'\'* && $possible_username != *'*'* ]]; then
  615. if [ $possible_username ]; then
  616. if [ ${#possible_username} -gt 1 ]; then
  617. if [[ $possible_username != $GENERIC_IMAGE_USERNAME ]]; then
  618. MY_USERNAME=$(cat $data)
  619. useradd -m -s /bin/bash $MY_USERNAME
  620. if [ -d /home/$MY_USERNAME ]; then
  621. echo "${MY_USERNAME}:$(printf `cat $IMAGE_PASSWORD_FILE`)" | chpasswd
  622. # Add the user as a sudoer - they will be the new admin user
  623. if ! grep -q "$MY_USERNAME ALL=(ALL) ALL" /etc/sudoers; then
  624. echo "$MY_USERNAME ALL=(ALL) ALL" >> /etc/sudoers
  625. # remove the generic image admin user from sudoers
  626. sed -i "s|${GENERIC_IMAGE_USERNAME}.*||g" /etc/sudoers
  627. fi
  628. break
  629. fi
  630. fi
  631. fi
  632. fi
  633. fi
  634. ;;
  635. 1) exit 1;;
  636. 255) exit 1;;
  637. esac
  638. done
  639. else
  640. no_of_users=$(find /home/* -maxdepth 0 -type d | wc -l)
  641. if [ $no_of_users -eq 1 ]; then
  642. # only a single user on the system
  643. MY_USERNAME=$(ls /home)
  644. else
  645. # select one from a number of users
  646. select_user
  647. if [ ! $SELECTED_USERNAME ]; then
  648. echo $'No username selected'
  649. exit 72589
  650. fi
  651. MY_USERNAME="$SELECTED_USERNAME"
  652. fi
  653. fi
  654. if [ ! $MY_USERNAME ]; then
  655. echo $'No user account was selected'
  656. exit 64398
  657. fi
  658. if [[ $MY_USERNAME == '-f' ]]; then
  659. echo $'No user account was selected'
  660. exit 8347
  661. fi
  662. if [[ $MY_USERNAME == 'debian' || $MY_USERNAME == 'fbone' ]]; then
  663. echo $"Don't use the default user account"
  664. exit 9341
  665. fi
  666. if [ ! -d /home/$MY_USERNAME ]; then
  667. echo $"The directory /home/$MY_USERNAME does not exist"
  668. exit 6437
  669. fi
  670. save_configuration_values
  671. }
  672. function choose_full_name {
  673. valid_name=
  674. while [ ! $valid_name ]
  675. do
  676. data=$(tempfile 2>/dev/null)
  677. trap "rm -f $data" 0 1 2 5 15
  678. dialog --backtitle $"Freedombone Configuration" \
  679. --inputbox $"Your full name (or nick)" 10 30 "$(grep 'MY_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data
  680. sel=$?
  681. case $sel in
  682. 0) possible_name=$(cat $data)
  683. if [ "$possible_name" ]; then
  684. if [ ${#possible_name} -gt 1 ]; then
  685. valid_name="$possible_name"
  686. MY_NAME="$possible_name"
  687. break;
  688. fi
  689. fi
  690. ;;
  691. 1) exit 1;;
  692. 255) exit 1;;
  693. esac
  694. done
  695. save_configuration_values
  696. }
  697. function choose_system_variant {
  698. available_variants_list=()
  699. available_system_variants
  700. varslist=""
  701. n=1
  702. for a in "${available_variants_list[@]}"
  703. do
  704. varstate='off'
  705. if [[ "$a" == $'full' || "$a" == $'Full' ]]; then
  706. varstate='on'
  707. fi
  708. varslist="$varslist $n $a $varstate"
  709. n=$[n+1]
  710. done
  711. variant_choice=$(dialog --stdout --backtitle $"Freedombone Configuration" \
  712. --title $"Type of Installation" \
  713. --radiolist $'Choose:' \
  714. 27 40 20 $varslist)
  715. if [ $? -eq 0 ]; then
  716. variant_choice=$[variant_choice-1]
  717. SYSTEM_TYPE=${available_variants_list[$variant_choice]}
  718. save_configuration_values
  719. fi
  720. }
  721. function validate_freedns_code {
  722. freedns_code="$1"
  723. 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."
  724. if [[ "$freedns_code" == *"."* || "$freedns_code" == "http"* || "$freedns_code" == *"wget "* || "$freedns_code" == *" "* ]]; then
  725. dialog --title $"Invalid FreeDNS Code" --msgbox "$FREEDNS_MESSAGE" 10 70
  726. VALID_CODE=
  727. fi
  728. if [ ${#freedns_code} -lt 30 ]; then
  729. dialog --title $"Invalid FreeDNS Code" --msgbox $'FreeDNS code is too short. Did you enter the entire code?' 6 70
  730. VALID_CODE=
  731. fi
  732. VALID_CODE='yes'
  733. }
  734. # Get the commandline options
  735. while [[ $# > 1 ]]
  736. do
  737. key="$1"
  738. case $key in
  739. -h|--help)
  740. show_help
  741. ;;
  742. # Configuration filename
  743. -f|--filename)
  744. shift
  745. CONFIGURATION_FILE="$1"
  746. ;;
  747. # Minimum password length
  748. -m|--min)
  749. shift
  750. MINIMUM_PASSWORD_LENGTH="$1"
  751. ;;
  752. # Freedombone website
  753. -w|--www)
  754. shift
  755. FREEDOMBONE_WEBSITE="$1"
  756. ;;
  757. --minimal)
  758. shift
  759. MINIMAL_INSTALL="$1"
  760. ;;
  761. -o|--onion)
  762. shift
  763. ONION_ONLY="$1"
  764. ;;
  765. *)
  766. # unknown option
  767. ;;
  768. esac
  769. shift
  770. done
  771. function set_main_repo {
  772. data=$(tempfile 2>/dev/null)
  773. trap "rm -f $data" 0 1 2 5 15
  774. dialog --backtitle $"Freedombone Control Panel" \
  775. --title $"Main Repository (Mirrors)" \
  776. --form $"If you don't know what this means then just select Ok.\n\nIf you don't wish to use the default repositories they can be obtained from mirrored repos on another ${PROJECT_NAME} system.\n\nThe repositories are for applications which are not yet packaged for Debian." 18 65 4 \
  777. $"URL:" 1 1 "$FRIENDS_MIRRORS_SERVER" 1 18 40 18 \
  778. $"SSH Port:" 2 1 "$FRIENDS_MIRRORS_SSH_PORT" 2 18 10 10000 \
  779. $"Password:" 3 1 "$FRIENDS_MIRRORS_PASSWORD" 3 18 40 10000 \
  780. 2> $data
  781. sel=$?
  782. case $sel in
  783. 1) return;;
  784. 255) return;;
  785. esac
  786. new_mirrors_url=$(cat $data | sed -n 1p)
  787. new_mirrors_ssh_port=$(cat $data | sed -n 2p)
  788. new_mirrors_password=$(cat $data | sed -n 3p)
  789. if [ ${#new_mirrors_url} -lt 2 ]; then
  790. return
  791. fi
  792. if [ ${#new_mirrors_ssh_port} -lt 1 ]; then
  793. return
  794. fi
  795. if [ ${#new_mirrors_password} -lt 10 ]; then
  796. dialog --title $"Main Repository" \
  797. --msgbox $'Mirrors password was too short. Should be at least 10 characters.' 6 40
  798. return
  799. fi
  800. if [[ $new_mirrors_url == *"."* ]]; then
  801. FRIENDS_MIRRORS_SERVER=$new_mirrors_url
  802. FRIENDS_MIRRORS_SSH_PORT=$new_mirrors_ssh_port
  803. FRIENDS_MIRRORS_PASSWORD=$new_mirrors_password
  804. dialog --title $"Main Repository" \
  805. --msgbox $"Main repository set to $FRIENDS_MIRRORS_SERVER" 6 60
  806. fi
  807. save_configuration_values
  808. }
  809. function interactive_select_language {
  810. data=$(tempfile 2>/dev/null)
  811. trap "rm -f $data" 0 1 2 5 15
  812. dialog --backtitle $"Freedombone Configuration" \
  813. --radiolist $"Select your language:" 26 40 24 \
  814. 1 $"Afrikaans" off \
  815. 2 $"Albanian" off \
  816. 3 $"Arabic" off \
  817. 4 $"Basque" off \
  818. 5 $"Belarusian" off \
  819. 6 $"Bosnian" off \
  820. 7 $"Bulgarian" off \
  821. 8 $"Catalan" off \
  822. 9 $"Croatian" off \
  823. 10 $"Chinese (Simplified)" off \
  824. 11 $"Chinese (Traditional)" off \
  825. 12 $"Czech" off \
  826. 13 $"Danish" off \
  827. 14 $"Dutch" off \
  828. 15 $"English" on \
  829. 16 $"English (US)" off \
  830. 17 $"Estonian" off \
  831. 18 $"Farsi" off \
  832. 19 $"Filipino" off \
  833. 20 $"Finnish" off \
  834. 21 $"French" off \
  835. 22 $"French (Canada)" off \
  836. 23 $"Gaelic" off \
  837. 24 $"Gallego" off \
  838. 25 $"Georgian" off \
  839. 26 $"German" off \
  840. 27 $"German (Personal)" off \
  841. 28 $"Greek" off \
  842. 29 $"Gujarati" off \
  843. 30 $"Hebrew" off \
  844. 31 $"Hindi" off \
  845. 32 $"Hungarian" off \
  846. 33 $"Icelandic" off \
  847. 34 $"Indonesian" off \
  848. 35 $"Italian" off \
  849. 36 $"Japanese" off \
  850. 37 $"Kannada" off \
  851. 38 $"Khmer" off \
  852. 39 $"Korean" off \
  853. 40 $"Lao" off \
  854. 41 $"Lithuanian" off \
  855. 42 $"Latvian" off \
  856. 43 $"Malayalam" off \
  857. 44 $"Malaysian" off \
  858. 45 $"Maori (Ngai Tahu)" off \
  859. 46 $"Maori (Waikoto Uni)" off \
  860. 47 $"Mongolian" off \
  861. 48 $"Norwegian" off \
  862. 49 $"Norwegian (Primary)" off \
  863. 50 $"Nynorsk" off \
  864. 51 $"Polish" off \
  865. 52 $"Portuguese" off \
  866. 53 $"Portuguese (Brazil)" off \
  867. 54 $"Romanian" off \
  868. 55 $"Russian" off \
  869. 56 $"Samoan" off \
  870. 57 $"Serbian" off \
  871. 58 $"Slovak" off \
  872. 59 $"Slovenian" off \
  873. 60 $"Somali" off \
  874. 61 $"Spanish (International)" off \
  875. 62 $"Swedish" off \
  876. 63 $"Tagalog" off \
  877. 64 $"Tamil" off \
  878. 65 $"Thai" off \
  879. 66 $"Turkish" off \
  880. 67 $"Ukrainian" off \
  881. 68 $"Vietnamese" off 2> $data
  882. sel=$?
  883. case $sel in
  884. 1) exit 1;;
  885. 255) exit 1;;
  886. esac
  887. case $(cat $data) in
  888. 1) DEFAULT_LANGUAGE='af_ZA.UTF-8';;
  889. 2) DEFAULT_LANGUAGE='sq_AL.UTF-8';;
  890. 3) DEFAULT_LANGUAGE='ar_SA.UTF-8';;
  891. 4) DEFAULT_LANGUAGE='eu_ES.UTF-8';;
  892. 5) DEFAULT_LANGUAGE='be_BY.UTF-8';;
  893. 6) DEFAULT_LANGUAGE='bs_BA.UTF-8';;
  894. 7) DEFAULT_LANGUAGE='bg_BG.UTF-8';;
  895. 8) DEFAULT_LANGUAGE='ca_ES.UTF-8';;
  896. 9) DEFAULT_LANGUAGE='hr_HR.UTF-8';;
  897. 10) DEFAULT_LANGUAGE='zh_CN.UTF-8';;
  898. 11) DEFAULT_LANGUAGE='zh_TW.UTF-8';;
  899. 12) DEFAULT_LANGUAGE='cs_CZ.UTF-8';;
  900. 13) DEFAULT_LANGUAGE='da_DK.UTF-8';;
  901. 14) DEFAULT_LANGUAGE='nl_NL.UTF-8';;
  902. 15) DEFAULT_LANGUAGE='en_GB.UTF-8';;
  903. 16) DEFAULT_LANGUAGE='en_US.UTF-8';;
  904. 17) DEFAULT_LANGUAGE='et_EE.UTF-8';;
  905. 18) DEFAULT_LANGUAGE='fa_IR.UTF-8';;
  906. 19) DEFAULT_LANGUAGE='ph_PH.UTF-8';;
  907. 20) DEFAULT_LANGUAGE='fi_FI.UTF-8';;
  908. 21) DEFAULT_LANGUAGE='fr_FR.UTF-8';;
  909. 22) DEFAULT_LANGUAGE='fr_CA.UTF-8';;
  910. 23) DEFAULT_LANGUAGE='ga.UTF-8';;
  911. 24) DEFAULT_LANGUAGE='l_ES.UTF-8';;
  912. 25) DEFAULT_LANGUAGE='ka_GE.UTF-8';;
  913. 26) DEFAULT_LANGUAGE='de_DE.UTF-8';;
  914. 27) DEFAULT_LANGUAGE='de_DE.UTF-8';;
  915. 28) DEFAULT_LANGUAGE='el_GR.UTF-8';;
  916. 29) DEFAULT_LANGUAGE='gu.UTF-8';;
  917. 30) DEFAULT_LANGUAGE='he_IL.utf8';;
  918. 31) DEFAULT_LANGUAGE='hi_IN.UTF-8';;
  919. 32) DEFAULT_LANGUAGE='hu.UTF-8';;
  920. 33) DEFAULT_LANGUAGE='is_IS.UTF-8';;
  921. 34) DEFAULT_LANGUAGE='id_ID.UTF-8';;
  922. 35) DEFAULT_LANGUAGE='it_IT.UTF-8';;
  923. 36) DEFAULT_LANGUAGE='ja_JP.UTF-8';;
  924. 37) DEFAULT_LANGUAGE='kn_IN.UTF-8';;
  925. 38) DEFAULT_LANGUAGE='km_KH.UTF-8';;
  926. 39) DEFAULT_LANGUAGE='ko_KR.UTF-8';;
  927. 40) DEFAULT_LANGUAGE='lo_LA.UTF-8';;
  928. 41) DEFAULT_LANGUAGE='lt_LT.UTF-8';;
  929. 42) DEFAULT_LANGUAGE='lat.UTF-8';;
  930. 43) DEFAULT_LANGUAGE='ml_IN.UTF-8';;
  931. 44) DEFAULT_LANGUAGE='ms_MY.UTF-8';;
  932. 45) DEFAULT_LANGUAGE='mi_NZ.UTF-8';;
  933. 46) DEFAULT_LANGUAGE='mi_NZ.UTF-8';;
  934. 47) DEFAULT_LANGUAGE='mn.UTF-8';;
  935. 48) DEFAULT_LANGUAGE='no_NO.UTF-8';;
  936. 49) DEFAULT_LANGUAGE='no_NO.UTF-8';;
  937. 50) DEFAULT_LANGUAGE='nn_NO.UTF-8';;
  938. 51) DEFAULT_LANGUAGE='pl.UTF-8';;
  939. 52) DEFAULT_LANGUAGE='pt_PT.UTF-8';;
  940. 53) DEFAULT_LANGUAGE='pt_BR.UTF-8';;
  941. 54) DEFAULT_LANGUAGE='ro_RO.UTF-8';;
  942. 55) DEFAULT_LANGUAGE='ru_RU.UTF-8';;
  943. 56) DEFAULT_LANGUAGE='mi_NZ.UTF-8';;
  944. 57) DEFAULT_LANGUAGE='sr_CS.UTF-8';;
  945. 58) DEFAULT_LANGUAGE='sk_SK.UTF-8';;
  946. 59) DEFAULT_LANGUAGE='sl_SI.UTF-8';;
  947. 60) DEFAULT_LANGUAGE='so_SO.UTF-8';;
  948. 61) DEFAULT_LANGUAGE='es_ES.UTF-8';;
  949. 62) DEFAULT_LANGUAGE='sv_SE.UTF-8';;
  950. 63) DEFAULT_LANGUAGE='tl.UTF-8';;
  951. 64) DEFAULT_LANGUAGE='ta_IN.UTF-8';;
  952. 65) DEFAULT_LANGUAGE='th_TH.UTF-8';;
  953. 66) DEFAULT_LANGUAGE='tr_TR.UTF-8';;
  954. 67) DEFAULT_LANGUAGE='uk_UA.UTF-8';;
  955. 68) DEFAULT_LANGUAGE='vi_VN.UTF-8';;
  956. esac
  957. save_configuration_values
  958. locale-gen "${DEFAULT_LANGUAGE}"
  959. update-locale LANG=${DEFAULT_LANGUAGE}
  960. update-locale LANGUAGE=${DEFAULT_LANGUAGE}
  961. update-locale LC_MESSAGES=${DEFAULT_LANGUAGE}
  962. update-locale LC_ALL=${DEFAULT_LANGUAGE}
  963. update-locale LC_CTYPE=${DEFAULT_LANGUAGE}
  964. }
  965. function select_user {
  966. SELECTED_USERNAME=
  967. users_array=($(ls /home))
  968. delete=(mirrors git)
  969. for del in ${delete[@]}
  970. do
  971. users_array=(${users_array[@]/$del})
  972. done
  973. i=0
  974. W=()
  975. name=()
  976. for u in ${users_array[@]}
  977. do
  978. if [[ $(is_valid_user "$u") == "1" ]]; then
  979. i=$((i+1))
  980. W+=($i "$u")
  981. name+=("$u")
  982. fi
  983. done
  984. if [ $i -eq 1 ]; then
  985. SELECTED_USERNAME="${name[0]}"
  986. else
  987. user_index=$(dialog --backtitle $"Freedombone Configuration" --title $"Select User" --menu $"Select one of the following:" 24 40 17 "${W[@]}" 3>&2 2>&1 1>&3)
  988. if [ $? -eq 0 ]; then
  989. SELECTED_USERNAME="${name[$((user_index-1))]}"
  990. fi
  991. fi
  992. }
  993. function interactive_config {
  994. # create a temporary copy of the configuration file
  995. # which can be used to pre-populate selections
  996. if [ -f $CONFIGURATION_FILE ]; then
  997. cp $CONFIGURATION_FILE temp.cfg
  998. fi
  999. interactive_select_language
  1000. if [[ $ONION_ONLY == "no" ]]; then
  1001. INITIAL_MESSAGE=$"Welcome to the Freedombone interactive installer. Communications freedom is only a short time away.\n\nEnsure that you have your domain and dynamic DNS settings ready.\n\nFor more information please visit $FREEDOMBONE_WEBSITE."
  1002. else
  1003. INITIAL_MESSAGE=$"Welcome to the Freedombone interactive installer. Communications freedom is only a short time away.\n\nWeb sites created will only be viewable within a Tor browser.\n\nFor more information please visit $FREEDOMBONE_WEBSITE."
  1004. fi
  1005. dialog --title $"Freedombone" --msgbox "$INITIAL_MESSAGE" 15 50
  1006. #choose_system_variant
  1007. set_main_repo
  1008. choose_username
  1009. choose_full_name
  1010. choose_social_key_management
  1011. choose_rng
  1012. choose_debian_repo
  1013. choose_dns
  1014. ${PROJECT_NAME}-wifi --networksinteractive $WIFI_NETWORKS_FILE
  1015. choose_dynamic_dns
  1016. choose_default_domain_name
  1017. choose_email_address
  1018. interactive_key_recovery
  1019. # delete the temporary configuration file
  1020. if [ -f temp.cfg ]; then
  1021. shred -zu temp.cfg
  1022. fi
  1023. # This file indicates that the configuration happened successfully
  1024. touch $HOME/.${PROJECT_NAME}-interactive
  1025. }
  1026. function show_result {
  1027. #clear
  1028. echo ''
  1029. echo -n $"Configuration filename:"
  1030. echo " $CONFIGURATION_FILE"
  1031. echo ''
  1032. echo $'Contents:'
  1033. echo ''
  1034. cat $CONFIGURATION_FILE
  1035. echo ''
  1036. }
  1037. if [ ! $CONFIGURATION_FILE ]; then
  1038. CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg
  1039. fi
  1040. read_configuration_values
  1041. interactive_config
  1042. #show_result
  1043. exit 0