123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324 |
- #!/bin/bash
- #
- # .---. . .
- # | | |
- # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
- # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
- # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
- #
- # Freedom in the Cloud
- #
- # This install script is intended for use with Debian Jessie
- #
- # License
- # =======
- #
- # Copyright (C) 2014-2016 Bob Mottram <bob@freedombone.net>
- #
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU Affero General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU Affero General Public License for more details.
- #
- # You should have received a copy of the GNU Affero General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- NO_OF_ARGS=$#
-
- PROJECT_NAME='freedombone'
-
- export TEXTDOMAIN=$PROJECT_NAME
- export TEXTDOMAINDIR="/usr/share/locale"
-
- PROJECT_INSTALL_DIR=/usr/local/bin
- if [ -f /usr/bin/${PROJECT_NAME} ]; then
- PROJECT_INSTALL_DIR=/usr/bin
- fi
-
- 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
-
- command_options=$1
-
- if [[ $command_options == "menuconfig-full" ]]; then
- MINIMAL_INSTALL="no"
- fi
-
- if [[ $command_options == "menuconfig-onion" ]]; then
- MINIMAL_INSTALL="yes"
- ONION_ONLY="yes"
- fi
-
- if [ ! $CONFIGURATION_FILE ]; then
- CONFIGURATION_FILE=$HOME/${PROJECT_NAME}.cfg
- fi
- if [ ! $COMPLETION_FILE ]; then
- COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt
- fi
-
- # before the interactive config so that wifi adaptors may be detected
- setup_wifi_atheros
-
- if [[ $command_options == "menuconfig"* ]]; then
- if [[ "$2" == "--reset" ]]; then
- if [ -f $CONFIGURATION_FILE ]; then
- rm $CONFIGURATION_FILE
- fi
- if [ -f $COMPLETION_FILE ]; then
- rm $COMPLETION_FILE
- fi
- if [ -f /usr/share/${PROJECT_NAME}/installed.txt ]; then
- rm /usr/share/${PROJECT_NAME}/installed.txt
- fi
- if [ -f /root/removed ]; then
- rm /root/removed
- fi
- fi
-
- # clear the interactive file which indicates configuration success
- interactive_file=$HOME/.${PROJECT_NAME}-interactive
- if [ -f $interactive_file ]; then
- rm $interactive_file
- fi
-
- interactive_configuration
-
- # check that the interactive file was created
- if [ ! -f $interactive_file ]; then
- exit 6393562
- fi
- rm $interactive_file
- else
- while [[ $# > 1 ]]
- do
- key="$1"
-
- case $key in
- -h|--help)
- show_help
- ;;
- # load a configuration file
- -c|--config)
- shift
- CONFIGURATION_FILE="$1"
- INSTALLING_FROM_CONFIGURATION_FILE="yes"
- break
- ;;
- # username within /home
- -u|--user)
- shift
- MY_USERNAME="$1"
- ;;
- # default domain name
- -d|--domain)
- shift
- DEFAULT_DOMAIN_NAME="$1"
- ;;
- # The type of system
- -s|--system)
- shift
- SYSTEM_TYPE="$1"
- ;;
- # The dynamic DNS provider
- --ddns)
- shift
- DDNS_PROVIDER="$1"
- ;;
- # Username for the synamic DNS provider
- --ddnsuser)
- shift
- DDNS_USERNAME="$1"
- ;;
- # Password for the synamic DNS provider
- --ddnspass)
- shift
- DDNS_PASSWORD="$1"
- ;;
- # Whether this installation is on a Beaglebone Black
- --bbb)
- INSTALLING_ON_BBB="yes"
- ;;
- # Static IP address for the system
- --ip)
- shift
- LOCAL_NETWORK_STATIC_IP_ADDRESS=$1
- ;;
- # IP address for the internet router
- --iprouter)
- shift
- ROUTER_IP_ADDRESS=$1
- ;;
- # ssh port
- --ssh)
- shift
- SSH_PORT=$1
- ;;
- # public mailing list name
- --list)
- shift
- PUBLIC_MAILING_LIST="$1"
- ;;
- # Number of CPU cores
- --cores)
- shift
- CPU_CORES=$1
- ;;
- # my name
- --name)
- shift
- MY_NAME="$1"
- ;;
- # my email address
- --email)
- shift
- MY_EMAIL_ADDRESS="$1"
- ;;
- # USB drive
- --usb)
- shift
- USB_DRIVE=$1
- ;;
- # Enable B.A.T.M.A.N
- --batman)
- shift
- ENABLE_BATMAN="yes"
- ;;
- # Mumble server password
- --vpass)
- shift
- MUMBLE_SERVER_PASSWORD=$1
- ;;
- # Mumble server port
- --vport)
- shift
- MUMBLE_PORT=$1
- ;;
- # DNS Nameserver 1
- --ns1)
- shift
- NAMESERVER1=$1
- ;;
- # DNS Nameserver 2
- --ns2)
- shift
- NAMESERVER2=$1
- ;;
- # Debian repository
- --repo)
- shift
- DEBIAN_REPO=$1
- ;;
- # clear the config file
- --reset)
- if [ -f $CONFIGURATION_FILE ]; then
- rm $CONFIGURATION_FILE
- fi
- if [ -f $COMPLETION_FILE ]; then
- rm $COMPLETION_FILE
- fi
- ;;
- # minimal install
- --minimal)
- shift
- MINIMAL_INSTALL=$1
- ;;
- *)
- # unknown option
- ;;
- esac
- shift
- done
- fi
-
- function parse_args {
- if [[ $NO_OF_ARGS == 0 ]]; then
- echo 'no_of_args = 0'
- show_help
- exit 0
- fi
-
- 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."
- exit 1
- fi
- if [ ! "$DEFAULT_DOMAIN_NAME" ]; then
- if [[ $SYSTEM_TYPE != "mesh"* ]]; then
- echo 'No default domain specified'
- show_help
- exit 2
- fi
- fi
- if [ ! $MY_USERNAME ]; then
- echo 'No username specified'
- show_help
- exit 3
- fi
- if [[ $SYSTEM_TYPE != "mesh"* ]]; then
- if [[ $ONION_ONLY == "no" ]]; then
- if [ ! $DDNS_USERNAME ]; then
- echo $'Please provide the username for your dynamic DNS provider with the --ddnsuser option'
- exit 7823
- fi
- if [ ! $DDNS_PASSWORD ]; then
- echo $'Please provide the password for your dynamic DNS provider with the --ddnspass option'
- exit 6382
- fi
- fi
- fi
-
- if [ ! $SYSTEM_TYPE ]; then
- SYSTEM_TYPE=$'full'
- write_config_param "SYSTEM_TYPE" "$SYSTEM_TYPE"
- fi
-
- if [[ $(is_valid_variant) == "0" ]]; then
- echo $"'$SYSTEM_TYPE' is an unrecognised ${PROJECT_NAME} variant. Possible variants are:"
- show_available_variants
- exit 367245
- fi
- }
-
- # run some initial tests
- clear
- ${PROJECT_NAME}-tests
- if [ ! "$?" = "0" ]; then
- exit 768252
- fi
-
- clear
- echo ''
- echo $'Setting up the base installation'
- echo ''
-
- export DEBIAN_FRONTEND=noninteractive
-
- upgrade_installation_from_previous_versions
- setup_utils
- setup_email
- setup_web
- setup_apps $command_options
- setup_final
-
- echo "${PROJECT_NAME} installation is complete"
- exit 0
|