From acd8a706d890db055f07de1f2e94702ae32ed600 Mon Sep 17 00:00:00 2001 From: Bob Mottram <bob@robotics.uk.to> Date: Sat, 8 Oct 2016 18:21:43 +0100 Subject: [PATCH] Tidying --- src/freedombone | 1 + src/freedombone-app-blog | 18 +- src/freedombone-app-gnusocial | 24 +- src/freedombone-app-gogs | 12 +- src/freedombone-app-hubzilla | 12 +- src/freedombone-app-mediagoblin | 13 +- src/freedombone-app-wiki | 18 +- src/freedombone-config | 3081 ++++++++++++------------------- src/freedombone-utils-config | 17 + src/freedombone-utils-selector | 18 + 10 files changed, 1275 insertions(+), 1939 deletions(-) diff --git a/src/freedombone b/src/freedombone index 9aebd4362..bb23baf4d 100755 --- a/src/freedombone +++ b/src/freedombone @@ -252,6 +252,7 @@ function parse_args { read_config_param 'DEFAULT_DOMAIN_NAME' read_config_param 'MY_USERNAME' read_config_param 'SYSTEM_TYPE' + read_config_param 'ONION_ONLY' if [ ! -d /home/$MY_USERNAME ]; then echo $"There is no user '$MY_USERNAME' on the system. Use 'adduser $MY_USERNAME' to create the user." diff --git a/src/freedombone-app-blog b/src/freedombone-app-blog index 948bd6b6f..36da064f6 100755 --- a/src/freedombone-app-blog +++ b/src/freedombone-app-blog @@ -165,21 +165,9 @@ function install_interactive_blog { fi done - if grep -q "MY_BLOG_TITLE=" $CONFIGURATION_FILE; then - sed -i "s|MY_BLOG_TITLE=.*|MY_BLOG_TITLE=$MY_BLOG_TITLE|g" $CONFIGURATION_FILE - else - echo "MY_BLOG_TITLE=$MY_BLOG_TITLE" >> $CONFIGURATION_FILE - fi - if grep -q "FULLBLOG_DOMAIN_NAME=" $CONFIGURATION_FILE; then - sed -i "s|FULLBLOG_DOMAIN_NAME=.*|FULLBLOG_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME|g" $CONFIGURATION_FILE - else - echo "FULLBLOG_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if grep -q "FULLBLOG_CODE=" $CONFIGURATION_FILE; then - sed -i "s|FULLBLOG_CODE=.*|FULLBLOG_CODE=$FULLBLOG_CODE|g" $CONFIGURATION_FILE - else - echo "FULLBLOG_CODE=$FULLBLOG_CODE" >> $CONFIGURATION_FILE - fi + write_config_param "MY_BLOG_TITLE" "$MY_BLOG_TITLE" + write_config_param "FULLBLOG_DOMAIN_NAME" "$FULLBLOG_DOMAIN_NAME" + write_config_param "FULLBLOG_CODE" "$FULLBLOG_CODE" fi } diff --git a/src/freedombone-app-gnusocial b/src/freedombone-app-gnusocial index a8389adaf..b351facd2 100755 --- a/src/freedombone-app-gnusocial +++ b/src/freedombone-app-gnusocial @@ -165,26 +165,10 @@ function install_interactive_gnusocial { fi done # save the results in the config file - if grep -q "MICROBLOG_DOMAIN_NAME=" $CONFIGURATION_FILE; then - sed -i "s|MICROBLOG_DOMAIN_NAME=.*|MICROBLOG_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME|g" $CONFIGURATION_FILE - else - echo "MICROBLOG_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if grep -q "MICROBLOG_CODE=" $CONFIGURATION_FILE; then - sed -i "s|MICROBLOG_CODE=.*|MICROBLOG_CODE=$MICROBLOG_CODE|g" $CONFIGURATION_FILE - else - echo "MICROBLOG_CODE=$MICROBLOG_CODE" >> $CONFIGURATION_FILE - fi - if grep -q "MICROBLOG_WELCOME_MESSAGE=" $CONFIGURATION_FILE; then - sed -i "s|MICROBLOG_WELCOME_MESSAGE=.*|MICROBLOG_WELCOME_MESSAGE=$MICROBLOG_WELCOME_MESSAGE|g" $CONFIGURATION_FILE - else - echo "MICROBLOG_WELCOME_MESSAGE=$MICROBLOG_WELCOME_MESSAGE" >> $CONFIGURATION_FILE - fi - if grep -q "MICROBLOG_BACKGROUND_IMAGE_URL=" $CONFIGURATION_FILE; then - sed -i "s|MICROBLOG_BACKGROUND_IMAGE_URL=.*|MICROBLOG_BACKGROUND_IMAGE_URL=$MICROBLOG_BACKGROUND_IMAGE_URL|g" $CONFIGURATION_FILE - else - echo "MICROBLOG_BACKGROUND_IMAGE_URL=$MICROBLOG_BACKGROUND_IMAGE_URL" >> $CONFIGURATION_FILE - fi + write_config_param "MICROBLOG_DOMAIN_NAME" "$MICROBLOG_DOMAIN_NAME" + write_config_param "MICROBLOG_CODE" "$MICROBLOG_CODE" + write_config_param "MICROBLOG_WELCOME_MESSAGE" "$MICROBLOG_WELCOME_MESSAGE" + write_config_param "MICROBLOG_BACKGROUND_IMAGE_URL" "$MICROBLOG_BACKGROUND_IMAGE_URL" fi } diff --git a/src/freedombone-app-gogs b/src/freedombone-app-gogs index 76a854ea8..a1c5c26b6 100755 --- a/src/freedombone-app-gogs +++ b/src/freedombone-app-gogs @@ -104,16 +104,8 @@ function install_interactive_gogs { done # save the results in the config file - if grep -q "GIT_DOMAIN_NAME=" ${CONFIGURATION_FILE}; then - sed -i "s|GIT_DOMAIN_NAME=.*|GIT_DOMAIN_NAME=$GIT_DOMAIN_NAME|g" ${CONFIGURATION_FILE} - else - echo "GIT_DOMAIN_NAME=$GIT_DOMAIN_NAME" >> ${CONFIGURATION_FILE} - fi - if grep -q "GIT_CODE=" ${CONFIGURATION_FILE}; then - sed -i "s|GIT_CODE=.*|GIT_CODE=$GIT_CODE|g" ${CONFIGURATION_FILE} - else - echo "GIT_CODE=$GIT_CODE" >> ${CONFIGURATION_FILE} - fi + write_config_param "GIT_DOMAIN_NAME" "$GIT_DOMAIN_NAME" + write_config_param "GIT_CODE" "$GIT_CODE" fi } diff --git a/src/freedombone-app-hubzilla b/src/freedombone-app-hubzilla index 5f902d3a3..37ae34a4d 100755 --- a/src/freedombone-app-hubzilla +++ b/src/freedombone-app-hubzilla @@ -185,16 +185,8 @@ function install_interactive_hubzilla { fi done # save the results in the config file - if grep -q "HUBZILLA_DOMAIN_NAME=" $CONFIGURATION_FILE; then - sed -i "s|HUBZILLA_DOMAIN_NAME=.*|HUBZILLA_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME|g" $CONFIGURATION_FILE - else - echo "HUBZILLA_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if grep -q "HUBZILLA_CODE=" $CONFIGURATION_FILE; then - sed -i "s|HUBZILLA_CODE=.*|HUBZILLA_CODE=$HUBZILLA_CODE|g" $CONFIGURATION_FILE - else - echo "HUBZILLA_CODE=$HUBZILLA_CODE" >> $CONFIGURATION_FILE - fi + write_config_param "HUBZILLA_DOMAIN_NAME" "$HUBZILLA_DOMAIN_NAME" + write_config_param "HUBZILLA_CODE" "$HUBZILLA_CODE" fi } diff --git a/src/freedombone-app-mediagoblin b/src/freedombone-app-mediagoblin index e3fa443a9..7b7eca23c 100755 --- a/src/freedombone-app-mediagoblin +++ b/src/freedombone-app-mediagoblin @@ -97,17 +97,10 @@ function install_interactive_mediagoblin { fi fi done + # save the results in the config file - if grep -q "MEDIAGOBLIN_DOMAIN_NAME=" $CONFIGURATION_FILE; then - sed -i "s|MEDIAGOBLIN_DOMAIN_NAME=.*|MEDIAGOBLIN_DOMAIN_NAME=$MEDIAGOBLIN_DOMAIN_NAME|g" $CONFIGURATION_FILE - else - echo "MEDIAGOBLIN_DOMAIN_NAME=$MEDIAGOBLIN_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if grep -q "MEDIAGOBLIN_CODE=" $CONFIGURATION_FILE; then - sed -i "s|MEDIAGOBLIN_CODE=.*|MEDIAGOBLIN_CODE=$MEDIAGOBLIN_CODE|g" $CONFIGURATION_FILE - else - echo "MEDIAGOBLIN_CODE=$MEDIAGOBLIN_CODE" >> $CONFIGURATION_FILE - fi + write_config_param "MEDIAGOBLIN_DOMAIN_NAME" "$MEDIAGOBLIN_DOMAIN_NAME" + write_config_param "MEDIAGOBLIN_CODE" "$MEDIAGOBLIN_CODE" fi } diff --git a/src/freedombone-app-wiki b/src/freedombone-app-wiki index ad87085bd..ec066687c 100755 --- a/src/freedombone-app-wiki +++ b/src/freedombone-app-wiki @@ -99,21 +99,9 @@ function install_interactive_wiki { done # save the results in the config file - if grep -q "WIKI_TITLE=" $CONFIGURATION_FILE; then - sed -i "s|WIKI_TITLE=.*|WIKI_TITLE=$WIKI_TITLE|g" $CONFIGURATION_FILE - else - echo "WIKI_TITLE=$WIKI_TITLE" >> $CONFIGURATION_FILE - fi - if grep -q "WIKI_DOMAIN_NAME=" $CONFIGURATION_FILE; then - sed -i "s|WIKI_DOMAIN_NAME=.*|WIKI_DOMAIN_NAME=$WIKI_DOMAIN_NAME|g" $CONFIGURATION_FILE - else - echo "WIKI_DOMAIN_NAME=$WIKI_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if grep -q "WIKI_CODE=" $CONFIGURATION_FILE; then - sed -i "s|WIKI_CODE=.*|WIKI_CODE=$WIKI_CODE|g" $CONFIGURATION_FILE - else - echo "WIKI_CODE=$WIKI_CODE" >> $CONFIGURATION_FILE - fi + write_config_param "WIKI_TITLE" "$WIKI_TITLE" + write_config_param "WIKI_DOMAIN_NAME" "$WIKI_DOMAIN_NAME" + write_config_param "WIKI_CODE" "$WIKI_CODE" fi } diff --git a/src/freedombone-config b/src/freedombone-config index 1077efa2d..21678c005 100755 --- a/src/freedombone-config +++ b/src/freedombone-config @@ -128,6 +128,20 @@ MY_MIRRORS_PASSWORD= VALID_CODE= +source $PROJECT_INSTALL_DIR/${PROJECT_NAME}-vars + +UTILS_FILES=/usr/share/${PROJECT_NAME}/utils/${PROJECT_NAME}-utils-* +for f in $UTILS_FILES +do + source $f +done + +APP_FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-* +for f in $APP_FILES +do + source $f +done + function show_help { echo '' echo $"${PROJECT_NAME}-config -f [config filename] -m [min password length]" @@ -146,830 +160,524 @@ function show_help { exit 0 } -function validate_freedns_code { - freedns_code="$1" +function choose_email_address { + if [[ $ONION_ONLY != "no" ]]; then + EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME + else + while [ ${#MY_EMAIL_ADDRESS} -lt 5 ] + do + EMAIL_ADDRESS=$(grep 'MY_EMAIL_ADDRESS' temp.cfg | awk -F '=' '{print $2}') + if [ ! $EMAIL_ADDRESS ]; then + EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME + fi + if [ ${#MY_EMAIL_ADDRESS} -lt 5 ]; then + EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME + fi - 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." + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone Configuration" \ + --inputbox $"Your email address" 10 30 "$EMAIL_ADDRESS" 2> $data + sel=$? + case $sel in + 0) MY_EMAIL_ADDRESS=$(cat $data);; + 1) exit 1;; + 255) exit 1;; + esac + done + fi + save_configuration_file +} - if [[ "$freedns_code" == *"."* || "$freedns_code" == "http"* || "$freedns_code" == *"wget "* || "$freedns_code" == *" "* ]]; then - dialog --title $"Invalid FreeDNS Code" --msgbox "$FREEDNS_MESSAGE" 10 70 - VALID_CODE= +function choose_default_domain_name { + if [[ $ONION_ONLY != "no" ]]; then + DEFAULT_DOMAIN_NAME="${PROJECT_NAME}.local" + else + DEFAULT_DOMAIN_DETAILS_COMPLETE= + while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then + dialog --backtitle $"Freedombone Configuration" \ + --title $"Your main domain name" \ + --form $"\nWhich domain name should your email/XMPP/IRC/Mumble be associated with?" 11 55 3 \ + $"Domain:" 1 1 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ + $"Code:" 2 1 "$(grep 'DEFAULT_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \ + 2> $data + sel=$? + case $sel in + 1) exit 1;; + 255) exit 1;; + esac + DEFAULT_DOMAIN_NAME=$(cat $data | sed -n 1p) + DEFAULT_DOMAIN_CODE=$(cat $data | sed -n 2p) + if [ $DEFAULT_DOMAIN_NAME ]; then + validate_freedns_code "$DEFAULT_DOMAIN_CODE" + if [ ! $VALID_CODE ]; then + DEFAULT_DOMAIN_NAME= + fi + fi + else + dialog --backtitle $"Freedombone Configuration" \ + --inputbox $"Which domain name should your email/XMPP/IRC/Mumble be associated with?" 10 45 \ + "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data + sel=$? + case $sel in + 0) DEFAULT_DOMAIN_NAME=$(cat $data);; + 1) exit 1;; + 255) exit 1;; + esac + fi + if [ $DEFAULT_DOMAIN_NAME ]; then + TEST_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME + validate_domain_name + if [[ $TEST_DOMAIN_NAME != $DEFAULT_DOMAIN_NAME ]]; then + DEFAULT_DOMAIN_NAME= + dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 + else + DEFAULT_DOMAIN_DETAILS_COMPLETE="yes" + fi + fi + done fi - if [ ${#freedns_code} -lt 30 ]; then - dialog --title $"Invalid FreeDNS Code" --msgbox $'FreeDNS code is too short. Did you enter the entire code?' 6 70 - VALID_CODE= + save_configuration_file +} + +function choose_static_ip { + if [[ $MINIMAL_INSTALL == "no" && $ONION_ONLY == "no" ]]; then + SET_STATIC_IP="no" + dialog --title $"Static local IP address" \ + --backtitle $"Freedombone Configuration" \ + --defaultno \ + --yesno $"\nDo you want to set a static local IP address for this system?\n\nFor example, 192.168.1.10" 10 60 + sel=$? + case $sel in + 0) SET_STATIC_IP="yes";; + 255) exit 1;; + esac + + if [[ $SET_STATIC_IP == "yes" ]]; then + if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then + LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep 'LOCAL_NETWORK_STATIC_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}') + if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then + LOCAL_NETWORK_STATIC_IP_ADDRESS='192.168..' + fi + fi + if [ ! $ROUTER_IP_ADDRESS ]; then + ROUTER_IP_ADDRESS=$(grep 'ROUTER_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}') + if [ ! $ROUTER_IP_ADDRESS ]; then + ROUTER_IP_ADDRESS='192.168..' + fi + fi + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone Configuration" \ + --title $"Local Network Configuration" \ + --form $"\nPlease enter the IP addresses:" 11 55 3 \ + $"This system:" 1 1 "$LOCAL_NETWORK_STATIC_IP_ADDRESS" 1 16 16 15 \ + $"Internet router:" 2 1 "$ROUTER_IP_ADDRESS" 2 16 16 15 \ + 2> $data + sel=$? + case $sel in + 1) exit 1;; + 255) exit 1;; + esac + LOCAL_NETWORK_STATIC_IP_ADDRESS=$(cat $data | sed -n 1p) + ROUTER_IP_ADDRESS=$(cat $data | sed -n 2p) + save_configuration_file + fi fi - VALID_CODE='yes' } -# Get the commandline options -while [[ $# > 1 ]] -do - key="$1" +function choose_dynamic_dns { + if [[ $SYSTEM_TYPE != "$VARIANT_MESH" && $ONION_ONLY == "no" ]]; then - case $key in - -h|--help) - show_help - ;; - # Configuration filename - -f|--filename) - shift - CONFIGURATION_FILE="$1" - ;; - # Minimum password length - -m|--min) - shift - MINIMUM_PASSWORD_LENGTH="$1" - ;; - # Freedombone website - -w|--www) - shift - FREEDOMBONE_WEBSITE="$1" - ;; - --minimal) - shift - MINIMAL_INSTALL="$1" - ;; - -o|--onion) - shift - ONION_ONLY="$1" - ;; - *) - # unknown option - ;; - esac - shift -done + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone Configuration" \ + --radiolist $"Choose Dynamic DNS provider:" 15 40 14 \ + 1 dyndns off \ + 2 freedns on \ + 3 zoneedit off \ + 4 no-ip off \ + 5 easydns off \ + 6 tzo off \ + 7 3322 off \ + 8 dnsomatic off \ + 9 tunnelbroker off \ + 10 dns.he.net off \ + 11 dynsip off \ + 12 sitelutions off \ + 13 dnsexit off \ + 14 changeip off 2> $data + sel=$? + case $sel in + 1) exit 1;; + 255) exit 1;; + esac + case $(cat $data) in + 1) DDNS_PROVIDER="default@dyndns.org";; + 2) DDNS_PROVIDER="default@freedns.afraid.org";; + 3) DDNS_PROVIDER="default@zoneedit.com";; + 4) DDNS_PROVIDER="default@no-ip.com";; + 5) DDNS_PROVIDER="default@easydns.com";; + 6) DDNS_PROVIDER="default@tzo.com";; + 7) DDNS_PROVIDER="dyndns@3322.org";; + 8) DDNS_PROVIDER="default@dnsomatic.com";; + 9) DDNS_PROVIDER="ipv6tb@he.net";; + 10) DDNS_PROVIDER="dyndns@he.net";; + 11) DDNS_PROVIDER="default@dynsip.org";; + 12) DDNS_PROVIDER="default@sitelutions.com";; + 13) DDNS_PROVIDER="default@dnsexit.com";; + 14) DDNS_PROVIDER="default@changeip.com";; + 255) exit 1;; + esac + save_configuration_file -function save_configuration_file { - if [ ! $CONFIGURATION_FILE ]; then - CONFIGURATION_FILE='freedombone.cfg' - fi + valid_ddns_username= + while [ ! $valid_ddns_username ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone Configuration" \ + --inputbox $"Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data + sel=$? + case $sel in + 0) possible_username=$(cat $data) + if [ "$possible_username" ]; then + if [ ${#possible_username} -gt 1 ]; then + valid_ddns_username=$(cat $data) + DDNS_USERNAME=$valid_ddns_username + break; + fi + fi + ;; + 1) exit 1;; + 255) exit 1;; + esac + done + save_configuration_file - echo "MY_USERNAME=$MY_USERNAME" > $CONFIGURATION_FILE - echo "DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME" >> $CONFIGURATION_FILE - if [ $DEFAULT_DOMAIN_CODE ]; then - echo "DEFAULT_DOMAIN_CODE=$DEFAULT_DOMAIN_CODE" >> $CONFIGURATION_FILE - fi - echo "SYSTEM_TYPE=$SYSTEM_TYPE" >> $CONFIGURATION_FILE - echo "INSTALLING_ON_BBB=$INSTALLING_ON_BBB" >> $CONFIGURATION_FILE - echo "USB_DRIVE=$USB_DRIVE" >> $CONFIGURATION_FILE - echo "DDNS_PROVIDER=$DDNS_PROVIDER" >> $CONFIGURATION_FILE - echo "DDNS_USERNAME=$DDNS_USERNAME" >> $CONFIGURATION_FILE - echo "DDNS_PASSWORD=$DDNS_PASSWORD" >> $CONFIGURATION_FILE - echo "DEFAULT_LANGUAGE=$DEFAULT_LANGUAGE" >> $CONFIGURATION_FILE - if [ "$MY_NAME" ]; then - echo "MY_NAME=$MY_NAME" >> $CONFIGURATION_FILE - fi - echo "MY_EMAIL_ADDRESS=$MY_EMAIL_ADDRESS" >> $CONFIGURATION_FILE - if [ $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then - echo "LOCAL_NETWORK_STATIC_IP_ADDRESS=$LOCAL_NETWORK_STATIC_IP_ADDRESS" >> $CONFIGURATION_FILE - echo "ROUTER_IP_ADDRESS=$ROUTER_IP_ADDRESS" >> $CONFIGURATION_FILE - fi - if [ $ENABLE_CJDNS ]; then - echo "ENABLE_CJDNS=$ENABLE_CJDNS" >> $CONFIGURATION_FILE - fi - if [ $ENABLE_BATMAN ]; then - echo "ENABLE_BATMAN=$ENABLE_BATMAN" >> $CONFIGURATION_FILE - fi - if [ $ENABLE_BABEL ]; then - echo "ENABLE_BABEL=$ENABLE_BABEL" >> $CONFIGURATION_FILE - fi - echo "DEBIAN_REPO=$DEBIAN_REPO" >> $CONFIGURATION_FILE - if [ $NAMESERVER1 ]; then - echo "NAMESERVER1=$NAMESERVER1" >> $CONFIGURATION_FILE - fi - if [ $NAMESERVER2 ]; then - echo "NAMESERVER2=$NAMESERVER2" >> $CONFIGURATION_FILE - fi - if [ "$WIKI_TITLE" ]; then - echo "WIKI_TITLE=$WIKI_TITLE" >> $CONFIGURATION_FILE - fi - if [ $WIKI_DOMAIN_NAME ]; then - echo "WIKI_DOMAIN_NAME=$WIKI_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if [ $WIKI_CODE ]; then - echo "WIKI_CODE=$WIKI_CODE" >> $CONFIGURATION_FILE - fi - if [ "$MY_BLOG_TITLE" ]; then - echo "MY_BLOG_TITLE=$MY_BLOG_TITLE" >> $CONFIGURATION_FILE - fi - if [ $FULLBLOG_DOMAIN_NAME ]; then - echo "FULLBLOG_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if [ $FULLBLOG_CODE ]; then - echo "FULLBLOG_CODE=$FULLBLOG_CODE" >> $CONFIGURATION_FILE - fi - if [ $HUBZILLA_DOMAIN_NAME ]; then - echo "HUBZILLA_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if [ $HUBZILLA_CODE ]; then - echo "HUBZILLA_CODE=$HUBZILLA_CODE" >> $CONFIGURATION_FILE - fi - if [ ${#MICROBLOG_DOMAIN_NAME} -gt 1 ]; then - echo "MICROBLOG_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if [ $MICROBLOG_CODE ]; then - echo "MICROBLOG_CODE=$MICROBLOG_CODE" >> $CONFIGURATION_FILE - fi - if [ ${#MICROBLOG_WELCOME_MESSAGE} -gt 1 ]; then - echo "MICROBLOG_WELCOME_MESSAGE=$MICROBLOG_WELCOME_MESSAGE" >> $CONFIGURATION_FILE - fi - if [ $MICROBLOG_BACKGROUND_IMAGE_URL ]; then - echo "MICROBLOG_BACKGROUND_IMAGE_URL=$MICROBLOG_BACKGROUND_IMAGE_URL" >> $CONFIGURATION_FILE - fi - if [ $GIT_DOMAIN_NAME ]; then - echo "GIT_DOMAIN_NAME=$GIT_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if [ $GIT_CODE ]; then - echo "GIT_CODE=$GIT_CODE" >> $CONFIGURATION_FILE - fi - if [ $MEDIAGOBLIN_DOMAIN_NAME ]; then - echo "MEDIAGOBLIN_DOMAIN_NAME=$MEDIAGOBLIN_DOMAIN_NAME" >> $CONFIGURATION_FILE - fi - if [ $MEDIAGOBLIN_CODE ]; then - echo "MEDIAGOBLIN_CODE=$MEDIAGOBLIN_CODE" >> $CONFIGURATION_FILE - fi - if [ $HWRNG_TYPE ]; then - echo "HWRNG_TYPE=$HWRNG_TYPE" >> $CONFIGURATION_FILE - fi - if [ $ENABLE_SOCIAL_KEY_MANAGEMENT ]; then - echo "ENABLE_SOCIAL_KEY_MANAGEMENT=$ENABLE_SOCIAL_KEY_MANAGEMENT" >> $CONFIGURATION_FILE - fi - if [ $WIFI_SSID ]; then - echo "WIFI_SSID=$WIFI_SSID" >> $CONFIGURATION_FILE - fi - if [ $WIFI_INTERFACE ]; then - echo "WIFI_INTERFACE=$WIFI_INTERFACE" >> $CONFIGURATION_FILE - fi - if [ $WIFI_TYPE ]; then - echo "WIFI_TYPE=$WIFI_TYPE" >> $CONFIGURATION_FILE - fi - if [ ${#WIFI_PASSPHRASE} -gt 1 ]; then - echo "WIFI_PASSPHRASE=$WIFI_PASSPHRASE" >> $CONFIGURATION_FILE - fi - if [ $WIFI_HOTSPOT ]; then - echo "WIFI_HOTSPOT=$WIFI_HOTSPOT" >> $CONFIGURATION_FILE - fi - if [ $BATMAN_CELLID ]; then - echo "BATMAN_CELLID=$BATMAN_CELLID" >> $CONFIGURATION_FILE - fi - if [ $WIFI_CHANNEL ]; then - echo "WIFI_CHANNEL=$WIFI_CHANNEL" >> $CONFIGURATION_FILE - fi - if [ $DH_KEYLENGTH ]; then - echo "DH_KEYLENGTH=$DH_KEYLENGTH" >> $CONFIGURATION_FILE - fi - echo "ONION_ONLY=$ONION_ONLY" >> $CONFIGURATION_FILE - - if [ $FRIENDS_MIRRORS_SERVER ]; then - echo "FRIENDS_MIRRORS_SERVER=$FRIENDS_MIRRORS_SERVER" >> $CONFIGURATION_FILE - fi - if [ $FRIENDS_MIRRORS_SSH_PORT ]; then - echo "FRIENDS_MIRRORS_SSH_PORT=$FRIENDS_MIRRORS_SSH_PORT" >> $CONFIGURATION_FILE - fi - if [ $FRIENDS_MIRRORS_PASSWORD ]; then - echo "FRIENDS_MIRRORS_PASSWORD=$FRIENDS_MIRRORS_PASSWORD" >> $CONFIGURATION_FILE - fi - if [ $MY_MIRRORS_PASSWORD ]; then - echo "MY_MIRRORS_PASSWORD=$MY_MIRRORS_PASSWORD" >> $CONFIGURATION_FILE - fi -} - -# test a domain name to see if it's valid -function validate_domain_name { - # count the number of dots in the domain name - dots=${TEST_DOMAIN_NAME//[^.]} - no_of_dots=${#dots} - if (( no_of_dots > 3 )); then - TEST_DOMAIN_NAME="The domain $TEST_DOMAIN_NAME has too many subdomains. It should be of the type w.x.y.z, x.y.z or y.z" - fi - if (( no_of_dots == 0 )); then - TEST_DOMAIN_NAME="The domain $TEST_DOMAIN_NAME has no top level domain. It should be of the type w.x.y.z, x.y.z or y.z" - fi -} - -function interactive_gpg_from_remote { - REMOTE_SERVERS_LIST=/home/$MY_USERNAME/keyshareservers.txt - - # get a list of remote servers - ${PROJECT_NAME}-remote -u $MY_USERNAME -l $REMOTE_SERVERS_LIST -t "Remote server" - - if [ ! -f $REMOTE_SERVERS_LIST ]; then - dialog --title $"Encryption keys" --msgbox $'Error obtaining server list' 6 70 - return 1 - fi - - # check the number of entries in the file - no_of_servers=$(cat $REMOTE_SERVERS_LIST | wc -l) - if (( no_of_servers < 3 )); then - dialog --title $"Encryption keys" \ - --msgbox $'There must be at least three servers to recover the key' 6 70 - return 2 - fi - - # try to recover the key from the servers - apt-get -y install libgfshare-bin gnupg - ${PROJECT_NAME}-recoverkey -u $MY_USERNAME -l $REMOTE_SERVERS_LIST - if [ ! "$?" = "0" ]; then - dialog --title $"Encryption keys" --msgbox $'Your key could not be recovered' 6 70 - return 3 - fi - - dialog --title $"Encryption keys" --msgbox $'Your key has been recovered' 6 70 - - return 0 -} - -function reconstruct_key { - if [ ! -d /home/$MY_USERNAME/.gnupg_fragments ]; then - return - fi - cd /home/$MY_USERNAME/.gnupg_fragments - no_of_shares=$(ls -afq keyshare.asc.* | wc -l) - if (( no_of_shares < 4 )); then - dialog --title $"Encryption keys" --msgbox $'Not enough fragments to reconstruct the key' 6 70 - exit 7348 - fi - apt-get -y install libgfshare-bin gnupg - gfcombine /home/$MY_USERNAME/.gnupg_fragments/keyshare* - if [ ! "$?" = "0" ]; then - dialog --title $"Encryption keys" --msgbox $'Unable to reconstruct the key' 6 70 - exit 7348 - fi - - KEYS_FILE=/home/$MY_USERNAME/.gnupg_fragments/keyshare.asc - if [ ! -f $KEYS_FILE ]; then - dialog --title $"Encryption keys" --msgbox $'Unable to reconstruct the key' 6 70 - fi - - su -c "gpg --allow-secret-key-import --import $KEYS_FILE" - $MY_USERNAME - if [ ! "$?" = "0" ]; then - echo $'Unable to import gpg key' - shred -zu $KEYS_FILE - rm -rf /home/$MY_USERNAME/.tempgnupg - exit 9654 - fi - shred -zu $KEYS_FILE - - dialog --title $"Encryption keys" --msgbox $'Key has been reconstructed' 6 70 -} - -function interactive_gpg_from_usb { - dialog --title $"Encryption keys" \ - --msgbox $'Plug in a USB drive containing a copy of your full key or key fragment' 6 70 - - HOME_DIR=/home/$MY_USERNAME - GPG_LOADING="yes" - SSH_IMPORTED="no" - GPG_CTR=0 - while [[ $GPG_LOADING == "yes" ]] - do - if [[ $INSTALLING_ON_BBB == "yes" ]]; then - GPG_USB_DRIVE='/dev/sda1' - if [ ! -b $GPG_USB_DRIVE ]; then - if (( GPG_CTR > 0 )); then - reconstruct_key - return 0 - fi - dialog --title $"Encryption keys" --msgbox $'No USB drive found' 6 30 - exit 739836 - fi - else - GPG_USB_DRIVE='/dev/sdb1' - if [ ! -b $GPG_USB_DRIVE ]; then - GPG_USB_DRIVE='/dev/sdc1' - if [ ! -b $GPG_USB_DRIVE ]; then - GPG_USB_DRIVE='/dev/sdd1' - if [ ! -b $GPG_USB_DRIVE ]; then - if (( GPG_CTR > 0 )); then - reconstruct_key - return 0 - fi - dialog --title $"Encryption keys" --msgbox $'No USB drive found' 6 30 - exit 27852 - fi - fi - fi - fi - - GPG_USB_MOUNT='/mnt/usb' - umount -f $GPG_USB_MOUNT - if [ ! -d $GPG_USB_MOUNT ]; then - mkdir -p $GPG_USB_MOUNT - fi - - if [ -f /dev/mapper/encrypted_usb ]; then - rm -rf /dev/mapper/encrypted_usb - fi - cryptsetup luksClose encrypted_usb - cryptsetup luksOpen $GPG_USB_DRIVE encrypted_usb - if [ "$?" = "0" ]; then - GPG_USB_DRIVE=/dev/mapper/encrypted_usb - fi - mount $GPG_USB_DRIVE $GPG_USB_MOUNT - if [ ! "$?" = "0" ]; then - if (( GPG_CTR > 0 )); then - rm -rf $GPG_USB_MOUNT - reconstruct_key - return 0 - fi - dialog --title $"Encryption keys" \ - --msgbox $"There was a problem mounting the USB drive to $GPG_USB_MOUNT" 6 70 - rm -rf $GPG_USB_MOUNT - exit 74393 - fi - - if [ ! -d $GPG_USB_MOUNT/.gnupg ]; then - if [ ! -d $GPG_USB_MOUNT/.gnupg_fragments ]; then - if (( GPG_CTR > 0 )); then - umount -f $GPG_USB_MOUNT - rm -rf $GPG_USB_MOUNT - reconstruct_key - return 0 - fi - dialog --title $"Encryption keys" \ - --msgbox $"The directory $GPG_USB_MOUNT/.gnupg or $GPG_USB_MOUNT/.gnupg_fragments was not found" 6 70 - umount -f $GPG_USB_MOUNT - rm -rf $GPG_USB_MOUNT - exit 723814 - fi - fi - - if [ -d $GPG_USB_MOUNT/.gnupg ]; then - if [ ! -d $HOME_DIR/.gnupg ]; then - mkdir $HOME_DIR/.gnupg - fi - cp -r $GPG_USB_MOUNT/.gnupg/* $HOME_DIR/.gnupg - GPG_LOADING="no" - dialog --title $"Encryption keys" \ - --msgbox $"GPG Keyring loaded to $HOME_DIR" 6 70 - else - if [ ! -d $HOME_DIR/.gnupg_fragments ]; then - mkdir $HOME_DIR/.gnupg_fragments - fi - cp -r $GPG_USB_MOUNT/.gnupg_fragments/* $HOME_DIR/.gnupg_fragments - fi - - if [[ $SSH_IMPORTED == "no" ]]; then - if [ -d $GPG_USB_MOUNT/.ssh ]; then - if [ ! -d $HOME_DIR/.ssh ]; then - mkdir $HOME_DIR/.ssh - fi - cp $GPG_USB_MOUNT/.ssh/* $HOME_DIR/.ssh - dialog --title $"Encryption keys" \ - --msgbox $"ssh keys imported" 6 70 - SSH_IMPORTED="yes" - fi - fi - - umount -f $GPG_USB_MOUNT - rm -rf $GPG_USB_MOUNT - if [[ $GPG_LOADING == "yes" ]]; then - dialog --title $"Encryption keys" \ - --msgbox $"Now remove the USB drive. Insert the next drive containing a key fragment, or select Ok to finish" 6 70 - fi - GPG_CTR=$((GPG_CTR + 1)) - done -} - -function interactive_gpg { - GPG_CONFIGURED="no" - while [[ $GPG_CONFIGURED != "yes" ]] - do - GPG_CONFIGURED="yes" - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --radiolist $"GPG/PGP keys for your system:" 13 70 3 \ - 1 $"Generate new keys (new user)" on \ - 2 $"Import keys from USB drive/s" off \ - 3 $"Retrieve keys from friends servers" off 2> $data - sel=$? - case $sel in - 1) exit 1;; - 255) exit 2;; - esac - case $(cat $data) in - 1) if [ -d /home/$MY_USERNAME/.gnupg ]; then - rm -rf /home/$MY_USERNAME/.gnupg - fi - break;; - 2) interactive_gpg_from_usb - break;; - 3) interactive_gpg_from_remote - if [ ! "$?" = "0" ]; then - GPG_CONFIGURED="no" - fi;; - esac - done -} - -function set_main_repo { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Control Panel" \ - --title $"Main Repository (Mirrors)" \ - --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 \ - $"URL:" 1 1 "$FRIENDS_MIRRORS_SERVER" 1 18 40 18 \ - $"SSH Port:" 2 1 "$FRIENDS_MIRRORS_SSH_PORT" 2 18 10 10000 \ - $"Password:" 3 1 "$FRIENDS_MIRRORS_PASSWORD" 3 18 40 10000 \ - 2> $data - sel=$? - case $sel in - 1) return;; - 255) return;; - esac - new_mirrors_url=$(cat $data | sed -n 1p) - new_mirrors_ssh_port=$(cat $data | sed -n 2p) - new_mirrors_password=$(cat $data | sed -n 3p) - - if [ ${#new_mirrors_url} -lt 2 ]; then - return - fi - if [ ${#new_mirrors_ssh_port} -lt 1 ]; then - return - fi - if [ ${#new_mirrors_password} -lt 10 ]; then - dialog --title $"Main Repository" \ - --msgbox $'Mirrors password was too short. Should be at least 10 characters.' 6 40 - return - fi - - if [[ $new_mirrors_url == *"."* ]]; then - FRIENDS_MIRRORS_SERVER=$new_mirrors_url - FRIENDS_MIRRORS_SSH_PORT=$new_mirrors_ssh_port - FRIENDS_MIRRORS_PASSWORD=$new_mirrors_password - - dialog --title $"Main Repository" \ - --msgbox $"Main repository set to $FRIENDS_MIRRORS_SERVER" 6 60 - fi -} - -function interactive_select_language { - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --radiolist $"Select your language:" 26 40 24 \ - 1 $"Afrikaans" off \ - 2 $"Albanian" off \ - 3 $"Arabic" off \ - 4 $"Basque" off \ - 5 $"Belarusian" off \ - 6 $"Bosnian" off \ - 7 $"Bulgarian" off \ - 8 $"Catalan" off \ - 9 $"Croatian" off \ - 10 $"Chinese (Simplified)" off \ - 11 $"Chinese (Traditional)" off \ - 12 $"Czech" off \ - 13 $"Danish" off \ - 14 $"Dutch" off \ - 15 $"English" on \ - 16 $"English (US)" off \ - 17 $"Estonian" off \ - 18 $"Farsi" off \ - 19 $"Filipino" off \ - 20 $"Finnish" off \ - 21 $"French" off \ - 22 $"French (Canada)" off \ - 23 $"Gaelic" off \ - 24 $"Gallego" off \ - 25 $"Georgian" off \ - 26 $"German" off \ - 27 $"German (Personal)" off \ - 28 $"Greek" off \ - 29 $"Gujarati" off \ - 30 $"Hebrew" off \ - 31 $"Hindi" off \ - 32 $"Hungarian" off \ - 33 $"Icelandic" off \ - 34 $"Indonesian" off \ - 35 $"Italian" off \ - 36 $"Japanese" off \ - 37 $"Kannada" off \ - 38 $"Khmer" off \ - 39 $"Korean" off \ - 40 $"Lao" off \ - 41 $"Lithuanian" off \ - 42 $"Latvian" off \ - 43 $"Malayalam" off \ - 44 $"Malaysian" off \ - 45 $"Maori (Ngai Tahu)" off \ - 46 $"Maori (Waikoto Uni)" off \ - 47 $"Mongolian" off \ - 48 $"Norwegian" off \ - 49 $"Norwegian (Primary)" off \ - 50 $"Nynorsk" off \ - 51 $"Polish" off \ - 52 $"Portuguese" off \ - 53 $"Portuguese (Brazil)" off \ - 54 $"Romanian" off \ - 55 $"Russian" off \ - 56 $"Samoan" off \ - 57 $"Serbian" off \ - 58 $"Slovak" off \ - 59 $"Slovenian" off \ - 60 $"Somali" off \ - 61 $"Spanish (International)" off \ - 62 $"Swedish" off \ - 63 $"Tagalog" off \ - 64 $"Tamil" off \ - 65 $"Thai" off \ - 66 $"Turkish" off \ - 67 $"Ukrainian" off \ - 68 $"Vietnamese" off 2> $data - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - case $(cat $data) in - 1) DEFAULT_LANGUAGE='af_ZA.UTF-8';; - 2) DEFAULT_LANGUAGE='sq_AL.UTF-8';; - 3) DEFAULT_LANGUAGE='ar_SA.UTF-8';; - 4) DEFAULT_LANGUAGE='eu_ES.UTF-8';; - 5) DEFAULT_LANGUAGE='be_BY.UTF-8';; - 6) DEFAULT_LANGUAGE='bs_BA.UTF-8';; - 7) DEFAULT_LANGUAGE='bg_BG.UTF-8';; - 8) DEFAULT_LANGUAGE='ca_ES.UTF-8';; - 9) DEFAULT_LANGUAGE='hr_HR.UTF-8';; - 10) DEFAULT_LANGUAGE='zh_CN.UTF-8';; - 11) DEFAULT_LANGUAGE='zh_TW.UTF-8';; - 12) DEFAULT_LANGUAGE='cs_CZ.UTF-8';; - 13) DEFAULT_LANGUAGE='da_DK.UTF-8';; - 14) DEFAULT_LANGUAGE='nl_NL.UTF-8';; - 15) DEFAULT_LANGUAGE='en.UTF-8';; - 16) DEFAULT_LANGUAGE='en_us.UTF-8';; - 17) DEFAULT_LANGUAGE='et_EE.UTF-8';; - 18) DEFAULT_LANGUAGE='fa_IR.UTF-8';; - 19) DEFAULT_LANGUAGE='ph_PH.UTF-8';; - 20) DEFAULT_LANGUAGE='fi_FI.UTF-8';; - 21) DEFAULT_LANGUAGE='fr_FR.UTF-8';; - 22) DEFAULT_LANGUAGE='fr_CA.UTF-8';; - 23) DEFAULT_LANGUAGE='ga.UTF-8';; - 24) DEFAULT_LANGUAGE='l_ES.UTF-8';; - 25) DEFAULT_LANGUAGE='ka_GE.UTF-8';; - 26) DEFAULT_LANGUAGE='de_DE.UTF-8';; - 27) DEFAULT_LANGUAGE='de_DE.UTF-8';; - 28) DEFAULT_LANGUAGE='el_GR.UTF-8';; - 29) DEFAULT_LANGUAGE='gu.UTF-8';; - 30) DEFAULT_LANGUAGE='he_IL.utf8';; - 31) DEFAULT_LANGUAGE='hi_IN.UTF-8';; - 32) DEFAULT_LANGUAGE='hu.UTF-8';; - 33) DEFAULT_LANGUAGE='is_IS.UTF-8';; - 34) DEFAULT_LANGUAGE='id_ID.UTF-8';; - 35) DEFAULT_LANGUAGE='it_IT.UTF-8';; - 36) DEFAULT_LANGUAGE='ja_JP.UTF-8';; - 37) DEFAULT_LANGUAGE='kn_IN.UTF-8';; - 38) DEFAULT_LANGUAGE='km_KH.UTF-8';; - 39) DEFAULT_LANGUAGE='ko_KR.UTF-8';; - 40) DEFAULT_LANGUAGE='lo_LA.UTF-8';; - 41) DEFAULT_LANGUAGE='lt_LT.UTF-8';; - 42) DEFAULT_LANGUAGE='lat.UTF-8';; - 43) DEFAULT_LANGUAGE='ml_IN.UTF-8';; - 44) DEFAULT_LANGUAGE='ms_MY.UTF-8';; - 45) DEFAULT_LANGUAGE='mi_NZ.UTF-8';; - 46) DEFAULT_LANGUAGE='mi_NZ.UTF-8';; - 47) DEFAULT_LANGUAGE='mn.UTF-8';; - 48) DEFAULT_LANGUAGE='no_NO.UTF-8';; - 49) DEFAULT_LANGUAGE='no_NO.UTF-8';; - 50) DEFAULT_LANGUAGE='nn_NO.UTF-8';; - 51) DEFAULT_LANGUAGE='pl.UTF-8';; - 52) DEFAULT_LANGUAGE='pt_PT.UTF-8';; - 53) DEFAULT_LANGUAGE='pt_BR.UTF-8';; - 54) DEFAULT_LANGUAGE='ro_RO.UTF-8';; - 55) DEFAULT_LANGUAGE='ru_RU.UTF-8';; - 56) DEFAULT_LANGUAGE='mi_NZ.UTF-8';; - 57) DEFAULT_LANGUAGE='sr_CS.UTF-8';; - 58) DEFAULT_LANGUAGE='sk_SK.UTF-8';; - 59) DEFAULT_LANGUAGE='sl_SI.UTF-8';; - 60) DEFAULT_LANGUAGE='so_SO.UTF-8';; - 61) DEFAULT_LANGUAGE='es_ES.UTF-8';; - 62) DEFAULT_LANGUAGE='sv_SE.UTF-8';; - 63) DEFAULT_LANGUAGE='tl.UTF-8';; - 64) DEFAULT_LANGUAGE='ta_IN.UTF-8';; - 65) DEFAULT_LANGUAGE='th_TH.UTF-8';; - 66) DEFAULT_LANGUAGE='tr_TR.UTF-8';; - 67) DEFAULT_LANGUAGE='uk_UA.UTF-8';; - 68) DEFAULT_LANGUAGE='vi_VN.UTF-8';; - esac - save_configuration_file - - update-locale LANG=${DEFAULT_LANGUAGE} - update-locale LANGUAGE=${DEFAULT_LANGUAGE} - update-locale LC_MESSAGES=${DEFAULT_LANGUAGE} - update-locale LC_ALL=${DEFAULT_LANGUAGE} - update-locale LC_CTYPE=${DEFAULT_LANGUAGE} -} - -function select_user { - SELECTED_USERNAME= - - users_array=($(ls /home)) - - delete=(mirrors git) - for del in ${delete[@]} - do - users_array=(${users_array[@]/$del}) - done - - i=0 - W=() - name=() - for u in ${users_array[@]} - do - i=$((i+1)) - W+=($i "$u") - name+=("$u") - done - - 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) - - if [ $? -eq 0 ]; then - SELECTED_USERNAME="${name[$((user_index-1))]}" + valid_ddns_password= + while [ ! $valid_ddns_password ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone Configuration" \ + --clear \ + --insecure \ + --passwordbox $"Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> $data + sel=$? + case $sel in + 0) possible_password=$(cat $data) + if [ "$possible_password" ]; then + if [ ${#possible_password} -gt 1 ]; then + valid_ddns_password=$(cat $data) + DDNS_PASSWORD=$valid_ddns_password + break; + fi + fi + ;; + 1) exit 1;; + 255) exit 1;; + esac + if [ ${#DDNS_PASSWORD} -lt $MINIMUM_PASSWORD_LENGTH ]; then + 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 + DDNS_PASSWORD="" + fi + done + save_configuration_file fi } -function interactive_config { - # create a temporary copy of the configuration file - # which can be used to pre-populate selections - if [ -f $CONFIGURATION_FILE ]; then - cp $CONFIGURATION_FILE temp.cfg - fi - - interactive_select_language - - if [[ $ONION_ONLY == "no" ]]; then - 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." - else - 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." - fi - - dialog --title $"Freedombone" --msgbox "$INITIAL_MESSAGE" 15 50 - - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --radiolist $"Type of Installation:" 18 40 11 \ - 1 $"Full" on \ - 2 $"Writer" off \ - 3 $"Cloud" off \ - 4 $"Chat" off \ - 5 $"Mailbox" off \ - 6 $"Non-Mailbox" off \ - 7 $"Social" off \ - 8 $"Media" off \ - 9 $"Developer" off \ - 10 $"Mesh (router)" off \ - 11 $"Mesh (user device)" off 2> $data - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - case $(cat $data) in - 1) SYSTEM_TYPE=$VARIANT_FULL;; - 2) SYSTEM_TYPE=$VARIANT_WRITER;; - 3) SYSTEM_TYPE=$VARIANT_CLOUD;; - 4) SYSTEM_TYPE=$VARIANT_CHAT;; - 5) SYSTEM_TYPE=$VARIANT_MAILBOX;; - 6) SYSTEM_TYPE=$VARIANT_NONMAILBOX;; - 7) SYSTEM_TYPE=$VARIANT_SOCIAL;; - 8) SYSTEM_TYPE=$VARIANT_MEDIA;; - 9) SYSTEM_TYPE=$VARIANT_DEVELOPER;; - 10) SYSTEM_TYPE=$VARIANT_MESH;; - 11) SYSTEM_TYPE=$VARIANT_MESH_USER;; - esac - save_configuration_file - - if [[ $SYSTEM_TYPE != "$VARIANT_MESH" && $SYSTEM_TYPE != "$VARIANT_MESH_USER" ]]; then - set_main_repo +function choose_dns { + if [[ $MINIMAL_INSTALL == "no" && $ONION_ONLY == "no" ]]; then + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone Configuration" \ + --radiolist $"Pick a domain name service (DNS):" 25 50 16 \ + 1 $"Digital Courage" on \ + 2 $"German Privacy Foundation 1" off \ + 3 $"German Privacy Foundation 2" off \ + 4 $"Chaos Computer Club" off \ + 5 $"ClaraNet" off \ + 6 $"OpenNIC 1" off \ + 7 $"OpenNIC 2" off \ + 8 $"OpenNIC 3" off \ + 9 $"OpenNIC 4" off \ + 10 $"OpenNIC 5" off \ + 11 $"OpenNIC 6" off \ + 12 $"OpenNIC 7" off \ + 13 $"PowerNS" off \ + 14 $"ValiDOM" off \ + 15 $"Freie Unzensierte" off \ + 16 $"Google" off 2> $data + sel=$? + case $sel in + 1) exit 1;; + 255) exit 1;; + esac + case $(cat $data) in + 1) NAMESERVER1='85.214.73.63' + NAMESERVER2='213.73.91.35' + ;; + 2) NAMESERVER1='87.118.100.175' + NAMESERVER2='94.75.228.29' + ;; + 3) NAMESERVER1='85.25.251.254' + NAMESERVER2='2.141.58.13' + ;; + 4) NAMESERVER1='213.73.91.35' + NAMESERVER2='85.214.73.63' + ;; + 5) NAMESERVER1='212.82.225.7' + NAMESERVER2='212.82.226.212' + ;; + 6) NAMESERVER1='58.6.115.42' + NAMESERVER2='58.6.115.43' + ;; + 7) NAMESERVER1='119.31.230.42' + NAMESERVER2='200.252.98.162' + ;; + 8) NAMESERVER1='217.79.186.148' + NAMESERVER2='81.89.98.6' + ;; + 9) NAMESERVER1='78.159.101.37' + NAMESERVER2='203.167.220.153' + ;; + 10) NAMESERVER1='82.229.244.191' + NAMESERVER2='82.229.244.191' + ;; + 11) NAMESERVER1='216.87.84.211' + NAMESERVER2='66.244.95.20' + ;; + 12) NAMESERVER1='207.192.69.155' + NAMESERVER2='72.14.189.120' + ;; + 13) NAMESERVER1='194.145.226.26' + NAMESERVER2='77.220.232.44' + ;; + 14) NAMESERVER1='78.46.89.147' + NAMESERVER2='88.198.75.145' + ;; + 15) NAMESERVER1='85.25.149.144' + NAMESERVER2='87.106.37.196' + ;; + 16) NAMESERVER1='8.8.8.8' + NAMESERVER2='4.4.4.4' + ;; + 255) exit 1;; + esac save_configuration_file + else + # as defaults for a minimal install process these settings are debatable + NAMESERVER1='85.214.73.63' + NAMESERVER2='213.73.91.35' fi +} - if [[ $SYSTEM_TYPE == "$VARIANT_MESH" || $SYSTEM_TYPE == "$VARIANT_MESH_USER" ]]; then - ENABLE_BATMAN="yes" - ENABLE_CJDNS="no" - ENABLE_BABEL="no" - if [ ! $WIFI_SSID ]; then - WIFI_SSID='mesh' - fi - - #data=$(tempfile 2>/dev/null) - #trap "rm -f $data" 0 1 2 5 15 - #dialog --backtitle "Freedombone Configuration" \ - # --radiolist "Select your type of mesh network:" 10 40 3 \ - # 1 "Babel" off \ - # 2 "B.A.T.M.A.N. Advanced" on \ - # 3 "cjdns" off 2> $data - #sel=$? - #case $sel in - # 1) exit 1;; - # 255) exit 1;; - #esac - #case $(cat $data) in - # 1) ENABLE_BABEL="yes";; - # 2) ENABLE_BATMAN="yes";; - # 3) ENABLE_CJDNS="yes";; - #esac - save_configuration_file - +function choose_debian_repo { + if [[ $MINIMAL_INSTALL == "no" ]]; then data=$(tempfile 2>/dev/null) trap "rm -f $data" 0 1 2 5 15 dialog --backtitle $"Freedombone Configuration" \ - --inputbox $"Wireless Mesh ESSID\n\nIf you press enter the default will be '$WIFI_SSID'" 10 40 "$(grep 'WIFI_SSID' temp.cfg | awk -F '=' '{print $2}')" 2> $data + --radiolist $"Where to download Debian packages from:" 25 45 49 \ + 1 $"Australia" off \ + 2 $"Austria" off \ + 3 $"Belarus" off \ + 4 $"Belgium" off \ + 5 $"Bosnia and Herzegovina" off \ + 6 $"Brazil" off \ + 7 $"Bulgaria" off \ + 8 $"Canada" off \ + 9 $"Chile" off \ + 10 $"China" off \ + 11 $"Croatia" off \ + 12 $"Czech Republic" off \ + 13 $"Denmark" off \ + 14 $"El Salvador" off \ + 15 $"Estonia" off \ + 16 $"Finland" off \ + 17 $"France 1" off \ + 18 $"France 2" off \ + 19 $"Germany 1" off \ + 20 $"Germany 2" off \ + 21 $"Greece" off \ + 22 $"Hungary" off \ + 23 $"Iceland" off \ + 24 $"Iran" off \ + 25 $"Ireland" off \ + 26 $"Italy" off \ + 27 $"Japan" off \ + 28 $"Korea" off \ + 29 $"Lithuania" off \ + 30 $"Mexico" off \ + 31 $"Netherlands" off \ + 32 $"New Caledonia" off \ + 33 $"New Zealand" off \ + 34 $"Norway" off \ + 35 $"Poland" off \ + 36 $"Portugal" off \ + 37 $"Romania" off \ + 38 $"Russia" off \ + 39 $"Slovakia" off \ + 40 $"Slovenia" off \ + 41 $"Spain" off \ + 42 $"Sweden" off \ + 43 $"Switzerland" off \ + 44 $"Taiwan" off \ + 45 $"Thailand" off \ + 46 $"Turkey" off \ + 47 $"Ukraine" off \ + 48 $"United Kingdom" off \ + 49 $"United States" on 2> $data sel=$? case $sel in - 0) WIFI_SSID=$(cat $data);; 1) exit 1;; 255) exit 1;; esac + case $(cat $data) in + 1) DEBIAN_REPO='ftp.au.debian.org';; + 2) DEBIAN_REPO='ftp.at.debian.org';; + 3) DEBIAN_REPO='ftp.by.debian.org';; + 4) DEBIAN_REPO='ftp.be.debian.org';; + 5) DEBIAN_REPO='ftp.ba.debian.org';; + 6) DEBIAN_REPO='ftp.br.debian.org';; + 7) DEBIAN_REPO='ftp.bg.debian.org';; + 8) DEBIAN_REPO='ftp.ca.debian.org';; + 9) DEBIAN_REPO='ftp.cl.debian.org';; + 10) DEBIAN_REPO='ftp.cn.debian.org';; + 11) DEBIAN_REPO='ftp.hr.debian.org';; + 12) DEBIAN_REPO='ftp.cz.debian.org';; + 13) DEBIAN_REPO='ftp.dk.debian.org';; + 14) DEBIAN_REPO='ftp.sv.debian.org';; + 15) DEBIAN_REPO='ftp.ee.debian.org';; + 16) DEBIAN_REPO='ftp.fi.debian.org';; + 17) DEBIAN_REPO='ftp2.fr.debian.org';; + 18) DEBIAN_REPO='ftp.fr.debian.org';; + 19) DEBIAN_REPO='ftp2.de.debian.org';; + 20) DEBIAN_REPO='ftp.de.debian.org';; + 21) DEBIAN_REPO='ftp.gr.debian.org';; + 22) DEBIAN_REPO='ftp.hu.debian.org';; + 23) DEBIAN_REPO='ftp.is.debian.org';; + 24) DEBIAN_REPO='ftp.ir.debian.org';; + 25) DEBIAN_REPO='ftp.ie.debian.org';; + 26) DEBIAN_REPO='ftp.it.debian.org';; + 27) DEBIAN_REPO='ftp.jp.debian.org';; + 28) DEBIAN_REPO='ftp.kr.debian.org';; + 29) DEBIAN_REPO='ftp.lt.debian.org';; + 30) DEBIAN_REPO='ftp.mx.debian.org';; + 31) DEBIAN_REPO='ftp.nl.debian.org';; + 32) DEBIAN_REPO='ftp.nc.debian.org';; + 33) DEBIAN_REPO='ftp.nz.debian.org';; + 34) DEBIAN_REPO='ftp.no.debian.org';; + 35) DEBIAN_REPO='ftp.pl.debian.org';; + 36) DEBIAN_REPO='ftp.pt.debian.org';; + 37) DEBIAN_REPO='ftp.ro.debian.org';; + 38) DEBIAN_REPO='ftp.ru.debian.org';; + 39) DEBIAN_REPO='ftp.sk.debian.org';; + 40) DEBIAN_REPO='ftp.si.debian.org';; + 41) DEBIAN_REPO='ftp.es.debian.org';; + 42) DEBIAN_REPO='ftp.se.debian.org';; + 43) DEBIAN_REPO='ftp.ch.debian.org';; + 44) DEBIAN_REPO='ftp.tw.debian.org';; + 45) DEBIAN_REPO='ftp.th.debian.org';; + 46) DEBIAN_REPO='ftp.tr.debian.org';; + 47) DEBIAN_REPO='ftp.ua.debian.org';; + 48) DEBIAN_REPO='ftp.uk.debian.org';; + 49) DEBIAN_REPO='ftp.us.debian.org';; + 255) exit 1;; + esac save_configuration_file + else + DEBIAN_REPO='ftp.de.debian.org' + fi +} - if [[ $SYSTEM_TYPE != "$VARIANT_MESH_USER" ]]; then - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 +function choose_rng { + if [[ $MINIMAL_INSTALL == "no" ]]; then + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + if [[ $INSTALLING_ON_BBB != "yes" ]]; then dialog --backtitle $"Freedombone Configuration" \ - --inputbox $"Give your mesh peer a name" 10 40 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data + --radiolist $"Type of Random Number Generator:" 10 40 2 \ + 1 Haveged on \ + 2 OneRNG off 2> $data sel=$? case $sel in - 0) DEFAULT_DOMAIN_NAME=$(cat $data);; 1) exit 1;; 255) exit 1;; esac + case $(cat $data) in + 2) HWRNG_TYPE="onerng" + dialog --title $"OneRNG Device" \ + --msgbox $"Please ensure that the OneRNG device is disconnected. You can reconnect it later during the installation" 8 60 + ;; + 255) exit 1;; + esac else - DEFAULT_DOMAIN_NAME=$(hostname) + HWRNG_TYPE="beaglebone" fi save_configuration_file + fi +} + +function choose_social_key_management { + if [[ $MINIMAL_INSTALL == "no" ]]; then + interactive_gpg data=$(tempfile 2>/dev/null) trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --radiolist $"Wifi Channel (spaced to be non-overlapping):" 11 50 4 \ - 1 "1" on \ - 2 "5" off \ - 3 "9" off \ - 4 "13" off 2> $data + 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." + if [[ $(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then + dialog --title $"Social Key Management" \ + --backtitle $"Freedombone Configuration" \ + --yesno "$SOCIAL_KEY_STR" 15 60 + else + dialog --title $"Social Key Management" \ + --backtitle $"Freedombone Configuration" \ + --defaultno \ + --yesno "$SOCIAL_KEY_STR" 15 60 + fi sel=$? case $sel in - 1) exit 1;; + 0) ENABLE_SOCIAL_KEY_MANAGEMENT="yes";; 255) exit 1;; esac - case $(cat $data) in - 1) WIFI_CHANNEL=1;; - 2) WIFI_CHANNEL=5;; - 3) WIFI_CHANNEL=9;; - 4) WIFI_CHANNEL=13;; - esac save_configuration_file + else + # enable for the minimal case + ENABLE_SOCIAL_KEY_MANAGEMENT="yes" fi +} - #if [[ $ENABLE_BATMAN == "yes" ]]; then - # data=$(tempfile 2>/dev/null) - # trap "rm -f $data" 0 1 2 5 15 - # dialog --backtitle "Freedombone Configuration" \ - # --inputbox "Optionally register with an Access Point" 10 40 "$(grep 'BATMAN_CELLID' temp.cfg | awk -F '=' '{print $2}')" 2> $data - # sel=$? - # case $sel in - # 0) BATMAN_CELLID=$(cat $data);; - # 1) exit 1;; - # 255) exit 1;; - # esac - # save_configuration_file - #fi - - if [[ $SYSTEM_TYPE == "$VARIANT_MESH_USER" ]]; then - ${PROJECT_NAME}-client --essid $WIFI_SSID --channel $WIFI_CHANNEL - if [ "$?" = "0" ]; then - clear - echo ".---. . . " - echo "| | | " - echo "|--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. " - echo "| | (.-' (.-' ( | ( )| | | | )( )| | (.-' " - echo "' ' --' --' -' - -' ' ' -' -' -' ' - --'" - echo '' - echo $'Your system is now ready for connection to the mesh network' - echo '' - echo $'To connect to the network open a terminal and type:' - echo '' - echo ' meshweb' - echo '' - echo $'To disconnect from the mesh and return to the internet type:' - echo '' - echo ' sudo batman stop' - echo '' - echo $'To turn your system into a dedicated mesh peer you could add' - echo $'the meshweb command to your startup applications' - echo '' - touch /tmp/meshuserdevice - exit 0 +function choose_beaglebone_options { + if [[ $MINIMAL_INSTALL == "no" ]]; then + if [[ $(grep "INSTALLING_ON_BBB" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then + dialog --title $"Install Target" \ + --backtitle $"Freedombone Configuration" \ + --yesno $"\nAre you installing onto a Beaglebone Black?" 7 60 else - echo $'Failed to fully install the mesh networking system' - exit 74589 + dialog --title $"Install Target" \ + --backtitle $"Freedombone Configuration" \ + --defaultno \ + --yesno $"\nAre you installing onto a Beaglebone Black?" 7 60 + fi + sel=$? + case $sel in + 0) INSTALLING_ON_BBB="yes";; + 1) INSTALLING_ON_BBB="no";; + 255) exit 1;; + esac + if [[ $INSTALLING_ON_BBB == "yes" ]]; then + USB_DRIVE=/dev/sda1 fi + save_configuration_file fi +} +function choose_username { if [ -d /home/$GENERIC_IMAGE_USERNAME ]; then if [ ! -f $IMAGE_PASSWORD_FILE ]; then echo 'Cannot find the password file for the admin user' @@ -1036,970 +744,756 @@ function interactive_config { fi fi - if [ ! $MY_USERNAME ]; then - echo $'No user account was selected' - exit 64398 + if [ ! $MY_USERNAME ]; then + echo $'No user account was selected' + exit 64398 + fi + if [[ $MY_USERNAME == '-f' ]]; then + echo $'No user account was selected' + exit 8347 + fi + if [[ $MY_USERNAME == 'debian' || $MY_USERNAME == 'fbone' ]]; then + echo $"Don't use the default user account" + exit 9341 + fi + if [ ! -d /home/$MY_USERNAME ]; then + echo $"The directory /home/$MY_USERNAME does not exist" + exit 6437 + fi + save_configuration_file +} + +function choose_full_name { + valid_name= + while [ ! $valid_name ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone Configuration" \ + --inputbox $"Your full name (or nick)" 10 30 "$(grep 'MY_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data + sel=$? + case $sel in + 0) possible_name=$(cat $data) + if [ "$possible_name" ]; then + if [ ${#possible_name} -gt 1 ]; then + valid_name="$possible_name" + MY_NAME="$possible_name" + break; + fi + fi + ;; + 1) exit 1;; + 255) exit 1;; + esac + done + save_configuration_file +} + +function choose_system_variant { + available_variants_list=() + variants_list=$(available_system_variants) + + varslist="" + n=1 + vars_index=0 + for a in "${available_variants_list[@]}" + do + varstate='off' + if [[ "$a" == $'full' || "$a" == $'Full' ]]; then + varstate='on' + fi + varslist="$varslist $n $a $varstate" + n=$[n+1] + vars_index=$[vars_index+1] + done + + variant_choice=$(dialog --stdout --backtitle $"Freedombone Configuration" \ + --title $"Type of Installation" \ + --radiolist $'Choose:' \ + 27 40 20 $varslist) + variant_choice=$((variant_choice - 1)) + export SYSTEM_TYPE=${variants_list[$variant_choice]} + save_configuration_file +} + +function validate_freedns_code { + freedns_code="$1" + + 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." + + if [[ "$freedns_code" == *"."* || "$freedns_code" == "http"* || "$freedns_code" == *"wget "* || "$freedns_code" == *" "* ]]; then + dialog --title $"Invalid FreeDNS Code" --msgbox "$FREEDNS_MESSAGE" 10 70 + VALID_CODE= + fi + if [ ${#freedns_code} -lt 30 ]; then + dialog --title $"Invalid FreeDNS Code" --msgbox $'FreeDNS code is too short. Did you enter the entire code?' 6 70 + VALID_CODE= + fi + VALID_CODE='yes' +} + +# Get the commandline options +while [[ $# > 1 ]] +do + key="$1" + + case $key in + -h|--help) + show_help + ;; + # Configuration filename + -f|--filename) + shift + CONFIGURATION_FILE="$1" + ;; + # Minimum password length + -m|--min) + shift + MINIMUM_PASSWORD_LENGTH="$1" + ;; + # Freedombone website + -w|--www) + shift + FREEDOMBONE_WEBSITE="$1" + ;; + --minimal) + shift + MINIMAL_INSTALL="$1" + ;; + -o|--onion) + shift + ONION_ONLY="$1" + ;; + *) + # unknown option + ;; + esac + shift +done + +function save_configuration_file { + if [ ! $CONFIGURATION_FILE ]; then + CONFIGURATION_FILE='freedombone.cfg' + fi + + echo "MY_USERNAME=$MY_USERNAME" > $CONFIGURATION_FILE + echo "DEFAULT_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME" >> $CONFIGURATION_FILE + if [ $DEFAULT_DOMAIN_CODE ]; then + echo "DEFAULT_DOMAIN_CODE=$DEFAULT_DOMAIN_CODE" >> $CONFIGURATION_FILE + fi + echo "SYSTEM_TYPE=$SYSTEM_TYPE" >> $CONFIGURATION_FILE + echo "INSTALLING_ON_BBB=$INSTALLING_ON_BBB" >> $CONFIGURATION_FILE + echo "USB_DRIVE=$USB_DRIVE" >> $CONFIGURATION_FILE + echo "DDNS_PROVIDER=$DDNS_PROVIDER" >> $CONFIGURATION_FILE + echo "DDNS_USERNAME=$DDNS_USERNAME" >> $CONFIGURATION_FILE + echo "DDNS_PASSWORD=$DDNS_PASSWORD" >> $CONFIGURATION_FILE + echo "DEFAULT_LANGUAGE=$DEFAULT_LANGUAGE" >> $CONFIGURATION_FILE + if [ "$MY_NAME" ]; then + echo "MY_NAME=$MY_NAME" >> $CONFIGURATION_FILE + fi + echo "MY_EMAIL_ADDRESS=$MY_EMAIL_ADDRESS" >> $CONFIGURATION_FILE + if [ $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then + echo "LOCAL_NETWORK_STATIC_IP_ADDRESS=$LOCAL_NETWORK_STATIC_IP_ADDRESS" >> $CONFIGURATION_FILE + echo "ROUTER_IP_ADDRESS=$ROUTER_IP_ADDRESS" >> $CONFIGURATION_FILE + fi + if [ $ENABLE_CJDNS ]; then + echo "ENABLE_CJDNS=$ENABLE_CJDNS" >> $CONFIGURATION_FILE + fi + if [ $ENABLE_BATMAN ]; then + echo "ENABLE_BATMAN=$ENABLE_BATMAN" >> $CONFIGURATION_FILE + fi + if [ $ENABLE_BABEL ]; then + echo "ENABLE_BABEL=$ENABLE_BABEL" >> $CONFIGURATION_FILE + fi + echo "DEBIAN_REPO=$DEBIAN_REPO" >> $CONFIGURATION_FILE + if [ $NAMESERVER1 ]; then + echo "NAMESERVER1=$NAMESERVER1" >> $CONFIGURATION_FILE + fi + if [ $NAMESERVER2 ]; then + echo "NAMESERVER2=$NAMESERVER2" >> $CONFIGURATION_FILE + fi + if [ "$WIKI_TITLE" ]; then + echo "WIKI_TITLE=$WIKI_TITLE" >> $CONFIGURATION_FILE + fi + if [ $WIKI_DOMAIN_NAME ]; then + echo "WIKI_DOMAIN_NAME=$WIKI_DOMAIN_NAME" >> $CONFIGURATION_FILE + fi + if [ $WIKI_CODE ]; then + echo "WIKI_CODE=$WIKI_CODE" >> $CONFIGURATION_FILE + fi + if [ "$MY_BLOG_TITLE" ]; then + echo "MY_BLOG_TITLE=$MY_BLOG_TITLE" >> $CONFIGURATION_FILE + fi + if [ $FULLBLOG_DOMAIN_NAME ]; then + echo "FULLBLOG_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE + fi + if [ $FULLBLOG_CODE ]; then + echo "FULLBLOG_CODE=$FULLBLOG_CODE" >> $CONFIGURATION_FILE + fi + if [ $HUBZILLA_DOMAIN_NAME ]; then + echo "HUBZILLA_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME" >> $CONFIGURATION_FILE + fi + if [ $HUBZILLA_CODE ]; then + echo "HUBZILLA_CODE=$HUBZILLA_CODE" >> $CONFIGURATION_FILE + fi + if [ ${#MICROBLOG_DOMAIN_NAME} -gt 1 ]; then + echo "MICROBLOG_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME" >> $CONFIGURATION_FILE + fi + if [ $MICROBLOG_CODE ]; then + echo "MICROBLOG_CODE=$MICROBLOG_CODE" >> $CONFIGURATION_FILE + fi + if [ ${#MICROBLOG_WELCOME_MESSAGE} -gt 1 ]; then + echo "MICROBLOG_WELCOME_MESSAGE=$MICROBLOG_WELCOME_MESSAGE" >> $CONFIGURATION_FILE + fi + if [ $MICROBLOG_BACKGROUND_IMAGE_URL ]; then + echo "MICROBLOG_BACKGROUND_IMAGE_URL=$MICROBLOG_BACKGROUND_IMAGE_URL" >> $CONFIGURATION_FILE + fi + if [ $GIT_DOMAIN_NAME ]; then + echo "GIT_DOMAIN_NAME=$GIT_DOMAIN_NAME" >> $CONFIGURATION_FILE + fi + if [ $GIT_CODE ]; then + echo "GIT_CODE=$GIT_CODE" >> $CONFIGURATION_FILE + fi + if [ $MEDIAGOBLIN_DOMAIN_NAME ]; then + echo "MEDIAGOBLIN_DOMAIN_NAME=$MEDIAGOBLIN_DOMAIN_NAME" >> $CONFIGURATION_FILE + fi + if [ $MEDIAGOBLIN_CODE ]; then + echo "MEDIAGOBLIN_CODE=$MEDIAGOBLIN_CODE" >> $CONFIGURATION_FILE + fi + if [ $HWRNG_TYPE ]; then + echo "HWRNG_TYPE=$HWRNG_TYPE" >> $CONFIGURATION_FILE + fi + if [ $ENABLE_SOCIAL_KEY_MANAGEMENT ]; then + echo "ENABLE_SOCIAL_KEY_MANAGEMENT=$ENABLE_SOCIAL_KEY_MANAGEMENT" >> $CONFIGURATION_FILE + fi + if [ $WIFI_SSID ]; then + echo "WIFI_SSID=$WIFI_SSID" >> $CONFIGURATION_FILE + fi + if [ $WIFI_INTERFACE ]; then + echo "WIFI_INTERFACE=$WIFI_INTERFACE" >> $CONFIGURATION_FILE + fi + if [ $WIFI_TYPE ]; then + echo "WIFI_TYPE=$WIFI_TYPE" >> $CONFIGURATION_FILE + fi + if [ ${#WIFI_PASSPHRASE} -gt 1 ]; then + echo "WIFI_PASSPHRASE=$WIFI_PASSPHRASE" >> $CONFIGURATION_FILE + fi + if [ $WIFI_HOTSPOT ]; then + echo "WIFI_HOTSPOT=$WIFI_HOTSPOT" >> $CONFIGURATION_FILE + fi + if [ $BATMAN_CELLID ]; then + echo "BATMAN_CELLID=$BATMAN_CELLID" >> $CONFIGURATION_FILE + fi + if [ $WIFI_CHANNEL ]; then + echo "WIFI_CHANNEL=$WIFI_CHANNEL" >> $CONFIGURATION_FILE + fi + if [ $DH_KEYLENGTH ]; then + echo "DH_KEYLENGTH=$DH_KEYLENGTH" >> $CONFIGURATION_FILE + fi + echo "ONION_ONLY=$ONION_ONLY" >> $CONFIGURATION_FILE + + if [ $FRIENDS_MIRRORS_SERVER ]; then + echo "FRIENDS_MIRRORS_SERVER=$FRIENDS_MIRRORS_SERVER" >> $CONFIGURATION_FILE + fi + if [ $FRIENDS_MIRRORS_SSH_PORT ]; then + echo "FRIENDS_MIRRORS_SSH_PORT=$FRIENDS_MIRRORS_SSH_PORT" >> $CONFIGURATION_FILE + fi + if [ $FRIENDS_MIRRORS_PASSWORD ]; then + echo "FRIENDS_MIRRORS_PASSWORD=$FRIENDS_MIRRORS_PASSWORD" >> $CONFIGURATION_FILE + fi + if [ $MY_MIRRORS_PASSWORD ]; then + echo "MY_MIRRORS_PASSWORD=$MY_MIRRORS_PASSWORD" >> $CONFIGURATION_FILE + fi +} + +# test a domain name to see if it's valid +function validate_domain_name { + # count the number of dots in the domain name + dots=${TEST_DOMAIN_NAME//[^.]} + no_of_dots=${#dots} + if (( no_of_dots > 3 )); then + TEST_DOMAIN_NAME="The domain $TEST_DOMAIN_NAME has too many subdomains. It should be of the type w.x.y.z, x.y.z or y.z" fi - if [[ $MY_USERNAME == '-f' ]]; then - echo $'No user account was selected' - exit 8347 + if (( no_of_dots == 0 )); then + TEST_DOMAIN_NAME="The domain $TEST_DOMAIN_NAME has no top level domain. It should be of the type w.x.y.z, x.y.z or y.z" fi - if [[ $MY_USERNAME == 'debian' || $MY_USERNAME == 'fbone' ]]; then - echo $"Don't use the default user account" - exit 9341 +} + +function interactive_gpg_from_remote { + REMOTE_SERVERS_LIST=/home/$MY_USERNAME/keyshareservers.txt + + # get a list of remote servers + ${PROJECT_NAME}-remote -u $MY_USERNAME -l $REMOTE_SERVERS_LIST -t "Remote server" + + if [ ! -f $REMOTE_SERVERS_LIST ]; then + dialog --title $"Encryption keys" --msgbox $'Error obtaining server list' 6 70 + return 1 fi - if [ ! -d /home/$MY_USERNAME ]; then - echo $"The directory /home/$MY_USERNAME does not exist" - exit 6437 + + # check the number of entries in the file + no_of_servers=$(cat $REMOTE_SERVERS_LIST | wc -l) + if (( no_of_servers < 3 )); then + dialog --title $"Encryption keys" \ + --msgbox $'There must be at least three servers to recover the key' 6 70 + return 2 fi - save_configuration_file - if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then - valid_name= - while [ ! $valid_name ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --inputbox $"Your full name (or nick)" 10 30 "$(grep 'MY_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data - sel=$? - case $sel in - 0) possible_name=$(cat $data) - if [ "$possible_name" ]; then - if [ ${#possible_name} -gt 1 ]; then - valid_name="$possible_name" - MY_NAME="$possible_name" - break; - fi - fi - ;; - 1) exit 1;; - 255) exit 1;; - esac - done - save_configuration_file + # try to recover the key from the servers + apt-get -y install libgfshare-bin gnupg + ${PROJECT_NAME}-recoverkey -u $MY_USERNAME -l $REMOTE_SERVERS_LIST + if [ ! "$?" = "0" ]; then + dialog --title $"Encryption keys" --msgbox $'Your key could not be recovered' 6 70 + return 3 fi - if [[ $MINIMAL_INSTALL == "no" ]]; then - if [[ $(grep "INSTALLING_ON_BBB" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then - dialog --title $"Install Target" \ - --backtitle $"Freedombone Configuration" \ - --yesno $"\nAre you installing onto a Beaglebone Black?" 7 60 + dialog --title $"Encryption keys" --msgbox $'Your key has been recovered' 6 70 + + return 0 +} + +function reconstruct_key { + if [ ! -d /home/$MY_USERNAME/.gnupg_fragments ]; then + return + fi + cd /home/$MY_USERNAME/.gnupg_fragments + no_of_shares=$(ls -afq keyshare.asc.* | wc -l) + if (( no_of_shares < 4 )); then + dialog --title $"Encryption keys" --msgbox $'Not enough fragments to reconstruct the key' 6 70 + exit 7348 + fi + apt-get -y install libgfshare-bin gnupg + gfcombine /home/$MY_USERNAME/.gnupg_fragments/keyshare* + if [ ! "$?" = "0" ]; then + dialog --title $"Encryption keys" --msgbox $'Unable to reconstruct the key' 6 70 + exit 7348 + fi + + KEYS_FILE=/home/$MY_USERNAME/.gnupg_fragments/keyshare.asc + if [ ! -f $KEYS_FILE ]; then + dialog --title $"Encryption keys" --msgbox $'Unable to reconstruct the key' 6 70 + fi + + su -c "gpg --allow-secret-key-import --import $KEYS_FILE" - $MY_USERNAME + if [ ! "$?" = "0" ]; then + echo $'Unable to import gpg key' + shred -zu $KEYS_FILE + rm -rf /home/$MY_USERNAME/.tempgnupg + exit 9654 + fi + shred -zu $KEYS_FILE + + dialog --title $"Encryption keys" --msgbox $'Key has been reconstructed' 6 70 +} + +function interactive_gpg_from_usb { + dialog --title $"Encryption keys" \ + --msgbox $'Plug in a USB drive containing a copy of your full key or key fragment' 6 70 + + HOME_DIR=/home/$MY_USERNAME + GPG_LOADING="yes" + SSH_IMPORTED="no" + GPG_CTR=0 + while [[ $GPG_LOADING == "yes" ]] + do + if [[ $INSTALLING_ON_BBB == "yes" ]]; then + GPG_USB_DRIVE='/dev/sda1' + if [ ! -b $GPG_USB_DRIVE ]; then + if (( GPG_CTR > 0 )); then + reconstruct_key + return 0 + fi + dialog --title $"Encryption keys" --msgbox $'No USB drive found' 6 30 + exit 739836 + fi else - dialog --title $"Install Target" \ - --backtitle $"Freedombone Configuration" \ - --defaultno \ - --yesno $"\nAre you installing onto a Beaglebone Black?" 7 60 + GPG_USB_DRIVE='/dev/sdb1' + if [ ! -b $GPG_USB_DRIVE ]; then + GPG_USB_DRIVE='/dev/sdc1' + if [ ! -b $GPG_USB_DRIVE ]; then + GPG_USB_DRIVE='/dev/sdd1' + if [ ! -b $GPG_USB_DRIVE ]; then + if (( GPG_CTR > 0 )); then + reconstruct_key + return 0 + fi + dialog --title $"Encryption keys" --msgbox $'No USB drive found' 6 30 + exit 27852 + fi + fi + fi fi - sel=$? - case $sel in - 0) INSTALLING_ON_BBB="yes";; - 1) INSTALLING_ON_BBB="no";; - 255) exit 1;; - esac - if [[ $INSTALLING_ON_BBB == "yes" ]]; then - USB_DRIVE=/dev/sda1 + + GPG_USB_MOUNT='/mnt/usb' + umount -f $GPG_USB_MOUNT + if [ ! -d $GPG_USB_MOUNT ]; then + mkdir -p $GPG_USB_MOUNT fi - save_configuration_file - fi - if [[ $MINIMAL_INSTALL == "no" ]]; then - if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then - interactive_gpg + if [ -f /dev/mapper/encrypted_usb ]; then + rm -rf /dev/mapper/encrypted_usb + fi + cryptsetup luksClose encrypted_usb + cryptsetup luksOpen $GPG_USB_DRIVE encrypted_usb + if [ "$?" = "0" ]; then + GPG_USB_DRIVE=/dev/mapper/encrypted_usb + fi + mount $GPG_USB_DRIVE $GPG_USB_MOUNT + if [ ! "$?" = "0" ]; then + if (( GPG_CTR > 0 )); then + rm -rf $GPG_USB_MOUNT + reconstruct_key + return 0 + fi + dialog --title $"Encryption keys" \ + --msgbox $"There was a problem mounting the USB drive to $GPG_USB_MOUNT" 6 70 + rm -rf $GPG_USB_MOUNT + exit 74393 + fi - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - 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." - if [[ $(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then - dialog --title $"Social Key Management" \ - --backtitle $"Freedombone Configuration" \ - --yesno "$SOCIAL_KEY_STR" 15 60 - else - dialog --title $"Social Key Management" \ - --backtitle $"Freedombone Configuration" \ - --defaultno \ - --yesno "$SOCIAL_KEY_STR" 15 60 + if [ ! -d $GPG_USB_MOUNT/.gnupg ]; then + if [ ! -d $GPG_USB_MOUNT/.gnupg_fragments ]; then + if (( GPG_CTR > 0 )); then + umount -f $GPG_USB_MOUNT + rm -rf $GPG_USB_MOUNT + reconstruct_key + return 0 + fi + dialog --title $"Encryption keys" \ + --msgbox $"The directory $GPG_USB_MOUNT/.gnupg or $GPG_USB_MOUNT/.gnupg_fragments was not found" 6 70 + umount -f $GPG_USB_MOUNT + rm -rf $GPG_USB_MOUNT + exit 723814 fi - sel=$? - case $sel in - 0) ENABLE_SOCIAL_KEY_MANAGEMENT="yes";; - 255) exit 1;; - esac - save_configuration_file fi - else - # enable for the minimal case - ENABLE_SOCIAL_KEY_MANAGEMENT="yes" - fi - if [[ $MINIMAL_INSTALL == "no" ]]; then - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - if [[ $INSTALLING_ON_BBB != "yes" ]]; then - dialog --backtitle $"Freedombone Configuration" \ - --radiolist $"Type of Random Number Generator:" 10 40 2 \ - 1 Haveged on \ - 2 OneRNG off 2> $data - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - case $(cat $data) in - 2) HWRNG_TYPE="onerng" - dialog --title $"OneRNG Device" \ - --msgbox $"Please ensure that the OneRNG device is disconnected. You can reconnect it later during the installation" 8 60 - ;; - 255) exit 1;; - esac + if [ -d $GPG_USB_MOUNT/.gnupg ]; then + if [ ! -d $HOME_DIR/.gnupg ]; then + mkdir $HOME_DIR/.gnupg + fi + cp -r $GPG_USB_MOUNT/.gnupg/* $HOME_DIR/.gnupg + GPG_LOADING="no" + dialog --title $"Encryption keys" \ + --msgbox $"GPG Keyring loaded to $HOME_DIR" 6 70 else - HWRNG_TYPE="beaglebone" + if [ ! -d $HOME_DIR/.gnupg_fragments ]; then + mkdir $HOME_DIR/.gnupg_fragments + fi + cp -r $GPG_USB_MOUNT/.gnupg_fragments/* $HOME_DIR/.gnupg_fragments + fi + + if [[ $SSH_IMPORTED == "no" ]]; then + if [ -d $GPG_USB_MOUNT/.ssh ]; then + if [ ! -d $HOME_DIR/.ssh ]; then + mkdir $HOME_DIR/.ssh + fi + cp $GPG_USB_MOUNT/.ssh/* $HOME_DIR/.ssh + dialog --title $"Encryption keys" \ + --msgbox $"ssh keys imported" 6 70 + SSH_IMPORTED="yes" + fi fi - save_configuration_file - fi - if [[ $MINIMAL_INSTALL == "no" ]]; then - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --radiolist $"Where to download Debian packages from:" 25 45 49 \ - 1 $"Australia" off \ - 2 $"Austria" off \ - 3 $"Belarus" off \ - 4 $"Belgium" off \ - 5 $"Bosnia and Herzegovina" off \ - 6 $"Brazil" off \ - 7 $"Bulgaria" off \ - 8 $"Canada" off \ - 9 $"Chile" off \ - 10 $"China" off \ - 11 $"Croatia" off \ - 12 $"Czech Republic" off \ - 13 $"Denmark" off \ - 14 $"El Salvador" off \ - 15 $"Estonia" off \ - 16 $"Finland" off \ - 17 $"France 1" off \ - 18 $"France 2" off \ - 19 $"Germany 1" off \ - 20 $"Germany 2" off \ - 21 $"Greece" off \ - 22 $"Hungary" off \ - 23 $"Iceland" off \ - 24 $"Iran" off \ - 25 $"Ireland" off \ - 26 $"Italy" off \ - 27 $"Japan" off \ - 28 $"Korea" off \ - 29 $"Lithuania" off \ - 30 $"Mexico" off \ - 31 $"Netherlands" off \ - 32 $"New Caledonia" off \ - 33 $"New Zealand" off \ - 34 $"Norway" off \ - 35 $"Poland" off \ - 36 $"Portugal" off \ - 37 $"Romania" off \ - 38 $"Russia" off \ - 39 $"Slovakia" off \ - 40 $"Slovenia" off \ - 41 $"Spain" off \ - 42 $"Sweden" off \ - 43 $"Switzerland" off \ - 44 $"Taiwan" off \ - 45 $"Thailand" off \ - 46 $"Turkey" off \ - 47 $"Ukraine" off \ - 48 $"United Kingdom" off \ - 49 $"United States" on 2> $data - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - case $(cat $data) in - 1) DEBIAN_REPO='ftp.au.debian.org';; - 2) DEBIAN_REPO='ftp.at.debian.org';; - 3) DEBIAN_REPO='ftp.by.debian.org';; - 4) DEBIAN_REPO='ftp.be.debian.org';; - 5) DEBIAN_REPO='ftp.ba.debian.org';; - 6) DEBIAN_REPO='ftp.br.debian.org';; - 7) DEBIAN_REPO='ftp.bg.debian.org';; - 8) DEBIAN_REPO='ftp.ca.debian.org';; - 9) DEBIAN_REPO='ftp.cl.debian.org';; - 10) DEBIAN_REPO='ftp.cn.debian.org';; - 11) DEBIAN_REPO='ftp.hr.debian.org';; - 12) DEBIAN_REPO='ftp.cz.debian.org';; - 13) DEBIAN_REPO='ftp.dk.debian.org';; - 14) DEBIAN_REPO='ftp.sv.debian.org';; - 15) DEBIAN_REPO='ftp.ee.debian.org';; - 16) DEBIAN_REPO='ftp.fi.debian.org';; - 17) DEBIAN_REPO='ftp2.fr.debian.org';; - 18) DEBIAN_REPO='ftp.fr.debian.org';; - 19) DEBIAN_REPO='ftp2.de.debian.org';; - 20) DEBIAN_REPO='ftp.de.debian.org';; - 21) DEBIAN_REPO='ftp.gr.debian.org';; - 22) DEBIAN_REPO='ftp.hu.debian.org';; - 23) DEBIAN_REPO='ftp.is.debian.org';; - 24) DEBIAN_REPO='ftp.ir.debian.org';; - 25) DEBIAN_REPO='ftp.ie.debian.org';; - 26) DEBIAN_REPO='ftp.it.debian.org';; - 27) DEBIAN_REPO='ftp.jp.debian.org';; - 28) DEBIAN_REPO='ftp.kr.debian.org';; - 29) DEBIAN_REPO='ftp.lt.debian.org';; - 30) DEBIAN_REPO='ftp.mx.debian.org';; - 31) DEBIAN_REPO='ftp.nl.debian.org';; - 32) DEBIAN_REPO='ftp.nc.debian.org';; - 33) DEBIAN_REPO='ftp.nz.debian.org';; - 34) DEBIAN_REPO='ftp.no.debian.org';; - 35) DEBIAN_REPO='ftp.pl.debian.org';; - 36) DEBIAN_REPO='ftp.pt.debian.org';; - 37) DEBIAN_REPO='ftp.ro.debian.org';; - 38) DEBIAN_REPO='ftp.ru.debian.org';; - 39) DEBIAN_REPO='ftp.sk.debian.org';; - 40) DEBIAN_REPO='ftp.si.debian.org';; - 41) DEBIAN_REPO='ftp.es.debian.org';; - 42) DEBIAN_REPO='ftp.se.debian.org';; - 43) DEBIAN_REPO='ftp.ch.debian.org';; - 44) DEBIAN_REPO='ftp.tw.debian.org';; - 45) DEBIAN_REPO='ftp.th.debian.org';; - 46) DEBIAN_REPO='ftp.tr.debian.org';; - 47) DEBIAN_REPO='ftp.ua.debian.org';; - 48) DEBIAN_REPO='ftp.uk.debian.org';; - 49) DEBIAN_REPO='ftp.us.debian.org';; - 255) exit 1;; - esac - save_configuration_file - else - DEBIAN_REPO='ftp.de.debian.org' - fi + umount -f $GPG_USB_MOUNT + rm -rf $GPG_USB_MOUNT + if [[ $GPG_LOADING == "yes" ]]; then + dialog --title $"Encryption keys" \ + --msgbox $"Now remove the USB drive. Insert the next drive containing a key fragment, or select Ok to finish" 6 70 + fi + GPG_CTR=$((GPG_CTR + 1)) + done +} - if [[ $MINIMAL_INSTALL == "no" && $ONION_ONLY == "no" ]]; then +function interactive_gpg { + GPG_CONFIGURED="no" + while [[ $GPG_CONFIGURED != "yes" ]] + do + GPG_CONFIGURED="yes" data=$(tempfile 2>/dev/null) trap "rm -f $data" 0 1 2 5 15 dialog --backtitle $"Freedombone Configuration" \ - --radiolist $"Pick a domain name service (DNS):" 25 50 16 \ - 1 $"Digital Courage" on \ - 2 $"German Privacy Foundation 1" off \ - 3 $"German Privacy Foundation 2" off \ - 4 $"Chaos Computer Club" off \ - 5 $"ClaraNet" off \ - 6 $"OpenNIC 1" off \ - 7 $"OpenNIC 2" off \ - 8 $"OpenNIC 3" off \ - 9 $"OpenNIC 4" off \ - 10 $"OpenNIC 5" off \ - 11 $"OpenNIC 6" off \ - 12 $"OpenNIC 7" off \ - 13 $"PowerNS" off \ - 14 $"ValiDOM" off \ - 15 $"Freie Unzensierte" off \ - 16 $"Google" off 2> $data + --radiolist $"GPG/PGP keys for your system:" 13 70 3 \ + 1 $"Generate new keys (new user)" on \ + 2 $"Import keys from USB drive/s" off \ + 3 $"Retrieve keys from friends servers" off 2> $data sel=$? case $sel in 1) exit 1;; - 255) exit 1;; + 255) exit 2;; esac case $(cat $data) in - 1) NAMESERVER1='85.214.73.63' - NAMESERVER2='213.73.91.35' - ;; - 2) NAMESERVER1='87.118.100.175' - NAMESERVER2='94.75.228.29' - ;; - 3) NAMESERVER1='85.25.251.254' - NAMESERVER2='2.141.58.13' - ;; - 4) NAMESERVER1='213.73.91.35' - NAMESERVER2='85.214.73.63' - ;; - 5) NAMESERVER1='212.82.225.7' - NAMESERVER2='212.82.226.212' - ;; - 6) NAMESERVER1='58.6.115.42' - NAMESERVER2='58.6.115.43' - ;; - 7) NAMESERVER1='119.31.230.42' - NAMESERVER2='200.252.98.162' - ;; - 8) NAMESERVER1='217.79.186.148' - NAMESERVER2='81.89.98.6' - ;; - 9) NAMESERVER1='78.159.101.37' - NAMESERVER2='203.167.220.153' - ;; - 10) NAMESERVER1='82.229.244.191' - NAMESERVER2='82.229.244.191' - ;; - 11) NAMESERVER1='216.87.84.211' - NAMESERVER2='66.244.95.20' - ;; - 12) NAMESERVER1='207.192.69.155' - NAMESERVER2='72.14.189.120' - ;; - 13) NAMESERVER1='194.145.226.26' - NAMESERVER2='77.220.232.44' - ;; - 14) NAMESERVER1='78.46.89.147' - NAMESERVER2='88.198.75.145' - ;; - 15) NAMESERVER1='85.25.149.144' - NAMESERVER2='87.106.37.196' - ;; - 16) NAMESERVER1='8.8.8.8' - NAMESERVER2='4.4.4.4' - ;; - 255) exit 1;; + 1) if [ -d /home/$MY_USERNAME/.gnupg ]; then + rm -rf /home/$MY_USERNAME/.gnupg + fi + break;; + 2) interactive_gpg_from_usb + break;; + 3) interactive_gpg_from_remote + if [ ! "$?" = "0" ]; then + GPG_CONFIGURED="no" + fi;; esac - save_configuration_file - else - # as defaults for a minimal install process these settings are debatable - NAMESERVER1='85.214.73.63' - NAMESERVER2='213.73.91.35' - fi + done +} + +function set_main_repo { + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone Control Panel" \ + --title $"Main Repository (Mirrors)" \ + --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 \ + $"URL:" 1 1 "$FRIENDS_MIRRORS_SERVER" 1 18 40 18 \ + $"SSH Port:" 2 1 "$FRIENDS_MIRRORS_SSH_PORT" 2 18 10 10000 \ + $"Password:" 3 1 "$FRIENDS_MIRRORS_PASSWORD" 3 18 40 10000 \ + 2> $data + sel=$? + case $sel in + 1) return;; + 255) return;; + esac + new_mirrors_url=$(cat $data | sed -n 1p) + new_mirrors_ssh_port=$(cat $data | sed -n 2p) + new_mirrors_password=$(cat $data | sed -n 3p) - if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then - ${PROJECT_NAME}-wifi --networksinteractive $WIFI_NETWORKS_FILE + if [ ${#new_mirrors_url} -lt 2 ]; then + return + fi + if [ ${#new_mirrors_ssh_port} -lt 1 ]; then + return + fi + if [ ${#new_mirrors_password} -lt 10 ]; then + dialog --title $"Main Repository" \ + --msgbox $'Mirrors password was too short. Should be at least 10 characters.' 6 40 + return fi - if [[ $SYSTEM_TYPE != "$VARIANT_MESH" && $ONION_ONLY == "no" ]]; then + if [[ $new_mirrors_url == *"."* ]]; then + FRIENDS_MIRRORS_SERVER=$new_mirrors_url + FRIENDS_MIRRORS_SSH_PORT=$new_mirrors_ssh_port + FRIENDS_MIRRORS_PASSWORD=$new_mirrors_password - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --radiolist $"Choose Dynamic DNS provider:" 15 40 14 \ - 1 dyndns off \ - 2 freedns on \ - 3 zoneedit off \ - 4 no-ip off \ - 5 easydns off \ - 6 tzo off \ - 7 3322 off \ - 8 dnsomatic off \ - 9 tunnelbroker off \ - 10 dns.he.net off \ - 11 dynsip off \ - 12 sitelutions off \ - 13 dnsexit off \ - 14 changeip off 2> $data - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - case $(cat $data) in - 1) DDNS_PROVIDER="default@dyndns.org";; - 2) DDNS_PROVIDER="default@freedns.afraid.org";; - 3) DDNS_PROVIDER="default@zoneedit.com";; - 4) DDNS_PROVIDER="default@no-ip.com";; - 5) DDNS_PROVIDER="default@easydns.com";; - 6) DDNS_PROVIDER="default@tzo.com";; - 7) DDNS_PROVIDER="dyndns@3322.org";; - 8) DDNS_PROVIDER="default@dnsomatic.com";; - 9) DDNS_PROVIDER="ipv6tb@he.net";; - 10) DDNS_PROVIDER="dyndns@he.net";; - 11) DDNS_PROVIDER="default@dynsip.org";; - 12) DDNS_PROVIDER="default@sitelutions.com";; - 13) DDNS_PROVIDER="default@dnsexit.com";; - 14) DDNS_PROVIDER="default@changeip.com";; - 255) exit 1;; - esac - save_configuration_file + dialog --title $"Main Repository" \ + --msgbox $"Main repository set to $FRIENDS_MIRRORS_SERVER" 6 60 + fi + save_configuration_file +} - valid_ddns_username= - while [ ! $valid_ddns_username ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --inputbox $"Dynamic DNS provider username" 10 30 "$(grep 'DDNS_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data - sel=$? - case $sel in - 0) possible_username=$(cat $data) - if [ "$possible_username" ]; then - if [ ${#possible_username} -gt 1 ]; then - valid_ddns_username=$(cat $data) - DDNS_USERNAME=$valid_ddns_username - break; - fi - fi - ;; - 1) exit 1;; - 255) exit 1;; - esac - done - save_configuration_file +function interactive_select_language { + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle $"Freedombone Configuration" \ + --radiolist $"Select your language:" 26 40 24 \ + 1 $"Afrikaans" off \ + 2 $"Albanian" off \ + 3 $"Arabic" off \ + 4 $"Basque" off \ + 5 $"Belarusian" off \ + 6 $"Bosnian" off \ + 7 $"Bulgarian" off \ + 8 $"Catalan" off \ + 9 $"Croatian" off \ + 10 $"Chinese (Simplified)" off \ + 11 $"Chinese (Traditional)" off \ + 12 $"Czech" off \ + 13 $"Danish" off \ + 14 $"Dutch" off \ + 15 $"English" on \ + 16 $"English (US)" off \ + 17 $"Estonian" off \ + 18 $"Farsi" off \ + 19 $"Filipino" off \ + 20 $"Finnish" off \ + 21 $"French" off \ + 22 $"French (Canada)" off \ + 23 $"Gaelic" off \ + 24 $"Gallego" off \ + 25 $"Georgian" off \ + 26 $"German" off \ + 27 $"German (Personal)" off \ + 28 $"Greek" off \ + 29 $"Gujarati" off \ + 30 $"Hebrew" off \ + 31 $"Hindi" off \ + 32 $"Hungarian" off \ + 33 $"Icelandic" off \ + 34 $"Indonesian" off \ + 35 $"Italian" off \ + 36 $"Japanese" off \ + 37 $"Kannada" off \ + 38 $"Khmer" off \ + 39 $"Korean" off \ + 40 $"Lao" off \ + 41 $"Lithuanian" off \ + 42 $"Latvian" off \ + 43 $"Malayalam" off \ + 44 $"Malaysian" off \ + 45 $"Maori (Ngai Tahu)" off \ + 46 $"Maori (Waikoto Uni)" off \ + 47 $"Mongolian" off \ + 48 $"Norwegian" off \ + 49 $"Norwegian (Primary)" off \ + 50 $"Nynorsk" off \ + 51 $"Polish" off \ + 52 $"Portuguese" off \ + 53 $"Portuguese (Brazil)" off \ + 54 $"Romanian" off \ + 55 $"Russian" off \ + 56 $"Samoan" off \ + 57 $"Serbian" off \ + 58 $"Slovak" off \ + 59 $"Slovenian" off \ + 60 $"Somali" off \ + 61 $"Spanish (International)" off \ + 62 $"Swedish" off \ + 63 $"Tagalog" off \ + 64 $"Tamil" off \ + 65 $"Thai" off \ + 66 $"Turkish" off \ + 67 $"Ukrainian" off \ + 68 $"Vietnamese" off 2> $data + sel=$? + case $sel in + 1) exit 1;; + 255) exit 1;; + esac + case $(cat $data) in + 1) DEFAULT_LANGUAGE='af_ZA.UTF-8';; + 2) DEFAULT_LANGUAGE='sq_AL.UTF-8';; + 3) DEFAULT_LANGUAGE='ar_SA.UTF-8';; + 4) DEFAULT_LANGUAGE='eu_ES.UTF-8';; + 5) DEFAULT_LANGUAGE='be_BY.UTF-8';; + 6) DEFAULT_LANGUAGE='bs_BA.UTF-8';; + 7) DEFAULT_LANGUAGE='bg_BG.UTF-8';; + 8) DEFAULT_LANGUAGE='ca_ES.UTF-8';; + 9) DEFAULT_LANGUAGE='hr_HR.UTF-8';; + 10) DEFAULT_LANGUAGE='zh_CN.UTF-8';; + 11) DEFAULT_LANGUAGE='zh_TW.UTF-8';; + 12) DEFAULT_LANGUAGE='cs_CZ.UTF-8';; + 13) DEFAULT_LANGUAGE='da_DK.UTF-8';; + 14) DEFAULT_LANGUAGE='nl_NL.UTF-8';; + 15) DEFAULT_LANGUAGE='en.UTF-8';; + 16) DEFAULT_LANGUAGE='en_us.UTF-8';; + 17) DEFAULT_LANGUAGE='et_EE.UTF-8';; + 18) DEFAULT_LANGUAGE='fa_IR.UTF-8';; + 19) DEFAULT_LANGUAGE='ph_PH.UTF-8';; + 20) DEFAULT_LANGUAGE='fi_FI.UTF-8';; + 21) DEFAULT_LANGUAGE='fr_FR.UTF-8';; + 22) DEFAULT_LANGUAGE='fr_CA.UTF-8';; + 23) DEFAULT_LANGUAGE='ga.UTF-8';; + 24) DEFAULT_LANGUAGE='l_ES.UTF-8';; + 25) DEFAULT_LANGUAGE='ka_GE.UTF-8';; + 26) DEFAULT_LANGUAGE='de_DE.UTF-8';; + 27) DEFAULT_LANGUAGE='de_DE.UTF-8';; + 28) DEFAULT_LANGUAGE='el_GR.UTF-8';; + 29) DEFAULT_LANGUAGE='gu.UTF-8';; + 30) DEFAULT_LANGUAGE='he_IL.utf8';; + 31) DEFAULT_LANGUAGE='hi_IN.UTF-8';; + 32) DEFAULT_LANGUAGE='hu.UTF-8';; + 33) DEFAULT_LANGUAGE='is_IS.UTF-8';; + 34) DEFAULT_LANGUAGE='id_ID.UTF-8';; + 35) DEFAULT_LANGUAGE='it_IT.UTF-8';; + 36) DEFAULT_LANGUAGE='ja_JP.UTF-8';; + 37) DEFAULT_LANGUAGE='kn_IN.UTF-8';; + 38) DEFAULT_LANGUAGE='km_KH.UTF-8';; + 39) DEFAULT_LANGUAGE='ko_KR.UTF-8';; + 40) DEFAULT_LANGUAGE='lo_LA.UTF-8';; + 41) DEFAULT_LANGUAGE='lt_LT.UTF-8';; + 42) DEFAULT_LANGUAGE='lat.UTF-8';; + 43) DEFAULT_LANGUAGE='ml_IN.UTF-8';; + 44) DEFAULT_LANGUAGE='ms_MY.UTF-8';; + 45) DEFAULT_LANGUAGE='mi_NZ.UTF-8';; + 46) DEFAULT_LANGUAGE='mi_NZ.UTF-8';; + 47) DEFAULT_LANGUAGE='mn.UTF-8';; + 48) DEFAULT_LANGUAGE='no_NO.UTF-8';; + 49) DEFAULT_LANGUAGE='no_NO.UTF-8';; + 50) DEFAULT_LANGUAGE='nn_NO.UTF-8';; + 51) DEFAULT_LANGUAGE='pl.UTF-8';; + 52) DEFAULT_LANGUAGE='pt_PT.UTF-8';; + 53) DEFAULT_LANGUAGE='pt_BR.UTF-8';; + 54) DEFAULT_LANGUAGE='ro_RO.UTF-8';; + 55) DEFAULT_LANGUAGE='ru_RU.UTF-8';; + 56) DEFAULT_LANGUAGE='mi_NZ.UTF-8';; + 57) DEFAULT_LANGUAGE='sr_CS.UTF-8';; + 58) DEFAULT_LANGUAGE='sk_SK.UTF-8';; + 59) DEFAULT_LANGUAGE='sl_SI.UTF-8';; + 60) DEFAULT_LANGUAGE='so_SO.UTF-8';; + 61) DEFAULT_LANGUAGE='es_ES.UTF-8';; + 62) DEFAULT_LANGUAGE='sv_SE.UTF-8';; + 63) DEFAULT_LANGUAGE='tl.UTF-8';; + 64) DEFAULT_LANGUAGE='ta_IN.UTF-8';; + 65) DEFAULT_LANGUAGE='th_TH.UTF-8';; + 66) DEFAULT_LANGUAGE='tr_TR.UTF-8';; + 67) DEFAULT_LANGUAGE='uk_UA.UTF-8';; + 68) DEFAULT_LANGUAGE='vi_VN.UTF-8';; + esac + save_configuration_file - valid_ddns_password= - while [ ! $valid_ddns_password ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --clear \ - --insecure \ - --passwordbox $"Dynamic DNS provider password" 10 30 "$(grep 'DDNS_PASSWORD' temp.cfg | awk -F '=' '{print $2}')" 2> $data - sel=$? - case $sel in - 0) possible_password=$(cat $data) - if [ "$possible_password" ]; then - if [ ${#possible_password} -gt 1 ]; then - valid_ddns_password=$(cat $data) - DDNS_PASSWORD=$valid_ddns_password - break; - fi - fi - ;; - 1) exit 1;; - 255) exit 1;; - esac - if [ ${#DDNS_PASSWORD} -lt $MINIMUM_PASSWORD_LENGTH ]; then - 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 - DDNS_PASSWORD="" - fi - done - save_configuration_file - fi + update-locale LANG=${DEFAULT_LANGUAGE} + update-locale LANGUAGE=${DEFAULT_LANGUAGE} + update-locale LC_MESSAGES=${DEFAULT_LANGUAGE} + update-locale LC_ALL=${DEFAULT_LANGUAGE} + update-locale LC_CTYPE=${DEFAULT_LANGUAGE} +} - if [[ $MINIMAL_INSTALL == "no" && $ONION_ONLY == "no" ]]; then - SET_STATIC_IP="no" - dialog --title $"Static local IP address" \ - --backtitle $"Freedombone Configuration" \ - --defaultno \ - --yesno $"\nDo you want to set a static local IP address for this system?\n\nFor example, 192.168.1.10" 10 60 - sel=$? - case $sel in - 0) SET_STATIC_IP="yes";; - 255) exit 1;; - esac +function select_user { + SELECTED_USERNAME= - if [[ $SET_STATIC_IP == "yes" ]]; then - if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then - LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep 'LOCAL_NETWORK_STATIC_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}') - if [ ! $LOCAL_NETWORK_STATIC_IP_ADDRESS ]; then - LOCAL_NETWORK_STATIC_IP_ADDRESS='192.168..' - fi - fi - if [ ! $ROUTER_IP_ADDRESS ]; then - ROUTER_IP_ADDRESS=$(grep 'ROUTER_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}') - if [ ! $ROUTER_IP_ADDRESS ]; then - ROUTER_IP_ADDRESS='192.168..' - fi - fi - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --title $"Local Network Configuration" \ - --form $"\nPlease enter the IP addresses:" 11 55 3 \ - $"This system:" 1 1 "$LOCAL_NETWORK_STATIC_IP_ADDRESS" 1 16 16 15 \ - $"Internet router:" 2 1 "$ROUTER_IP_ADDRESS" 2 16 16 15 \ - 2> $data - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - LOCAL_NETWORK_STATIC_IP_ADDRESS=$(cat $data | sed -n 1p) - ROUTER_IP_ADDRESS=$(cat $data | sed -n 2p) - save_configuration_file - fi - fi + users_array=($(ls /home)) - if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - if [[ $ONION_ONLY != "no" ]]; then - WIKI_TITLE='My Wiki' - WIKI_DOMAIN_NAME='wiki.local' - else - WIKI_DETAILS_COMPLETE= - while [ ! $WIKI_DETAILS_COMPLETE ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - dialog --backtitle $"Freedombone Configuration" \ - --title $"Wiki Configuration" \ - --form $"\nPlease enter your wiki details:" 11 55 4 \ - $"Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \ - $"Code:" 3 1 "$(grep 'WIKI_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 33 255 \ - 2> $data - else - dialog --backtitle $"Freedombone Configuration" \ - --title $"Wiki Configuration" \ - --form $"\nPlease enter your wiki details:" 11 55 3 \ - $"Title:" 1 1 "$(grep 'WIKI_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \ - 2> $data - fi - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - WIKI_TITLE=$(cat $data | sed -n 1p) - WIKI_DOMAIN_NAME=$(cat $data | sed -n 2p) - if [ $WIKI_DOMAIN_NAME ]; then - TEST_DOMAIN_NAME=$WIKI_DOMAIN_NAME - validate_domain_name - if [[ $TEST_DOMAIN_NAME != $WIKI_DOMAIN_NAME ]]; then - WIKI_DOMAIN_NAME= - dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 - else - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - WIKI_CODE=$(cat $data | sed -n 3p) - validate_freedns_code "$WIKI_CODE" - if [ ! $VALID_CODE ]; then - WIKI_DOMAIN_NAME= - fi - fi - fi - fi - if [ $WIKI_DOMAIN_NAME ]; then - WIKI_DETAILS_COMPLETE="yes" - fi - done - fi - save_configuration_file - fi + delete=(mirrors git) + for del in ${delete[@]} + do + users_array=(${users_array[@]/$del}) + done - if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - if [[ $ONION_ONLY != "no" ]]; then - MY_BLOG_TITLE='My Blog' - FULLBLOG_DOMAIN_NAME='blog.local' - else - FULLBLOG_DETAILS_COMPLETE= - while [ ! $FULLBLOG_DETAILS_COMPLETE ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - dialog --backtitle $"Freedombone Configuration" \ - --title $"Blog Configuration" \ - --form $"\nPlease enter your blog details:" 11 55 4 \ - $"Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \ - $"Code:" 3 1 "$(grep 'FULLBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 3 16 33 255 \ - 2> $data - else - dialog --backtitle $"Freedombone Configuration" \ - --title $"Blog Configuration" \ - --form $"\nPlease enter your blog details:" 11 55 3 \ - $"Title:" 1 1 "$(grep 'MY_BLOG_TITLE' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 40 \ - 2> $data - fi - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - MY_BLOG_TITLE=$(cat $data | sed -n 1p) - FULLBLOG_DOMAIN_NAME=$(cat $data | sed -n 2p) - if [ $FULLBLOG_DOMAIN_NAME ]; then - if [[ $FULLBLOG_DOMAIN_NAME == "$WIKI_DOMAIN_NAME" ]]; then - FULLBLOG_DOMAIN_NAME="" - fi - TEST_DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME - validate_domain_name - if [[ $TEST_DOMAIN_NAME != $FULLBLOG_DOMAIN_NAME ]]; then - FULLBLOG_DOMAIN_NAME= - dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 - else - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - FULLBLOG_CODE=$(cat $data | sed -n 3p) - validate_freedns_code "$FULLBLOG_CODE" - if [ ! $VALID_CODE ]; then - FULLBLOG_DOMAIN_NAME= - fi - fi - fi - fi - if [ $FULLBLOG_DOMAIN_NAME ]; then - FULLBLOG_DETAILS_COMPLETE="yes" - fi - done - fi - save_configuration_file - fi + i=0 + W=() + name=() + for u in ${users_array[@]} + do + i=$((i+1)) + W+=($i "$u") + name+=("$u") + done - if [[ $MEDIAGOBLIN_ENABLED == 'yes' ]]; then - if [[ $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - if [[ $ONION_ONLY != "no" ]]; then - MEDIAGOBLIN_DOMAIN_NAME='media.local' - else - MEDIAGOBLIN_DETAILS_COMPLETE= - while [ ! $MEDIAGOBLIN_DETAILS_COMPLETE ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - dialog --backtitle $"Freedombone Configuration" \ - --title $"Mediagoblin Configuration" \ - --form $"\nPlease enter your Mediagoblin details, or just select Ok if you don't need a Mediagoblin site:" 11 55 2 \ - $"Domain:" 1 1 "$(grep 'MEDIAGOBLIN_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Code:" 2 1 "$(grep 'MEDIAGOBLIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \ - 2> $data - else - dialog --backtitle $"Freedombone Configuration" \ - --title $"Mediagoblin Configuration" \ - --form $"\nPlease enter your Mediagoblin details, or just select Ok if you don't need a Mediagoblin site:" 11 55 2 \ - $"Domain:" 1 1 "$(grep 'MEDIAGOBLIN_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - 2> $data - fi - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - MEDIAGOBLIN_DOMAIN_NAME=$(cat $data | sed -n 1p) - if [ $MEDIAGOBLIN_DOMAIN_NAME ]; then - TEST_DOMAIN_NAME=$MEDIAGOBLIN_DOMAIN_NAME - validate_domain_name - if [[ $TEST_DOMAIN_NAME != $MEDIAGOBLIN_DOMAIN_NAME ]]; then - MEDIAGOBLIN_DOMAIN_NAME='invalid' - dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 - else - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - MEDIAGOBLIN_CODE=$(cat $data | sed -n 2p) - validate_freedns_code "$MEDIAGOBLIN_CODE" - if [ ! $VALID_CODE ]; then - MEDIAGOBLIN_DOMAIN_NAME='invalid' - fi - fi - fi - fi - if [ $MEDIAGOBLIN_DOMAIN_NAME ]; then - if [[ $MEDIAGOBLIN_DOMAIN_NAME == 'invalid' ]]; then - MEDIAGOBLIN_DOMAIN_NAME= - else - MEDIAGOBLIN_DETAILS_COMPLETE="yes" - fi - fi - done - fi - save_configuration_file - fi - MEDIA_SERVER_ENABLED='no' - fi + 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) - if [[ $MEDIA_SERVER_ENABLED == 'yes' ]]; then - if [[ $SYSTEM_TYPE == "$VARIANT_MEDIA" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - if [[ $ONION_ONLY != "no" ]]; then - MEDIA_SERVER_DOMAIN_NAME='media.local' - else - MEDIA_SERVER_DETAILS_COMPLETE= - while [ ! $MEDIA_SERVER_DETAILS_COMPLETE ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - dialog --backtitle $"Freedombone Configuration" \ - --title $"Media Server Configuration" \ - --form $"\nPlease enter your Media Server details, or just select Ok if you don't need a Media Server site:" 11 55 2 \ - $"Domain:" 1 1 "$(grep 'MEDIA_SERVER_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Code:" 2 1 "$(grep 'MEDIA_SERVER_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \ - 2> $data - else - dialog --backtitle $"Freedombone Configuration" \ - --title $"Media Server Configuration" \ - --form $"\nPlease enter your Media Server details, or just select Ok if you don't need a Media Server site:" 11 55 2 \ - $"Domain:" 1 1 "$(grep 'MEDIA_SERVER_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - 2> $data - fi - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - MEDIA_SERVER_DOMAIN_NAME=$(cat $data | sed -n 1p) - if [ $MEDIA_SERVER_DOMAIN_NAME ]; then - TEST_DOMAIN_NAME=$MEDIA_SERVER_DOMAIN_NAME - validate_domain_name - if [[ $TEST_DOMAIN_NAME != $MEDIA_SERVER_DOMAIN_NAME ]]; then - MEDIA_SERVER_DOMAIN_NAME='invalid' - dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 - else - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - MEDIA_SERVER_CODE=$(cat $data | sed -n 2p) - validate_freedns_code "$MEDIA_SERVER_CODE" - if [ ! $VALID_CODE ]; then - MEDIA_SERVER_DOMAIN_NAME='invalid' - fi - fi - fi - fi - if [ $MEDIA_SERVER_DOMAIN_NAME ]; then - if [[ $MEDIA_SERVER_DOMAIN_NAME == 'invalid' ]]; then - MEDIA_SERVER_DOMAIN_NAME= - else - MEDIA_SERVER_DETAILS_COMPLETE="yes" - fi - fi - done - fi - save_configuration_file - fi + if [ $? -eq 0 ]; then + SELECTED_USERNAME="${name[$((user_index-1))]}" fi +} - if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - if [[ $ONION_ONLY != "no" ]]; then - HUBZILLA_DOMAIN_NAME='hubzilla.local' - else - HUBZILLA_DETAILS_COMPLETE= - while [ ! $HUBZILLA_DETAILS_COMPLETE ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - dialog --backtitle $"Freedombone Configuration" \ - --title $"Hubzilla Configuration" \ - --form $"\nPlease enter your Hubzilla details.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 14 55 3 \ - $"Domain:" 1 1 "$(grep 'HUBZILLA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Code:" 2 1 "$(grep 'HUBZILLA_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \ - 2> $data - else - dialog --backtitle $"Freedombone Configuration" \ - --title $"Hubzilla Configuration" \ - --form $"\nPlease enter your Hubzilla details\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 11 55 3 \ - $"Domain:" 1 1 "$(grep 'HUBZILLA_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - 2> $data - fi - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - HUBZILLA_DOMAIN_NAME=$(cat $data | sed -n 1p) - if [ $HUBZILLA_DOMAIN_NAME ]; then - TEST_DOMAIN_NAME=$HUBZILLA_DOMAIN_NAME - validate_domain_name - if [[ $TEST_DOMAIN_NAME != $HUBZILLA_DOMAIN_NAME ]]; then - HUBZILLA_DOMAIN_NAME= - dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 - else - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - HUBZILLA_CODE=$(cat $data | sed -n 2p) - validate_freedns_code "$HUBZILLA_CODE" - if [ ! $VALID_CODE ]; then - HUBZILLA_DOMAIN_NAME= - fi - fi - fi - fi - if [ $HUBZILLA_DOMAIN_NAME ]; then - HUBZILLA_DETAILS_COMPLETE="yes" - fi - done - fi - save_configuration_file +function interactive_config { + # create a temporary copy of the configuration file + # which can be used to pre-populate selections + if [ -f $CONFIGURATION_FILE ]; then + cp $CONFIGURATION_FILE temp.cfg fi - if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - if [[ $ONION_ONLY != "no" ]]; then - MICROBLOG_DOMAIN_NAME='microblog.local' - else - MICROBLOG_DETAILS_COMPLETE= - while [ ! $MICROBLOG_DETAILS_COMPLETE ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - dialog --backtitle $"Freedombone Configuration" \ - --title $"Microblog Configuration" \ - --form $"\nPlease enter your Microblog details. Welcome message and background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 4 \ - $"Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \ - $"Welcome Message:" 2 1 "$(grep '$MICROBLOG_WELCOME_MESSAGE' temp.cfg | awk -F '=' '{print $2}')" 2 25 255 255 \ - $"Background image URL:" 3 1 "$(grep '$MICROBLOG_BACKGROUND_IMAGE_URL' temp.cfg | awk -F '=' '{print $2}')" 3 25 255 255 \ - $"Code:" 4 1 "$(grep 'MICROBLOG_CODE' temp.cfg | awk -F '=' '{print $2}')" 4 25 33 255 \ - 2> $data - else - dialog --backtitle $"Freedombone Configuration" \ - --title $"Microblog Configuration" \ - --form $"\nPlease enter your Microblog details. Welcome message and background image URL can be left blank.\n\nIMPORTANT: This should be a domain name which is supported by Let's Encrypt:" 16 65 4 \ - $"Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 25 33 40 \ - $"Welcome Message:" 2 1 "$(grep '$MICROBLOG_WELCOME_MESSAGE' temp.cfg | awk -F '=' '{print $2}')" 2 25 255 255 \ - $"Background image URL:" 3 1 "$(grep '$MICROBLOG_BACKGROUND_IMAGE_URL' temp.cfg | awk -F '=' '{print $2}')" 3 25 255 255 \ - 2> $data - fi - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - MICROBLOG_DOMAIN_NAME=$(cat $data | sed -n 1p) - welcome_msg=$(cat $data | sed -n 2p) - if [ ${#welcome_msg} -gt 1 ]; then - MICROBLOG_WELCOME_MESSAGE=$welcome_msg - fi - img_url=$(cat $data | sed -n 3p) - if [ ${#img_url} -gt 1 ]; then - MICROBLOG_BACKGROUND_IMAGE_URL=$img_url - fi - if [ $MICROBLOG_DOMAIN_NAME ]; then - if [[ $MICROBLOG_DOMAIN_NAME == "$HUBZILLA_DOMAIN_NAME" ]]; then - MICROBLOG_DOMAIN_NAME="" - fi - TEST_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME - validate_domain_name - if [[ $TEST_DOMAIN_NAME != $MICROBLOG_DOMAIN_NAME ]]; then - MICROBLOG_DOMAIN_NAME= - dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 - else - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - MICROBLOG_CODE=$(cat $data | sed -n 4p) - validate_freedns_code "$MICROBLOG_CODE" - if [ ! $VALID_CODE ]; then - MICROBLOG_DOMAIN_NAME= - fi - fi - fi - fi - if [ $MICROBLOG_DOMAIN_NAME ]; then - MICROBLOG_DETAILS_COMPLETE="yes" - fi - done - fi - save_configuration_file - fi + interactive_select_language - if [[ $SYSTEM_TYPE == "$VARIANT_DEVELOPER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - if [[ $ONION_ONLY != "no" ]]; then - GIT_DOMAIN_NAME='git.local' - else - DEVELOPER_DETAILS_COMPLETE= - while [ ! $DEVELOPER_DETAILS_COMPLETE ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - dialog --backtitle $"Freedombone Configuration" \ - --title $"Developer Configuration" \ - --form $"\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 3 \ - $"Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Code:" 2 1 "$(grep 'GIT_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \ - 2> $data - else - dialog --backtitle $"Freedombone Configuration" \ - --title $"Developer Configuration" \ - --form $"\nPlease enter your Git hosting site details.\nIf You don't need developer tools then just select Ok" 11 55 2 \ - $"Domain:" 1 1 "$(grep 'GIT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - 2> $data - fi - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - GIT_DOMAIN_NAME=$(cat $data | sed -n 1p) - if [ $GIT_DOMAIN_NAME ]; then - TEST_DOMAIN_NAME=$GIT_DOMAIN_NAME - validate_domain_name - if [[ $TEST_DOMAIN_NAME != $GIT_DOMAIN_NAME ]]; then - GIT_DOMAIN_NAME= - dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 - else - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - GIT_CODE=$(cat $data | sed -n 2p) - validate_freedns_code "$GIT_CODE" - if [ ! $VALID_CODE ]; then - GIT_DOMAIN_NAME= - fi - fi - fi - else - DEVELOPER_DETAILS_COMPLETE="yes" - fi - if [ $GIT_DOMAIN_NAME ]; then - DEVELOPER_DETAILS_COMPLETE="yes" - fi - done - fi - save_configuration_file + if [[ $ONION_ONLY == "no" ]]; then + 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." + else + 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." fi - if [[ $SYSTEM_TYPE != "$VARIANT_MESH" ]]; then - if [[ $ONION_ONLY != "no" ]]; then - DEFAULT_DOMAIN_NAME="${PROJECT_NAME}.local" - else - DEFAULT_DOMAIN_DETAILS_COMPLETE= - while [ ! $DEFAULT_DOMAIN_DETAILS_COMPLETE ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - if [[ $DDNS_PROVIDER == "default@freedns.afraid.org" ]]; then - dialog --backtitle $"Freedombone Configuration" \ - --title $"Your main domain name" \ - --form $"\nWhich domain name should your email/XMPP/IRC/Mumble be associated with?" 11 55 3 \ - $"Domain:" 1 1 "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 33 40 \ - $"Code:" 2 1 "$(grep 'DEFAULT_DOMAIN_CODE' temp.cfg | awk -F '=' '{print $2}')" 2 16 33 255 \ - 2> $data - sel=$? - case $sel in - 1) exit 1;; - 255) exit 1;; - esac - DEFAULT_DOMAIN_NAME=$(cat $data | sed -n 1p) - DEFAULT_DOMAIN_CODE=$(cat $data | sed -n 2p) - if [ $DEFAULT_DOMAIN_NAME ]; then - validate_freedns_code "$DEFAULT_DOMAIN_CODE" - if [ ! $VALID_CODE ]; then - DEFAULT_DOMAIN_NAME= - fi - fi - else - dialog --backtitle $"Freedombone Configuration" \ - --inputbox $"Which domain name should your email/XMPP/IRC/Mumble be associated with?" 10 45 \ - "$(grep 'DEFAULT_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data - sel=$? - case $sel in - 0) DEFAULT_DOMAIN_NAME=$(cat $data);; - 1) exit 1;; - 255) exit 1;; - esac - fi - if [ $DEFAULT_DOMAIN_NAME ]; then - TEST_DOMAIN_NAME=$DEFAULT_DOMAIN_NAME - validate_domain_name - if [[ $TEST_DOMAIN_NAME != $DEFAULT_DOMAIN_NAME ]]; then - DEFAULT_DOMAIN_NAME= - dialog --title $"Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 - else - DEFAULT_DOMAIN_DETAILS_COMPLETE="yes" - fi - fi - done - fi - save_configuration_file - - if [[ $ONION_ONLY != "no" ]]; then - EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME - else - while [ ${#MY_EMAIL_ADDRESS} -lt 5 ] - do - EMAIL_ADDRESS=$(grep 'MY_EMAIL_ADDRESS' temp.cfg | awk -F '=' '{print $2}') - if [ ! $EMAIL_ADDRESS ]; then - EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME - fi - if [ ${#MY_EMAIL_ADDRESS} -lt 5 ]; then - EMAIL_ADDRESS=$MY_USERNAME@$DEFAULT_DOMAIN_NAME - fi + dialog --title $"Freedombone" --msgbox "$INITIAL_MESSAGE" 15 50 - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle $"Freedombone Configuration" \ - --inputbox $"Your email address" 10 30 "$EMAIL_ADDRESS" 2> $data - sel=$? - case $sel in - 0) MY_EMAIL_ADDRESS=$(cat $data);; - 1) exit 1;; - 255) exit 1;; - esac - done - fi - save_configuration_file - fi + choose_system_variant + set_main_repo + choose_username + choose_full_name + choose_beaglebone_options + choose_social_key_management + choose_rng + choose_debian_repo + choose_dns + ${PROJECT_NAME}-wifi --networksinteractive $WIFI_NETWORKS_FILE + choose_dynamic_dns + choose_static_ip + choose_default_domain_name + choose_email_address + install_apps interactive # delete the temporary configuration file if [ -f temp.cfg ]; then @@ -2024,174 +1518,43 @@ function read_config { CONFIGURATION_FILE='freedombone.cfg' fi - if [ -f $CONFIGURATION_FILE ]; then - if grep -q "FRIENDS_MIRRORS_SERVER" $CONFIGURATION_FILE; then - FRIENDS_MIRRORS_SERVER=$(grep "FRIENDS_MIRRORS_SERVER" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "FRIENDS_MIRRORS_SSH_PORT" $CONFIGURATION_FILE; then - FRIENDS_MIRRORS_SSH_PORT=$(grep "FRIENDS_MIRRORS_SSH_PORT" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "FRIENDS_MIRRORS_PASSWORD" $CONFIGURATION_FILE; then - FRIENDS_MIRRORS_PASSWORD=$(grep "FRIENDS_MIRRORS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE; then - ENABLE_SOCIAL_KEY_MANAGEMENT=$(grep "ENABLE_SOCIAL_KEY_MANAGEMENT" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "GIT_DOMAIN_NAME" $CONFIGURATION_FILE; then - GIT_DOMAIN_NAME=$(grep "GIT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "GIT_CODE" $CONFIGURATION_FILE; then - GIT_CODE=$(grep "GIT_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MY_USERNAME" $CONFIGURATION_FILE; then - MY_USERNAME=$(grep "MY_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "DOMAIN_NAME" $CONFIGURATION_FILE; then - # for backwards compatability - DEFAULT_DOMAIN_NAME=$(grep "DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE; then - DEFAULT_DOMAIN_NAME=$(grep "DEFAULT_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "DEFAULT_DOMAIN_CODE" $CONFIGURATION_FILE; then - DEFAULT_DOMAIN_CODE=$(grep "DEFAULT_DOMAIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "NAMESERVER1" $CONFIGURATION_FILE; then - NAMESERVER1=$(grep "NAMESERVER1" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "NAMESERVER2" $CONFIGURATION_FILE; then - NAMESERVER2=$(grep "NAMESERVER2" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "DEBIAN_REPO" $CONFIGURATION_FILE; then - DEBIAN_REPO=$(grep "DEBIAN_REPO" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - 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." - fi - if grep -q "DDNS_PROVIDER" $CONFIGURATION_FILE; then - DDNS_PROVIDER=$(grep "DDNS_PROVIDER" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "DDNS_USERNAME" $CONFIGURATION_FILE; then - DDNS_USERNAME=$(grep "DDNS_USERNAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "DDNS_PASSWORD" $CONFIGURATION_FILE; then - DDNS_PASSWORD=$(grep "DDNS_PASSWORD" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE; then - LOCAL_NETWORK_STATIC_IP_ADDRESS=$(grep "LOCAL_NETWORK_STATIC_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "ENABLE_CJDNS" $CONFIGURATION_FILE; then - ENABLE_CJDNS=$(grep "ENABLE_CJDNS" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "ENABLE_BATMAN" $CONFIGURATION_FILE; then - ENABLE_BATMAN=$(grep "ENABLE_BATMAN" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "ENABLE_BABEL" $CONFIGURATION_FILE; then - ENABLE_BABEL=$(grep "ENABLE_BABEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE; then - ROUTER_IP_ADDRESS=$(grep "ROUTER_IP_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "WIKI_TITLE" $CONFIGURATION_FILE; then - WIKI_TITLE=$(grep "WIKI_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MY_NAME" $CONFIGURATION_FILE; then - MY_NAME=$(grep "MY_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE; then - MY_EMAIL_ADDRESS=$(grep "MY_EMAIL_ADDRESS" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "INSTALLING_ON_BBB" $CONFIGURATION_FILE; then - INSTALLING_ON_BBB=$(grep "INSTALLING_ON_BBB" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "USB_DRIVE" $CONFIGURATION_FILE; then - USB_DRIVE=$(grep "USB_DRIVE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE; then - PUBLIC_MAILING_LIST=$(grep "PUBLIC_MAILING_LIST" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then - MICROBLOG_DOMAIN_NAME=$(grep "MICROBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MICROBLOG_CODE" $CONFIGURATION_FILE; then - MICROBLOG_CODE=$(grep "MICROBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MICROBLOG_WELCOME_MESSAGE" $CONFIGURATION_FILE; then - MICROBLOG_WELCOME_MESSAGE=$(grep "MICROBLOG_WELCOME_MESSAGE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MICROBLOG_BACKGROUND_IMAGE_URL" $CONFIGURATION_FILE; then - MICROBLOG_BACKGROUND_IMAGE_URL=$(grep "MICROBLOG_BACKGROUND_IMAGE_URL" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "HUBZILLA_DOMAIN_NAME" $CONFIGURATION_FILE; then - HUBZILLA_DOMAIN_NAME=$(grep "HUBZILLA_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "HUBZILLA_CODE" $CONFIGURATION_FILE; then - HUBZILLA_CODE=$(grep "HUBZILLA_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE; then - MEDIAGOBLIN_DOMAIN_NAME=$(grep "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - MEDIAGOBLIN_ENABLED='yes' - fi - if grep -q "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE; then - MEDIAGOBLIN_CODE=$(grep "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MEDIA_SERVER_DOMAIN_NAME" $CONFIGURATION_FILE; then - MEDIA_SERVER_DOMAIN_NAME=$(grep "MEDIA_SERVER_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - MEDIA_SERVER_ENABLED='yes' - fi - if grep -q "MEDIA_SERVER_CODE" $CONFIGURATION_FILE; then - MEDIA_SERVER_CODE=$(grep "MEDIA_SERVER_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE; then - WIKI_DOMAIN_NAME=$(grep "WIKI_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "WIKI_CODE" $CONFIGURATION_FILE; then - WIKI_CODE=$(grep "WIKI_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE; then - FULLBLOG_DOMAIN_NAME=$(grep "FULLBLOG_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "FULLBLOG_CODE" $CONFIGURATION_FILE; then - FULLBLOG_CODE=$(grep "FULLBLOG_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MY_BLOG_TITLE" $CONFIGURATION_FILE; then - MY_BLOG_TITLE=$(grep "MY_BLOG_TITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE; then - MY_BLOG_SUBTITLE=$(grep "MY_BLOG_SUBTITLE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE; then - MEDIAGOBLIN_DOMAIN_NAME=$(grep "MEDIAGOBLIN_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE; then - MEDIAGOBLIN_CODE=$(grep "MEDIAGOBLIN_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MEDIA_SERVER_DOMAIN_NAME" $CONFIGURATION_FILE; then - MEDIA_SERVER_DOMAIN_NAME=$(grep "MEDIA_SERVER_DOMAIN_NAME" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "MEDIA_SERVER_CODE" $CONFIGURATION_FILE; then - MEDIA_SERVER_CODE=$(grep "MEDIA_SERVER_CODE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "WIFI_SSID" $CONFIGURATION_FILE; then - WIFI_SSID=$(grep "WIFI_SSID" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "WIFI_INTERFACE" $CONFIGURATION_FILE; then - WIFI_INTERFACE=$(grep "WIFI_INTERFACE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "WIFI_TYPE" $CONFIGURATION_FILE; then - WIFI_TYPE=$(grep "WIFI_TYPE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "WIFI_PASSPHRASE" $CONFIGURATION_FILE; then - WIFI_PASSPHRASE=$(grep "WIFI_PASSPHRASE" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "BATMAN_CELLID" $CONFIGURATION_FILE; then - BATMAN_CELLID=$(grep "BATMAN_CELLID" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "WIFI_CHANNEL" $CONFIGURATION_FILE; then - WIFI_CHANNEL=$(grep "WIFI_CHANNEL" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi - if grep -q "ONION_ONLY" $CONFIGURATION_FILE; then - ONION_ONLY=$(grep "ONION_ONLY" $CONFIGURATION_FILE | awk -F '=' '{print $2}') - fi + if [ ! -f $CONFIGURATION_FILE ]; then + return fi + + read_config_param FRIENDS_MIRRORS_SERVER + read_config_param FRIENDS_MIRRORS_SSH_PORT + read_config_param FRIENDS_MIRRORS_PASSWORD + read_config_param ENABLE_SOCIAL_KEY_MANAGEMENT + read_config_param GIT_DOMAIN_NAME + read_config_param GIT_CODE + read_config_param MY_USERNAME + read_config_param DEFAULT_DOMAIN_NAME + read_config_param DEFAULT_DOMAIN_CODE + read_config_param NAMESERVER1 + read_config_param NAMESERVER2 + read_config_param DEBIAN_REPO + read_config_param DDNS_PROVIDER + read_config_param DDNS_USERNAME + read_config_param DDNS_PASSWORD + read_config_param LOCAL_NETWORK_STATIC_IP_ADDRESS + read_config_param ENABLE_CJDNS + read_config_param ENABLE_BATMAN + read_config_param ENABLE_BABEL + read_config_param ROUTER_IP_ADDRESS + read_config_param WIKI_TITLE + read_config_param MY_NAME + read_config_param MY_EMAIL_ADDRESS + read_config_param INSTALLING_ON_BBB + read_config_param USB_DRIVE + read_config_param PUBLIC_MAILING_LIST + read_config_param WIFI_SSID + read_config_param WIFI_INTERFACE + read_config_param WIFI_TYPE + read_config_param WIFI_PASSPHRASE + read_config_param BATMAN_CELLID + read_config_param WIFI_CHANNEL + read_config_param ONION_ONLY } read_config diff --git a/src/freedombone-utils-config b/src/freedombone-utils-config index 15ce9c83b..aa54e5ef6 100755 --- a/src/freedombone-utils-config +++ b/src/freedombone-utils-config @@ -40,6 +40,23 @@ function read_config_param { fi } +function write_config_param { + param_name="$1" + param_value="$2" + + if [ $CONFIGURATION_FILE ]; 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 + else + echo "${param_name}=${param_value}" >> $CONFIGURATION_FILE + fi + else + echo "${param_name}=${param_value}" > $CONFIGURATION_FILE + fi + fi +} + function read_configuration { # if not installing on a Beaglebone then use sdb as the USB drive by default if [ ! $INSTALLING_ON_BBB ]; then diff --git a/src/freedombone-utils-selector b/src/freedombone-utils-selector index 0ba8c1735..0c9aa3d10 100755 --- a/src/freedombone-utils-selector +++ b/src/freedombone-utils-selector @@ -92,6 +92,24 @@ function item_in_array { return 1 } +# returns a list of available system variants +# based upon the variants string in each app script +function available_system_variants { + FILES=/usr/share/${PROJECT_NAME}/apps/${PROJECT_NAME}-app-* + + for filename in $FILES + do + variants_list=$(app_variants $filename) + variants_array=($variants_list) + for variant_str in "${vars[@]}" + do + if [[ $(item_in_array "$variant_str" ${available_variants_list[@]}) == "0" ]]; then + available_variants_list+=("$variant_str") + fi + done + done +} + # mark a given app as having been removed so that it doesn't get reinstalled on updates function remove_app { app_name=$1 -- GitLab