From 2deeea53030bc86b3e2a2bda7d0b7b548561d34c Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Sat, 31 Jan 2015 22:31:02 +0000 Subject: [PATCH] freedombone-config command to interactively create a configuration file --- Makefile | 4 + debian/source/include-binaries | 1 + man/freedombone-config.1.gz | Bin 0 -> 712 bytes src/freedombone | 619 +------------------------ src/freedombone-config | 812 +++++++++++++++++++++++++++++++++ 5 files changed, 835 insertions(+), 601 deletions(-) create mode 100644 man/freedombone-config.1.gz create mode 100755 src/freedombone-config diff --git a/Makefile b/Makefile index fcd4e9ac..0d44f65c 100644 --- a/Makefile +++ b/Makefile @@ -15,24 +15,28 @@ install: install -m 755 src/${APP}-tordongle ${DESTDIR}${PREFIX}/bin install -m 755 src/${APP}-client ${DESTDIR}${PREFIX}/bin install -m 755 src/${APP}-remote ${DESTDIR}${PREFIX}/bin + install -m 755 src/${APP}-config ${DESTDIR}${PREFIX}/bin mkdir -m 755 -p ${DESTDIR}${PREFIX}/share/man/man1 install -m 644 man/${APP}.1.gz ${DESTDIR}${PREFIX}/share/man/man1 install -m 644 man/${APP}-prep.1.gz ${DESTDIR}${PREFIX}/share/man/man1 install -m 644 man/${APP}-tordongle.1.gz ${DESTDIR}${PREFIX}/share/man/man1 install -m 644 man/${APP}-client.1.gz ${DESTDIR}${PREFIX}/share/man/man1 install -m 644 man/${APP}-remote.1.gz ${DESTDIR}${PREFIX}/share/man/man1 + install -m 644 man/${APP}-config.1.gz ${DESTDIR}${PREFIX}/share/man/man1 uninstall: rm -f ${PREFIX}/share/man/man1/${APP}.1.gz rm -f ${PREFIX}/share/man/man1/${APP}-prep.1.gz rm -f ${PREFIX}/share/man/man1/${APP}-tordongle.1.gz rm -f ${PREFIX}/share/man/man1/${APP}-client.1.gz rm -f ${PREFIX}/share/man/man1/${APP}-remote.1.gz + rm -f ${PREFIX}/share/man/man1/${APP}-config.1.gz rm -rf ${PREFIX}/share/${APP} rm -f ${PREFIX}/bin/${APP} rm -f ${PREFIX}/bin/${APP}-prep rm -f ${PREFIX}/bin/${APP}-tordongle rm -f ${PREFIX}/bin/${APP}-client rm -f ${PREFIX}/bin/${APP}-remote + rm -f ${PREFIX}/bin/${APP}-config clean: rm -f \#* \.#* debian/*.substvars debian/*.log rm -fr deb.* debian/${APP} diff --git a/debian/source/include-binaries b/debian/source/include-binaries index 4ebcc6e5..6b0efeda 100644 --- a/debian/source/include-binaries +++ b/debian/source/include-binaries @@ -3,3 +3,4 @@ man/freedombone-prep.1.gz man/freedombone-tordongle.1.gz man/freedombone-client.1.gz man/freedombone-remote.1.gz +man/freedombone-config.1.gz diff --git a/man/freedombone-config.1.gz b/man/freedombone-config.1.gz new file mode 100644 index 0000000000000000000000000000000000000000..8a4b6a4056a5e8e3056237350015f56309d62714 GIT binary patch literal 712 zcmV;(0yq61iwFQ(R?SoZ1C3MfZ__Xk{hq(#lrMZCDcgiJDuif9*A@CpP0N5XAv?a* zrimTd&a(dZIBv?itwKckkeu(`d-u*4FK-~zh)fk!NsLk@GqHg)2rtgyGm&uq=Im_< zp?j|%(_m##zcMf(vLbmH1aWc$;j}jygu#hwKO-1Pi<+cX++)6jR3ouyfE;tfKD*My z3MC;EIktt9@6*{l86{x=?m0maWw35P8`vF01*{7pp(MuCN;Ak&ZY*~PHLQ;tsgZ&a zwt-MsCskQ0ZJ{r0fyR&x0%1(M&%0L2r$KVH7|oZX*)$B69D}%jLQs&Zq9Bria6L*u zVs=oI9az=2?mBSUSl&dSAg-mSj_qk&T_KGndF~3Eov~QN zt>Do#S@y=`-d^!2gPp2?lY8_P8B#$So6>F5tfy@f8V$cIW4nR3oRwQ=vN-1c^$GYuqnceAF2G2tU z+2Vn+wQ}&SH<^zI?i&8%9v(&GG~2Y$nZGd&GVTZQXbus79Yq}TGKi@T60U0Se}B(2 zcivnINec8i*X<9e%=>wATUv18!0!5c+(bxGRK@dEaJ@mwNwbrv%_FpS(7LWYbhQ{m zrnIL!wKR_?>QJ=spqIPjYnc6NwSM$hLubYU{kG9+j+~iG;OKgYI!qT zgh5|Xm?&#CDd0U-^rKc(S&^E!+QwFW@Z#pfd1p8uc45$acX>XzxO^tL3;juSp59ix u=-+>3nZDs;^<&9QdA0q5VyW~BO)~bVTclkt*y(-B75o9`fO+Ru1polCOIG{< literal 0 HcmV?d00001 diff --git a/src/freedombone b/src/freedombone index e9a792b3..156de133 100755 --- a/src/freedombone +++ b/src/freedombone @@ -397,7 +397,7 @@ function show_help { function interactive_configuration_remote_backups { if [ ! -f /usr/local/bin/freedombone-remote ]; then if [ ! -f /usr/bin/freedombone-remote ]; then - echo 'The command /usr/bin/freedombone-remote was not found' + echo 'The command freedombone-remote was not found' exit 87354 fi fi @@ -465,608 +465,25 @@ function save_configuration_file { } function interactive_configuration { - # 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 - - dialog --title "Freedombone" --msgbox "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 or send a Bitmessage to $FREEDOMBONE_BITMESSAGE" 15 50 - - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle "Freedombone Configuration" \ - --radiolist "Type of Installation:" 15 40 8 \ - 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 2> $data - sel=$? - case $sel in - 1) exit 0;; - 255) exit 0;; - 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;; - esac - save_configuration_file - - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --title "Select the user account to install as" \ - --backtitle "Freedombone Configuration" \ - --dselect "/home/$(grep 'MY_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 14 40 2> $data - sel=$? - case $sel in - 0) MY_USERNAME=$(cat $data | awk -F '/' '{print $3}');; - 1) exit 0;; - 255) exit 0;; - esac - if [ ! $MY_USERNAME ]; then - echo 'No user account was selected' - exit 0 - fi - if [ ! -d /home/$MY_USERNAME ]; then - echo "The directory /home/$MY_USERNAME does not exist" - exit 6437 - fi - save_configuration_file - - 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 - 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 0;; - esac - save_configuration_file - - 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 0;; - 255) exit 0;; - 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 0;; - esac - save_configuration_file - - 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 0;; - 255) exit 0;; - 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 0;; - esac - save_configuration_file - - 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 0;; - 255) exit 0;; - 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 0;; - esac - save_configuration_file - - while [ ! $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) DDNS_USERNAME=$(cat $data);; - 1) exit 0;; - 255) exit 0;; - esac - done - save_configuration_file - - while [ ! $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) DDNS_PASSWORD=$(cat $data);; - 1) exit 0;; - 255) exit 0;; - 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="" + if [ ! -f /usr/local/bin/freedombone-config ]; then + if [ ! -f /usr/bin/freedombone-config ]; then + echo 'The command freedombone-config was not found' + exit 63935 fi - done - save_configuration_file - - while [ ! $MY_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) MY_NAME=$(cat $data);; - 1) exit 0;; - 255) exit 0;; - esac - done - save_configuration_file - - 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 "$(grep 'LOCAL_NETWORK_STATIC_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')" 1 16 16 15 \ - "Internet router:" 2 1 "$(grep 'ROUTER_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')" 2 16 16 15 \ - 2> $data - sel=$? - case $sel in - 1) exit 0;; - 255) exit 0;; - esac - LOCAL_NETWORK_STATIC_IP_ADDRESS=$(cat $data | sed -n 1p) - ROUTER_IP_ADDRESS=$(cat $data | sed -n 2p) - save_configuration_file - - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - if [[ $(grep 'ENABLE_CJDNS' temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then - dialog --title "Mesh Networking" \ - --backtitle "Freedombone Configuration" \ - --yesno "\nDo you want to enable CJDNS?" 7 60 - else - dialog --title "Mesh Networking" \ - --backtitle "Freedombone Configuration" \ - --defaultno \ - --yesno "\nDo you want to enable CJDNS?" 7 60 - fi - sel=$? - case $sel in - 0) ENABLE_CJDNS="yes";; - 1) ENABLE_CJDNS="no";; - 255) exit 0;; - esac - save_configuration_file - - if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - while [ ! $WIKI_DOMAIN_NAME ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - 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 25 40 \ - "Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \ - 2> $data - sel=$? - case $sel in - 1) exit 0;; - 255) exit 0;; - 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 [ ! $DOMAIN_NAME ]; then - DOMAIN_NAME=$WIKI_DOMAIN_NAME - fi - fi - fi - done - save_configuration_file fi - if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - while [ ! $FULLBLOG_DOMAIN_NAME ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - 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 25 30 \ - "Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \ - 2> $data - sel=$? - case $sel in - 1) exit 0;; - 255) exit 0;; - 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 [ ! $DOMAIN_NAME ]; then - DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME - fi - fi - fi - done - save_configuration_file - fi - - if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - while [ ! $OWNCLOUD_DOMAIN_NAME ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle "Freedombone Configuration" \ - --title "Owncloud Configuration" \ - --form "\nPlease enter your Owncloud details:" 11 55 3 \ - "Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \ - 2> $data - sel=$? - case $sel in - 1) exit 0;; - 255) exit 0;; - esac - OWNCLOUD_DOMAIN_NAME=$(cat $data | sed -n 1p) - if [ $OWNCLOUD_DOMAIN_NAME ]; then - TEST_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME - validate_domain_name - if [[ $TEST_DOMAIN_NAME != $OWNCLOUD_DOMAIN_NAME ]]; then - OWNCLOUD_DOMAIN_NAME= - dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 - else - if [ ! $DOMAIN_NAME ]; then - DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME - fi - fi - fi - done - save_configuration_file - fi - - if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - while [ ! $REDMATRIX_DOMAIN_NAME ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle "Freedombone Configuration" \ - --title "RedMatrix Configuration" \ - --form "\nPlease enter your RedMatrix details:" 11 55 3 \ - "Domain:" 1 1 "$(grep 'REDMATRIX_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \ - 2> $data - sel=$? - case $sel in - 1) exit 0;; - 255) exit 0;; - esac - REDMATRIX_DOMAIN_NAME=$(cat $data | sed -n 1p) - if [ $REDMATRIX_DOMAIN_NAME ]; then - TEST_DOMAIN_NAME=$REDMATRIX_DOMAIN_NAME - validate_domain_name - if [[ $TEST_DOMAIN_NAME != $REDMATRIX_DOMAIN_NAME ]]; then - REDMATRIX_DOMAIN_NAME= - dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 - else - if [ ! $DOMAIN_NAME ]; then - DOMAIN_NAME=$REDMATRIX_DOMAIN_NAME - fi - fi - fi - done - save_configuration_file - fi - - if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then - while [ ! $MICROBLOG_DOMAIN_NAME ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle "Freedombone Configuration" \ - --title "Microblog Configuration" \ - --form "\nPlease enter your Microblog details:" 11 55 3 \ - "Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \ - 2> $data - sel=$? - case $sel in - 1) exit 0;; - 255) exit 0;; - esac - MICROBLOG_DOMAIN_NAME=$(cat $data | sed -n 1p) - if [ $MICROBLOG_DOMAIN_NAME ]; then - if [[ $MICROBLOG_DOMAIN_NAME == "$REDMATRIX_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 [ ! $DOMAIN_NAME ]; then - DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME - fi - fi - fi - done - save_configuration_file - fi - - if [ ! $DOMAIN_NAME ]; then - while [ ! $DOMAIN_NAME ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle "Freedombone Configuration" \ - --inputbox "Domain name" 10 30 "$(grep 'DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data - sel=$? - case $sel in - 0) DOMAIN_NAME=$(cat $data);; - 1) exit 0;; - 255) exit 0;; - esac - done - save_configuration_file - fi - - while [ ! $MY_EMAIL_ADDRESS ] - do - data=$(tempfile 2>/dev/null) - trap "rm -f $data" 0 1 2 5 15 - dialog --backtitle "Freedombone Configuration" \ - --inputbox "Your email address" 10 30 "$(grep 'MY_EMAIL_ADDRESS' temp.cfg | awk -F '=' '{print $2}')" 2> $data - sel=$? - case $sel in - 0) MY_EMAIL_ADDRESS=$(cat $data);; - 1) exit 0;; - 255) exit 0;; - esac - done - - save_configuration_file - - # delete the temporary configuration file - if [ -f temp.cfg ]; then - shred -zu temp.cfg + freedombone-config \ + -u $MY_USERNAME \ + -f $CONFIGURATION_FILE \ + -w $FREEDOMBONE_WEBSITE \ + -b $FREEDOMBONE_BITMESSAGE \ + -m $MINIMUM_PASSWORD_LENGTH + if [ ! "$?" = "0" ]; then + echo 'Command failed:' + echo '' + echo " freedombone-config -u $MY_USERNAME -f $CONFIGURATION_FILE -w $FREEDOMBONE_WEBSITE -b $FREEDOMBONE_BITMESSAGE -m $MINIMUM_PASSWORD_LENGTH" + echo '' + exit 73594 fi FRIENDS_SERVERS_LIST=/home/$MY_USERNAME/backup.list @@ -1082,7 +499,7 @@ function interactive_configuration { } if [[ $1 == "menuconfig" ]]; then - interactive_configuration + interactive_configuration else # Oddly it appears that command line parsing cannot be done inside of a function diff --git a/src/freedombone-config b/src/freedombone-config new file mode 100755 index 00000000..dbfabb2e --- /dev/null +++ b/src/freedombone-config @@ -0,0 +1,812 @@ +#!/bin/bash +# +# .---. . . +# | | | +# |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. +# | | (.-' (.-' ( | ( )| | | | )( )| | (.-' +# ' ' --' --' -' - -' ' ' -' -' -' ' - --' +# +# Freedom in the Cloud +# +# Interactively creates a configuration file for use with the main +# freedombone command +# +# License +# ======= +# +# Copyright (C) 2015 Bob Mottram +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +NO_OF_ARGS=$# + +# Web site +FREEDOMBONE_WEBSITE="http://freedombone.uk.to" + +# Contact details +FREEDOMBONE_BITMESSAGE="BM-2cWuhmBvVdfrHhLoZTdspCkKeiTorUesSL" + +# Minimum number of characters in a password +MINIMUM_PASSWORD_LENGTH=10 + +# Different system variants which may be specified within +# the SYSTEM_TYPE option +VARIANT_FULL="full" +VARIANT_WRITER="writer" +VARIANT_CLOUD="cloud" +VARIANT_CHAT="chat" +VARIANT_MAILBOX="mailbox" +VARIANT_NONMAILBOX="nonmailbox" +VARIANT_SOCIAL="social" +VARIANT_MEDIA="media" +VARIANT_TOR_DONGLE="tordongle" + +MY_USERNAME= +DOMAIN_NAME= +MY_EMAIL_ADDRESS= +SYSTEM_TYPE= +INSTALLING_ON_BBB= +DDNS_PROVIDER= +DDNS_USERNAME= +DDNS_PASSWORD= +MY_NAME= +LOCAL_NETWORK_STATIC_IP_ADDRESS= +ROUTER_IP_ADDRESS= +ENABLE_CJDNS= +DEBIAN_REPO= +NAMESERVER1= +NAMESERVER2= +WIKI_TITLE= +WIKI_DOMAIN_NAME= +MY_BLOG_TITLE= +FULLBLOG_DOMAIN_NAME= +OWNCLOUD_DOMAIN_NAME= +REDMATRIX_DOMAIN_NAME= +MICROBLOG_DOMAIN_NAME= + +CONFIGURATION_FILE= + +function show_help { + echo '' + echo 'freedombone-config -f [config filename] -m [min password length]' + echo '' + echo 'Creates an inventory of remote backup locations' + echo '' + echo '' + echo ' -h --help Show help' + echo ' -f --filename Configuration file (usually freedombone.cfg)' + echo ' -m --min Minimum password length (characters)' + echo ' -w --www Freedombone web site' + echo ' -b --bm Freedombone support Bitmessage address' + echo '' + exit 0 +} + +# 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" + ;; + # Bitmessage address for support + -b|--bm) + shift + FREEDOMBONE_BITMESSAGE="$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 "DOMAIN_NAME=$DOMAIN_NAME" >> $CONFIGURATION_FILE + echo "MY_EMAIL_ADDRESS=$MY_EMAIL_ADDRESS" >> $CONFIGURATION_FILE + echo "SYSTEM_TYPE=$SYSTEM_TYPE" >> $CONFIGURATION_FILE + echo "INSTALLING_ON_BBB=$INSTALLING_ON_BBB" >> $CONFIGURATION_FILE + echo "DDNS_PROVIDER=$DDNS_PROVIDER" >> $CONFIGURATION_FILE + echo "DDNS_USERNAME=$DDNS_USERNAME" >> $CONFIGURATION_FILE + # does this need to be saved? + echo "DDNS_PASSWORD=$DDNS_PASSWORD" >> $CONFIGURATION_FILE + echo "MY_NAME=$MY_NAME" >> $CONFIGURATION_FILE + echo "LOCAL_NETWORK_STATIC_IP_ADDRESS=$LOCAL_NETWORK_STATIC_IP_ADDRESS" >> $CONFIGURATION_FILE + echo "ROUTER_IP_ADDRESS=$ROUTER_IP_ADDRESS" >> $CONFIGURATION_FILE + echo "ENABLE_CJDNS=$ENABLE_CJDNS" >> $CONFIGURATION_FILE + echo "DEBIAN_REPO=$DEBIAN_REPO" >> $CONFIGURATION_FILE + echo "NAMESERVER1=$NAMESERVER1" >> $CONFIGURATION_FILE + echo "NAMESERVER2=$NAMESERVER2" >> $CONFIGURATION_FILE + 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 [ $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 [ $OWNCLOUD_DOMAIN_NAME ]; then + echo "OWNCLOUD_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME" >> $CONFIGURATION_FILE + fi + if [ $REDMATRIX_DOMAIN_NAME ]; then + echo "REDMATRIX_DOMAIN_NAME=$REDMATRIX_DOMAIN_NAME" >> $CONFIGURATION_FILE + fi + if [ $MICROBLOG_DOMAIN_NAME ]; then + echo "MICROBLOG_DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME" >> $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 > 2 )); then + TEST_DOMAIN_NAME="The domain $TEST_DOMAIN_NAME has too many subdomains. It should be of the type 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 x.y.z or y.z" + fi +} + +function interactive_configuration { + # 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 + + dialog --title "Freedombone" --msgbox "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 or send a Bitmessage to $FREEDOMBONE_BITMESSAGE" 15 50 + + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle "Freedombone Configuration" \ + --radiolist "Type of Installation:" 15 40 8 \ + 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 2> $data + sel=$? + case $sel in + 1) exit 0;; + 255) exit 0;; + 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;; + esac + save_configuration_file + + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --title "Select the user account to install as" \ + --backtitle "Freedombone Configuration" \ + --dselect "/home/$(grep 'MY_USERNAME' temp.cfg | awk -F '=' '{print $2}')" 14 40 2> $data + sel=$? + case $sel in + 0) MY_USERNAME=$(cat $data | awk -F '/' '{print $3}');; + 1) exit 0;; + 255) exit 0;; + esac + 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 [ ! -d /home/$MY_USERNAME ]; then + echo "The directory /home/$MY_USERNAME does not exist" + exit 6437 + fi + save_configuration_file + + 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 + 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 0;; + esac + save_configuration_file + + 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 0;; + 255) exit 0;; + 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 0;; + esac + save_configuration_file + + 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 0;; + 255) exit 0;; + 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 0;; + esac + save_configuration_file + + 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 0;; + 255) exit 0;; + 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 0;; + esac + save_configuration_file + + while [ ! $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) DDNS_USERNAME=$(cat $data);; + 1) exit 0;; + 255) exit 0;; + esac + done + save_configuration_file + + while [ ! $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) DDNS_PASSWORD=$(cat $data);; + 1) exit 0;; + 255) exit 0;; + 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 + + while [ ! $MY_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) MY_NAME=$(cat $data);; + 1) exit 0;; + 255) exit 0;; + esac + done + save_configuration_file + + 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 "$(grep 'LOCAL_NETWORK_STATIC_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')" 1 16 16 15 \ + "Internet router:" 2 1 "$(grep 'ROUTER_IP_ADDRESS' temp.cfg | awk -F '=' '{print $2}')" 2 16 16 15 \ + 2> $data + sel=$? + case $sel in + 1) exit 0;; + 255) exit 0;; + esac + LOCAL_NETWORK_STATIC_IP_ADDRESS=$(cat $data | sed -n 1p) + ROUTER_IP_ADDRESS=$(cat $data | sed -n 2p) + save_configuration_file + + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + if [[ $(grep 'ENABLE_CJDNS' temp.cfg | awk -F '=' '{print $2}') == "yes" ]]; then + dialog --title "Mesh Networking" \ + --backtitle "Freedombone Configuration" \ + --yesno "\nDo you want to enable CJDNS?" 7 60 + else + dialog --title "Mesh Networking" \ + --backtitle "Freedombone Configuration" \ + --defaultno \ + --yesno "\nDo you want to enable CJDNS?" 7 60 + fi + sel=$? + case $sel in + 0) ENABLE_CJDNS="yes";; + 1) ENABLE_CJDNS="no";; + 255) exit 0;; + esac + save_configuration_file + + if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then + while [ ! $WIKI_DOMAIN_NAME ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + 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 25 40 \ + "Domain:" 2 1 "$(grep 'WIKI_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 40 \ + 2> $data + sel=$? + case $sel in + 1) exit 0;; + 255) exit 0;; + 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 [ ! $DOMAIN_NAME ]; then + DOMAIN_NAME=$WIKI_DOMAIN_NAME + fi + fi + fi + done + save_configuration_file + fi + + if [[ $SYSTEM_TYPE == "$VARIANT_WRITER" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then + while [ ! $FULLBLOG_DOMAIN_NAME ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + 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 25 30 \ + "Domain:" 2 1 "$(grep 'FULLBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2 16 25 30 \ + 2> $data + sel=$? + case $sel in + 1) exit 0;; + 255) exit 0;; + 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 [ ! $DOMAIN_NAME ]; then + DOMAIN_NAME=$FULLBLOG_DOMAIN_NAME + fi + fi + fi + done + save_configuration_file + fi + + if [[ $SYSTEM_TYPE == "$VARIANT_CLOUD" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then + while [ ! $OWNCLOUD_DOMAIN_NAME ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle "Freedombone Configuration" \ + --title "Owncloud Configuration" \ + --form "\nPlease enter your Owncloud details:" 11 55 3 \ + "Domain:" 1 1 "$(grep 'OWNCLOUD_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \ + 2> $data + sel=$? + case $sel in + 1) exit 0;; + 255) exit 0;; + esac + OWNCLOUD_DOMAIN_NAME=$(cat $data | sed -n 1p) + if [ $OWNCLOUD_DOMAIN_NAME ]; then + TEST_DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME + validate_domain_name + if [[ $TEST_DOMAIN_NAME != $OWNCLOUD_DOMAIN_NAME ]]; then + OWNCLOUD_DOMAIN_NAME= + dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 + else + if [ ! $DOMAIN_NAME ]; then + DOMAIN_NAME=$OWNCLOUD_DOMAIN_NAME + fi + fi + fi + done + save_configuration_file + fi + + if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then + while [ ! $REDMATRIX_DOMAIN_NAME ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle "Freedombone Configuration" \ + --title "RedMatrix Configuration" \ + --form "\nPlease enter your RedMatrix details:" 11 55 3 \ + "Domain:" 1 1 "$(grep 'REDMATRIX_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \ + 2> $data + sel=$? + case $sel in + 1) exit 0;; + 255) exit 0;; + esac + REDMATRIX_DOMAIN_NAME=$(cat $data | sed -n 1p) + if [ $REDMATRIX_DOMAIN_NAME ]; then + TEST_DOMAIN_NAME=$REDMATRIX_DOMAIN_NAME + validate_domain_name + if [[ $TEST_DOMAIN_NAME != $REDMATRIX_DOMAIN_NAME ]]; then + REDMATRIX_DOMAIN_NAME= + dialog --title "Domain name validation" --msgbox "$TEST_DOMAIN_NAME" 15 50 + else + if [ ! $DOMAIN_NAME ]; then + DOMAIN_NAME=$REDMATRIX_DOMAIN_NAME + fi + fi + fi + done + save_configuration_file + fi + + if [[ $SYSTEM_TYPE == "$VARIANT_SOCIAL" || $SYSTEM_TYPE == "$VARIANT_FULL" ]]; then + while [ ! $MICROBLOG_DOMAIN_NAME ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle "Freedombone Configuration" \ + --title "Microblog Configuration" \ + --form "\nPlease enter your Microblog details:" 11 55 3 \ + "Domain:" 1 1 "$(grep 'MICROBLOG_DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 1 16 25 30 \ + 2> $data + sel=$? + case $sel in + 1) exit 0;; + 255) exit 0;; + esac + MICROBLOG_DOMAIN_NAME=$(cat $data | sed -n 1p) + if [ $MICROBLOG_DOMAIN_NAME ]; then + if [[ $MICROBLOG_DOMAIN_NAME == "$REDMATRIX_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 [ ! $DOMAIN_NAME ]; then + DOMAIN_NAME=$MICROBLOG_DOMAIN_NAME + fi + fi + fi + done + save_configuration_file + fi + + if [ ! $DOMAIN_NAME ]; then + while [ ! $DOMAIN_NAME ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle "Freedombone Configuration" \ + --inputbox "Domain name" 10 30 "$(grep 'DOMAIN_NAME' temp.cfg | awk -F '=' '{print $2}')" 2> $data + sel=$? + case $sel in + 0) DOMAIN_NAME=$(cat $data);; + 1) exit 0;; + 255) exit 0;; + esac + done + save_configuration_file + fi + + while [ ! $MY_EMAIL_ADDRESS ] + do + data=$(tempfile 2>/dev/null) + trap "rm -f $data" 0 1 2 5 15 + dialog --backtitle "Freedombone Configuration" \ + --inputbox "Your email address" 10 30 "$(grep 'MY_EMAIL_ADDRESS' temp.cfg | awk -F '=' '{print $2}')" 2> $data + sel=$? + case $sel in + 0) MY_EMAIL_ADDRESS=$(cat $data);; + 1) exit 0;; + 255) exit 0;; + esac + done + + save_configuration_file + + # delete the temporary configuration file + if [ -f temp.cfg ]; then + shred -zu temp.cfg + fi +} + +function show_result { + clear + echo '' + echo "Configuration filename: $CONFIGURATION_FILE" + echo '' + echo 'Contents:' + echo '' + cat $CONFIGURATION_FILE + echo '' +} + +interactive_configuration +show_result +exit 0