#!/bin/bash # T&M Hansson IT AB © - 2020, https://www.hanssonit.se/ # shellcheck disable=2034,2059 true SCRIPT_NAME="Setup DDclient" # shellcheck source=lib.sh . <(curl -sL https://raw.githubusercontent.com/nextcloud/vm/master/lib.sh) # Check for errors + debug code and abort if something isn't right # 1 = ON # 0 = OFF DEBUG=0 debug_mode # Check if root root_check choice=$(whiptail --title "$TITLE" --menu "This script lets you setup DynDNS by using the ddclient application.\nYou have to setup an account before you can start.\n\nPlease choose your DynDNS-Provider.\n\nIf your DDNS provider isn't already supported, please open a new issue here:\n$ISSUES" "$WT_HEIGHT" "$WT_WIDTH" 4 \ "Cloudflare" "(cloudflare.com)" \ "Strato" "(strato.de)" 3>&1 1>&2 2>&3) case "$choice" in "Cloudflare") PROVIDER="Cloudflare" INSTRUCTIONS="Register an email address for your domain and get an Cloudflare API-key" GUIDE="https://www.techandme.se/setup-multiple-accounts-with-ddclient-and-cloudflare/" PROTOCOL="cloudflare" SERVER="www.cloudflare.com" USE_SSL="yes" ;; "Strato") PROVIDER="Strato" INSTRUCTIONS="activate DynDNS for your Domain" GUIDE="https://www.strato.de/faq/domains/so-einfach-richten-sie-dyndns-fuer-ihre-domains-ein/" PROTOCOL="dyndns2" SERVER="dyndns.strato.com" USE_SSL="yes" ;; "") msg_box "You haven't selected any option. Exiting!" exit 1 ;; *) ;; esac # Instructions msg_box "Before you can continue, you have to access $PROVIDER and $INSTRUCTIONS.\nHere is a guide:\n$GUIDE" # Ask if everything is prepared if ! yesno_box_yes "Are you ready to continue?" then exit fi # Enter your Hostname while : do HOSTNAME=$(input_box "Please enter the Host that you want to configure DDNS for.\nE.g. 'example.com'") if ! yesno_box_yes "Is this correct? $HOSTNAME" then msg_box "OK, please try again." else if [ -z "$HOSTNAME" ] then msg_box "Please don't leave the inputbox empty." else break fi fi done # Enter your login while : do LOGIN=$(input_box "Please enter the login for your DDNS provider.\nIt will be most likely the domain or registered email address depending on your DDNS Provider.\nE.g. 'example.com' or 'mail@example.com'\nIf you are not sure, please refer to the documentation of your DDNS provider.") if ! yesno_box_yes "Is this correct? $LOGIN" then msg_box "OK, please try again." else if [ -z "$LOGIN" ] then msg_box "Please don't leave the inputbox empty." else break fi fi done # Enter your password while : do PASSWORD=$(input_box "Please enter the password or api-key that you've got for DynDNS from your DDNS provider.\nIf you are not sure, please refer to the documentation of your DDNS provider.") if ! yesno_box_yes "Is this correct? $PASSWORD" then msg_box "OK, please try again." else if [ -z "$PASSWORD" ] then msg_box "Please don't leave the inputbox empty." else break fi fi done # Get results and store in a variable: RESULT="You will see now a list of all entered information. Please check that everything seems correct.\n\n" RESULT+="Provider=$PROVIDER\n" RESULT+="Host=$HOSTNAME\n" RESULT+="login=$LOGIN\n" RESULT+="password=$PASSWORD\n" # Present what we gathered, if everything okay, write to file msg_box "$RESULT" if ! yesno_box_yes "Do you want to proceed?" then exit fi clear # needed for cloudflare to work if [ "$PROVIDER" = "Cloudflare" ] then install_if_not libjson-any-perl fi # Install ddclient if ! is_this_installed ddclient then print_text_in_color "$ICyan" "Installing ddclient..." # This creates a ddclient service, creates a /etc/default/ddclient file and a /etc/ddclient.conf file DEBIAN_FRONTEND=noninteractive apt install ddclient -y fi if [ ! -f /etc/ddclient.conf ] then msg_box "The default ddclient.conf doesn't seem to exist.\nPlease report this to\n$ISSUES." exit 1 fi # Write information to ddclient.conf cat << DDCLIENT_CONF > "/etc/ddclient.conf" # Configuration file for ddclient generated by debconf # # /etc/ddclient.conf # Default system settings use=if, if=ens32 use=web, web=https://ipv4bot.whatismyipaddress.com # DDNS-service specific setting # Provider=$PROVIDER protocol=$PROTOCOL server=$SERVER ssl=$USE_SSL # user specific setting login=$LOGIN password=$PASSWORD # Hostname follows: zone=$HOSTNAME $HOSTNAME DDCLIENT_CONF # Test connection msg_box "Everything is setup by now and we will check the connection." ddclient -verbose # Inform user any_key "Please check the logs above and make sure that everything looks good. If not, just run this script again. If you are certain, that you entered all things correctly and it didn't work, please report this to\n$ISSUES" print_text_in_color "$ICyan" "exiting..." exit