terom@525: #!/bin/bash terom@525: # vim: set ft=sh : terom@525: terom@525: set -ue terom@525: terom@525: ROOT=$(pwd) terom@525: terom@525: BIN=$ROOT/bin terom@525: PROCESS_ZONE=$BIN/process-zone terom@525: EXPAND_ZONE=$BIN/expand-zone terom@525: terom@525: SETTINGS=$ROOT/settings terom@525: ZONES=$ROOT/zones terom@525: SERIALS=$ROOT/serials terom@525: terom@525: PROCESS_ARGS='--input-charset latin-1' terom@525: terom@525: FORWARD_MX=mail terom@525: REVERSE_ZONE=194.197.235 terom@525: REVERSE_DOMAIN=paivola.fi terom@525: terom@525: function log { terom@525: echo "$*" >&2 terom@525: } terom@525: terom@525: function die { terom@525: log "$*" terom@525: exit 1 terom@525: } terom@525: terom@525: function log_cmd { terom@525: local msg=$1; shift terom@525: terom@525: #log ">>>" "$@" terom@525: terom@525: echo -n "$msg... " >&2 terom@525: terom@525: "$@" && log "OK" >&2 || die "Failed" terom@525: } terom@525: terom@525: [ -d $SETTINGS ] || die "Missing settings: $SETTINGS" terom@525: [ -d $SERIALS ] || die "Missing serials: $SERIALS" terom@525: [ -d $ZONES ] || die "Missing zones: $ZONES" terom@525: terom@525: function expand_zone { terom@525: local output=$1; shift terom@525: terom@525: $EXPAND_ZONE -o $output "$@" terom@525: } terom@525: terom@525: function process_zone { terom@525: local output=$1; shift terom@525: terom@525: $PROCESS_ZONE $PROCESS_ARGS -o $output "$@" terom@525: } terom@525: terom@525: function copy_zone_part { terom@525: local zone=$1 terom@525: local part=$2 terom@525: terom@525: local name=$zone.zone.$part terom@525: terom@525: log_cmd "Copying zone $zone/$part: zones/$name" terom@525: cp $SETTINGS/$name $ZONES/$name terom@525: } terom@525: terom@525: function update_zone { terom@525: local zone=$1 terom@525: local name=$zone.zone terom@525: terom@525: log_cmd "Generating $zone zone headers: zones/$name" \ terom@525: expand_zone $ZONES/$name $SETTINGS/$zone.zone \ terom@525: --serial $SERIALS/$zone.serial --update-serial \ terom@525: --expand zones=$ZONES terom@525: } terom@525: terom@525: function update_zone_view { terom@525: local zone=$1 terom@525: local view=$2 terom@525: terom@525: local name=$view/$zone.zone terom@525: terom@525: log_cmd "Generating $zone:$view zone headers: zones/$name" \ terom@525: expand_zone $ZONES/$name $SETTINGS/$zone.zone \ terom@525: --serial $SERIALS/$zone.serial --update-serial \ terom@525: --expand zones=$ZONES \ terom@525: --expand view=$view terom@525: } terom@525: terom@525: function main { terom@525: log_cmd "Generating external forward zone: zones/external/paivola.zone.hosts" \ terom@525: process_zone $ZONES/external/paivola.zone.hosts $SETTINGS/paivola.txt --forward-zone terom@525: terom@525: log_cmd "Generating internal forward zone: zones/internal/paivola.zone.hosts" \ terom@525: process_zone $ZONES/internal/paivola.zone.hosts $SETTINGS/paivola.txt --forward-zone --forward-txt --forward-mx $FORWARD_MX terom@525: terom@525: log_cmd "Generating reverse zones: zones/paivola-reverse.zone.hosts" \ terom@525: process_zone $ZONES/paivola-reverse.zone.hosts $SETTINGS/paivola.txt --reverse-zone $REVERSE_ZONE --reverse-domain $REVERSE_DOMAIN terom@525: terom@525: terom@525: copy_zone_part paivola auto terom@525: copy_zone_part paivola services terom@525: copy_zone_part paivola internal terom@525: copy_zone_part paivola external terom@525: terom@525: update_zone paivola-reverse terom@525: update_zone_view paivola internal terom@525: update_zone_view paivola external terom@525: } terom@525: terom@525: main