Newer
Older
# _____ _ _
# | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___
# | __| _| -_| -_| . | . | | . | . | | -_|
# |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___|
#
# Initial reading of the configuration file, typically called freedombone.cfg
#
# License
# =======
#
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
SSL_PROTOCOLS
SSL_CIPHERS
SSH_CIPHERS
SSH_MACS
SSH_KEX
SSH_HOST_KEY_ALGORITHMS
SSH_PASSWORDS
REFRESH_GPG_KEYS_HOURS
GPG_KEYSERVER
ENABLE_SOCIAL_KEY_MANAGEMENT
MY_USERNAME
DOMAIN_NAME
DEFAULT_DOMAIN_NAME
DEFAULT_DOMAIN_CODE
NAMESERVER3
NAMESERVER4
NAMESERVER5
NAMESERVER6
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
GET_IP_ADDRESS_URL
DDNS_PROVIDER
DDNS_USERNAME
DDNS_PASSWORD
LOCAL_NETWORK_STATIC_IP_ADDRESS
ROUTER_IP_ADDRESS
CPU_CORES
WEBSERVER_LOG_LEVEL
ROUTE_THROUGH_TOR
MY_NAME
MY_EMAIL_ADDRESS
INSTALLING_ON_BBB
SSH_PORT
INSTALLED_WITHIN_DOCKER
GPG_ENCRYPT_STORED_EMAIL
MY_GPG_PUBLIC_KEY
MY_GPG_PRIVATE_KEY
MY_GPG_PUBLIC_KEY_ID
USB_DRIVE
ONION_ONLY
DEFAULT_LANGUAGE
MINIMAL_INSTALL
LETSENCRYPT_SERVER
WIFI_INTERFACE
WIFI_SSID
WIFI_TYPE
WIFI_PASSPHRASE
WIFI_HOTSPOT
WIFI_NETWORKS_FILE
DEFAULT_SEARCH
SEARCH_ENGINE_PASSWORD
PROJECT_WEBSITE
PROJECT_REPO
GPGIT_REPO
GPGIT_COMMIT
NGINX_ENSITE_REPO
NGINX_ENSITE_REPO
NGINX_ENSITE_COMMIT
CLEANUP_MAILDIR_COMMIT
CLEANUP_MAILDIR_REPO
INADYN_REPO
INADYN_COMMIT
DH_KEYLENGTH
WIFI_CHANNEL
IPV6_NETWORK
HWRNG_TYPE
ENABLE_BATMAN
function get_completion_param {
param_name="$1"
if [ ${#param_name} -gt 0 ]; then
if [ "$COMPLETION_FILE" ]; then
if [ -f "$COMPLETION_FILE" ]; then
if grep -q "${param_name}:" "$COMPLETION_FILE"; then
param_value=$(grep "${param_name}:" "$COMPLETION_FILE" | head -n 1 | awk -F ':' '{print $2}')
echo "$param_value"
return
fi
fi
fi
fi
echo ""
}
function set_completion_param {
param_name="$1"
param_value="$2"
COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
fi
if [ ${#COMPLETION_FILE} -eq 0 ]; then
COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
fi
if [ ${#param_name} -gt 0 ]; then
if [ ${#param_value} -gt 0 ]; then
if [ -f "$COMPLETION_FILE" ]; then
if grep -q "${param_name}:" "$COMPLETION_FILE"; then
sed -i "s|${param_name}:.*|${param_name}:${param_value}|g" "$COMPLETION_FILE"
echo "${param_name}:${param_value}" >> "$COMPLETION_FILE"
echo "${param_name}:${param_value}" > "$COMPLETION_FILE"
fi
fi
fi
}
function mark_completed {
param_name="$1"
COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
fi
if [ ${#COMPLETION_FILE} -eq 0 ]; then
COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
fi
if [ ${#param_name} -gt 0 ]; then
if [ -f "$COMPLETION_FILE" ]; then
if ! grep -Fxq "${param_name}" "$COMPLETION_FILE"; then
echo "${param_name}" >> "$COMPLETION_FILE"
fi
fi
}
function is_completed {
param_name="$1"
if [ ! "$COMPLETION_FILE" ]; then
COMPLETION_FILE="$HOME/${PROJECT_NAME}-completed.txt"
COMPLETION_FILE="$HOME/${PROJECT_NAME}-completed.txt"
if [ -f "$COMPLETION_FILE" ]; then
if grep -Fxq "${param_name}" "$COMPLETION_FILE"; then
if [ "$CONFIGURATION_FILE" ]; then
if [ -f "$CONFIGURATION_FILE" ]; then
if grep -q "${param_name}=" "$CONFIGURATION_FILE"; then
param_value=$(grep "${param_name}=" "$CONFIGURATION_FILE" | head -n 1 | sed "s|${param_name}=||g")
function config_param_exists {
param_name="$1"
if [ ${#param_name} -gt 0 ]; then
if [ "$CONFIGURATION_FILE" ]; then
if [ -f "$CONFIGURATION_FILE" ]; then
if grep -q "${param_name}=" "$CONFIGURATION_FILE"; then
param_value=$(grep "${param_name}=" "$CONFIGURATION_FILE" | head -n 1 | awk -F '=' '{print $2}')
if [ ${#param_value} -gt 0 ]; then
echo "1"
return
fi
fi
fi
fi
fi
echo "0"
}
function write_config_param {
param_name="$1"
param_value="$2"
if [ ${#CONFIGURATION_FILE} -eq 0 ]; then
CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg
fi
if [ ${#param_name} -gt 0 ]; then
if [ ${#param_value} -gt 0 ]; then
if [ -f "$CONFIGURATION_FILE" ]; then
if grep -q "${param_name}=" "$CONFIGURATION_FILE"; then
sed -i "s|${param_name}=.*|${param_name}=${param_value}|g" "$CONFIGURATION_FILE"
echo "${param_name}=${param_value}" >> "$CONFIGURATION_FILE"
echo "${param_name}=${param_value}" > "$CONFIGURATION_FILE"
function remove_config_param {
param_name="$1"
if [ ${#param_name} -gt 0 ]; then
if [ "$CONFIGURATION_FILE" ]; then
if [ -f "$CONFIGURATION_FILE" ]; then
if grep -q "${param_name}=" "$CONFIGURATION_FILE"; then
sed -i "/${param_name}=/d" "$CONFIGURATION_FILE"
fi
fi
fi
fi
}
function remove_completion_param {
param_name="$1"
if [ ${#param_name} -gt 0 ]; then
if [ "$COMPLETION_FILE" ]; then
if [ -f "$COMPLETION_FILE" ]; then
if grep -Fxq "${param_name}" "$COMPLETION_FILE"; then
sed -i "/${param_name}/d" "$COMPLETION_FILE"
if grep -q "${param_name}:" "$COMPLETION_FILE"; then
sed -i "/${param_name}:/d" "$COMPLETION_FILE"
function save_configuration_values {
# shellcheck disable=SC2068
for v in ${configuration_variables[@]}
do
write_config_param "$v" "${!v}"
done
}
# if not installing on a Beaglebone then use sdb as the USB drive by default
if [[ $USB_DRIVE == /dev/sda1 ]]; then
USB_DRIVE=/dev/sdb1
fi
# Ensure that a copy of the config exists for upgrade purposes
if [[ $CONFIGURATION_FILE != "/root/${PROJECT_NAME}.cfg" ]]; then
# shellcheck disable=SC2068
for v in ${configuration_variables[@]}
CHECK_MESSAGE=$"Check your internet connection, /etc/network/interfaces and /etc/resolvconf/resolv.conf.d/head, then delete $COMPLETION_FILE, run 'rm -fR /var/lib/apt/lists/* && $UPDATE_PACKAGES --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."
function read_configuration {
if [[ $INSTALLING_FROM_CONFIGURATION_FILE == "yes" ]]; then
function check_system_type {
if [ ${#SYSTEM_TYPE} -eq 0 ]; then
echo $'Unknown system type'
# check that domain names are valid and that they are unique for each app
specified_domains=$(grep "_DOMAIN_NAME" "$CONFIGURATION_FILE" | uniq)
domains_array=("$specified_domains")
# shellcheck disable=SC2068
for d in ${domains_array[@]}
if [[ "$domain_param" != "DEFAULT_DOMAIN_NAME" ]]; then
if [[ "$domain_value" != "${LOCAL_NAME}.local" ]]; then
if ! item_in_array "${domain_value}" ${checked_domains[@]}; then
# test that this is a valid domain name
function_check test_domain_name
test_domain_name "$domain_value"
# add it to the list of domains
checked_domains+=("$domain_value")
else
echo $"Domain ${domain_value} collides with another app. The domain for each app should be unique."