freedombone-config 40KB

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