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