X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=scripts%2Fsystem%2Fadd_domain.sh;h=dfce536012e91917b434a1ee041a5b3622e13080;hb=ec0607714e0846cbf25687be2c915eb28b521f4c;hp=80ebb2f37d0563e6d0d9b0d768d1e9b80a0797c3;hpb=a88dbc1335ef846caeb57a31124990e5e95b199c;p=feisty_meow.git diff --git a/scripts/system/add_domain.sh b/scripts/system/add_domain.sh index 80ebb2f3..dfce5360 100644 --- a/scripts/system/add_domain.sh +++ b/scripts/system/add_domain.sh @@ -1,152 +1,49 @@ #!/bin/bash -# this set of functions serve the main purpose of adding new domains or subdomains to the bind9 DNS server on the current host. -# it is currently highly specific to running a bunch of domains on a linux VM, where the VM has one IP address. -# note that bind 'named' must already be configured. -# also, it is assumed that if a subdomain is being added, then the containing domain has already been configured and is -# configured in a file similar to "blah.com.conf" in /etc/bind. +# this set of functions serve the main purpose of adding new domains or +# subdomains to the bind9 DNS server on the current host. it is currently +# highly specific to running a bunch of domains on a linux VM, where the VM +# has one IP address. note that the bind 'named' must already be configured. +# also, it is assumed that, if a subdomain is being added, then the containing +# domain has already been configured and is configured in a file similar to +# "blah.com.conf" in /etc/bind. # # Author: Chris Koeritz -export WORKDIR="$( \cd "$(\dirname "$0")" && \pwd )" # obtain the script's working directory. -export FEISTY_MEOW_APEX="$( \cd "$WORKDIR/../.." && \pwd )" +export THISDIR="$( \cd "$(\dirname "$0")" && \pwd )" # obtain the script's working directory. +export FEISTY_MEOW_APEX="$( \cd "$THISDIR/../.." && \pwd )" source "$FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh" +source "$FEISTY_MEOW_SCRIPTS/system/common_sysadmin.sh" # some defaults that are convenient for current purposes. +# existing values will be respected over our defaults. -# hmmm: !!! these would need to be parameterized somehow for this script to become really general. - -# in our scheme, the single IP address that all our domains map to. -IP_ADDRESS="10.28.42.20" -# the email address (where first dot is replaced by @) for the administrator of the domain. -SERVER_ADMIN="developer.cakelampvm.com" -# the name of the name server for the new domains (should already be configured). -MAIN_NAME_SERVER="ns.cakelampvm.com" -# the name of the mail server for a new domain (should already be configured). -MAIL_SERVER="mail.cakelampvm.com" -# the distribution name to be listed in info for the new domain or subdomain. -DISTRO="ubuntu" - -# creates a totally new domain config file for DNS. -function write_new_domain_file() -{ - local domain_name="$1"; shift - - local domain_file="/etc/bind/${domain_name}.conf" - - echo "adding a totally new domain called $domain_name" - echo "using the config file: $domain_file" - - if [ -f $domain_file ]; then - echo - echo "The domain configuration file already exists at:" - echo " $domain_file" - echo "Since we don't want to tear that down if it has specialized configuration" - echo "data in it, we will just leave it in place and consider our job done." - echo - exit 0 - fi - - echo " -\$TTL 1W -@ IN SOA @ ${SERVER_ADMIN}. ( - 2017100801 ; serial - 2H ; refresh - 8M ; retry - 14D ; expiry - 6H ) ; minimum - - IN NS ${MAIN_NAME_SERVER}. - IN MX 10 ${MAIL_SERVER}. - -${domain_name}. IN A ${IP_ADDRESS} - IN HINFO \"linux server\" \"${DISTRO}\" -" >"$domain_file" - - # our personalized configuration approach wants the real owner to own the file. - chown "$(logname):$(logname)" $domain_file - test_or_die "setting ownership on: $domain_file" -} - -# hooks up a new config file into bind's list of zones. -function add_zone_for_new_domain() -{ - local domain_name="$1"; shift - - local domain_file="/etc/bind/${domain_name}.conf" - - echo "adding a new domain configured by ${domain_file} into" - echo "the named.conf.local configuration file." - - # append the reference to the new conf file in the zone list. - echo " -zone \"${domain_name}\" in { - file \"${domain_file}\"; - type master; - allow-query { any; }; -}; - -//////////////////////////////////////////////////////////////////////////// - -" >> /etc/bind/named.conf.local - - # keep ownership for the real user. - chown "$(logname):$(logname)" /etc/bind/named.conf.local - test_or_die "setting ownership on: /etc/bind/named.conf.local" - -} - -# adds a new subdomain under a containing domain. -function add_new_subdomain() -{ - local new_domain="$1"; shift - - # split up the full domain name into subdomain portion and containing domain. - local subdomain="${new_domain%.*.*}" - local containing_domain="${new_domain#*.}" - - echo "adding a subdomain $subdomain to containing domain $containing_domain" - - local domain_file="/etc/bind/${containing_domain}.conf" - # see if config file already exists; if not, complain. - if [ ! -f "$domain_file" ]; then - echo "The domain configuration file for $new_domain is missing." - echo "It should already be present in: $domain_file" - echo "Please add the containing domain before trying to add a subdomain." - exit 1 - fi - - # see if subdomain already present in config. - if [ $(grep -q "$new_domain" "$domain_file") ]; then - echo "The subdomain $subdomain already seems to exist in the domain" - echo "configuration file: $domain_file" - echo "Please edit the config file to remove the subdomain before trying" - echo "to re-add the subdomain." - exit 1 - fi - - # append the new subdomain into the config file. - echo " -${subdomain}.${containing_domain}. IN A ${IP_ADDRESS} - IN HINFO \"linux server\" \"${DISTRO}\" -" >> /etc/bind/${containing_domain}.conf - - # keep ownership for real user. - chown "$(logname):$(logname)" "/etc/bind/${containing_domain}.conf" - test_or_die "setting ownership on: /etc/bind/${containing_domain}.conf" -} - -function restart_bind() -{ - echo restarting DNS server. - service bind9 restart - if [ $? -ne 0 ]; then - echo "The bind service did not restart properly. Please check the error logs." - exit 1 - fi - echo DNS server restarted. -} +if [ -z "$IP_ADDRESS" ]; then + # in our scheme, the single IP address that all our domains map to. + IP_ADDRESS="$(get_ip_addresses | head)" + echo "** defaulting IP address to $IP_ADDRESS" +fi +if [ -z "$SERVER_ADMIN" ]; then + # the email address (where first dot is replaced by @) for the administrator of the domain. + SERVER_ADMIN="$(fm_username).localhost" + echo "** defaulting server admin to $SERVER_ADMIN" +fi +if [ -z "$MAIN_NAME_SERVER" ]; then + # the name of the name server for the new domains (should already be configured). + MAIN_NAME_SERVER="ns.localhost" + echo "** defaulting main name server to $MAIN_NAME_SERVER" +fi +if [ -z "$MAIL_SERVER" ]; then + # the name of the mail server for a new domain (should already be configured). + MAIL_SERVER="mail.localhost" + echo "** defaulting mail server to $MAIL_SERVER" +fi +if [ -z "$DISTRO" ]; then + # the distribution name to be listed in info for the new domain or subdomain. + DISTRO="ubuntu" + echo "** defaulting distro to $DISTRO" +fi # main body of script.