freedombone-utils-config 8.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. #!/bin/bash
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # Initial reading of the configuration file, typically called freedombone.cfg
  12. #
  13. # License
  14. # =======
  15. #
  16. # Copyright (C) 2014-2016 Bob Mottram <bob@robotics.uk.to>
  17. #
  18. # This program is free software: you can redistribute it and/or modify
  19. # it under the terms of the GNU Affero General Public License as published by
  20. # the Free Software Foundation, either version 3 of the License, or
  21. # (at your option) any later version.
  22. #
  23. # This program is distributed in the hope that it will be useful,
  24. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  25. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  26. # GNU Affero General Public License for more details.
  27. #
  28. # You should have received a copy of the GNU Affero General Public License
  29. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  30. configuration_variables=(FRIENDS_MIRRORS_SERVER
  31. FRIENDS_MIRRORS_SSH_PORT
  32. FRIENDS_MIRRORS_PASSWORD
  33. MY_MIRRORS_PASSWORD
  34. SYSTEM_TYPE
  35. SSL_PROTOCOLS
  36. SSL_CIPHERS
  37. SSH_CIPHERS
  38. SSH_MACS
  39. SSH_KEX
  40. SSH_HOST_KEY_ALGORITHMS
  41. SSH_PASSWORDS
  42. REFRESH_GPG_KEYS_HOURS
  43. GPG_KEYSERVER
  44. ENABLE_SOCIAL_KEY_MANAGEMENT
  45. MY_USERNAME
  46. DOMAIN_NAME
  47. DEFAULT_DOMAIN_NAME
  48. DEFAULT_DOMAIN_CODE
  49. NAMESERVER1
  50. NAMESERVER2
  51. GET_IP_ADDRESS_URL
  52. DDNS_PROVIDER
  53. DDNS_USERNAME
  54. DDNS_PASSWORD
  55. LOCAL_NETWORK_STATIC_IP_ADDRESS
  56. ROUTER_IP_ADDRESS
  57. CPU_CORES
  58. WEBSERVER_LOG_LEVEL
  59. ROUTE_THROUGH_TOR
  60. MY_NAME
  61. MY_EMAIL_ADDRESS
  62. INSTALLING_ON_BBB
  63. SSH_PORT
  64. INSTALLED_WITHIN_DOCKER
  65. GPG_ENCRYPT_STORED_EMAIL
  66. MY_GPG_PUBLIC_KEY
  67. MY_GPG_PRIVATE_KEY
  68. MY_GPG_PUBLIC_KEY_ID
  69. USB_DRIVE
  70. MAX_PHP_MEMORY
  71. TLS_TIME_SOURCE1
  72. TLS_TIME_SOURCE2
  73. ONION_ONLY
  74. DEFAULT_LANGUAGE
  75. MINIMAL_INSTALL
  76. LETSENCRYPT_SERVER
  77. WIFI_INTERFACE
  78. WIFI_SSID
  79. WIFI_TYPE
  80. WIFI_PASSPHRASE
  81. WIFI_HOTSPOT
  82. WIFI_NETWORKS_FILE
  83. DEFAULT_SEARCH
  84. SEARCH_ENGINE_PASSWORD
  85. PROJECT_WEBSITE
  86. PROJECT_REPO
  87. GPGIT_REPO
  88. GPGIT_COMMIT
  89. NGINX_ENSITE_REPO
  90. NGINX_ENSITE_REPO
  91. NGINX_ENSITE_COMMIT
  92. CLEANUP_MAILDIR_COMMIT
  93. CLEANUP_MAILDIR_REPO
  94. INADYN_REPO
  95. INADYN_COMMIT
  96. DH_KEYLENGTH
  97. WIFI_CHANNEL
  98. IPV6_NETWORK
  99. HWRNG_TYPE
  100. ENABLE_BABEL
  101. ENABLE_BATMAN
  102. ENABLE_CJDNS
  103. PUBLIC_MAILING_LIST)
  104. function read_config_param {
  105. param_name="$1"
  106. if [ ${#param_name} -gt 0 ]; then
  107. if [ $CONFIGURATION_FILE ]; then
  108. if [ -f $CONFIGURATION_FILE ]; then
  109. if grep -q "${param_name}=" $CONFIGURATION_FILE; then
  110. param_value=$(cat $CONFIGURATION_FILE | grep "${param_name}=" | head -n 1 | awk -F '=' '{print $2}')
  111. if [[ "${param_value}" != *" "* ]]; then
  112. export ${param_name}=${param_value}
  113. else
  114. export ${param_name}="${param_value}"
  115. fi
  116. fi
  117. fi
  118. fi
  119. fi
  120. }
  121. function write_config_param {
  122. param_name="$1"
  123. param_value="$2"
  124. if [ ${#param_name} -gt 0 ]; then
  125. if [ ${#param_value} -gt 0 ]; then
  126. if [ $CONFIGURATION_FILE ]; then
  127. if [ -f $CONFIGURATION_FILE ]; then
  128. if grep -q "${param_name}=" $CONFIGURATION_FILE; then
  129. sed -i "s|${param_name}=.*|${param_name}=${param_value}|g" $CONFIGURATION_FILE
  130. else
  131. echo "${param_name}=${param_value}" >> $CONFIGURATION_FILE
  132. fi
  133. else
  134. echo "${param_name}=${param_value}" > $CONFIGURATION_FILE
  135. fi
  136. fi
  137. fi
  138. fi
  139. }
  140. function save_configuration_values {
  141. if [ ! $CONFIGURATION_FILE ]; then
  142. CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg
  143. fi
  144. for v in "${configuration_variables[@]}"
  145. do
  146. write_config_param "$v" "${!v}"
  147. done
  148. }
  149. function read_configuration_values {
  150. # if not installing on a Beaglebone then use sdb as the USB drive by default
  151. if [ ! $INSTALLING_ON_BBB ]; then
  152. if [[ $USB_DRIVE == /dev/sda1 ]]; then
  153. USB_DRIVE=/dev/sdb1
  154. fi
  155. fi
  156. if [ -f $CONFIGURATION_FILE ]; then
  157. read_repo_servers
  158. # Ensure that a copy of the config exists for upgrade purposes
  159. if [[ $CONFIGURATION_FILE != "/root/${PROJECT_NAME}.cfg" ]]; then
  160. cp $CONFIGURATION_FILE /root/${PROJECT_NAME}.cfg
  161. fi
  162. for v in "${configuration_variables[@]}"
  163. do
  164. read_config_param "$v"
  165. done
  166. if grep -q "DEBIAN_REPO" $CONFIGURATION_FILE; then
  167. read_config_param "DEBIAN_REPO"
  168. 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."
  169. fi
  170. fi
  171. }
  172. function read_configuration {
  173. if [[ $INSTALLING_FROM_CONFIGURATION_FILE == "yes" ]]; then
  174. if [ ! -f $CONFIGURATION_FILE ]; then
  175. echo $"The configuration file $CONFIGURATION_FILE was not found"
  176. exit 8935
  177. fi
  178. fi
  179. read_configuration_values
  180. }
  181. function check_system_type {
  182. if [ ${#SYSTEM_TYPE} -eq 0 ]; then
  183. echo $'Unknown system type'
  184. exit 763572
  185. fi
  186. echo "System type: $SYSTEM_TYPE"
  187. }
  188. # check that domain names are valid and that they are unique for each app
  189. function check_domains {
  190. specified_domains=$(cat $CONFIGURATION_FILE | grep "_DOMAIN_NAME" | uniq)
  191. domains_array=($specified_domains)
  192. checked_domains=()
  193. for d in "${domains_array[@]}"
  194. do
  195. domain_param=$(echo "$d" | awk -F '=' '{print $1}')
  196. if [[ $domain_param != "DEFAULT_DOMAIN_NAME" ]]; then
  197. domain_value=$(echo "$d" | awk -F '=' '{print $2}')
  198. item_in_array "${domain_value}" "${checked_domains[@]}"
  199. if [[ $? != 0 ]]; then
  200. # test that this is a valid domain name
  201. function_check test_domain_name
  202. test_domain_name "$domain_value"
  203. # add it to the list of domains
  204. checked_domains+=("$domain_value")
  205. else
  206. echo $"Domain ${domain_value} collides with another app. The domain for each app should be unique."
  207. exit 673925
  208. fi
  209. fi
  210. done
  211. }
  212. # NOTE: deliberately no exit 0