# Axfr to Git


The problem: you want to keep a historical reference of zone changes.
This little script helps you do that, it:

1. AXFRs the zone you want;
2. Cleans the zone a bit, sorts it and feeds it through
   `named-compilezone` to make it look "nice";
3. Puts it in a git repository;
4. Checks it in with a date tag (`date -u '+%Y-%m-%d_%H%M%S'`).

You *do* need to define the directory where the git repository
is located in the script (`$gitdir`).

Axfr2git:

    #!/bin/bash

    # Define gitdir and check if git is initialized.
    gitdir=/tmp/stats
    if [ ! -d $gitdir ]; then
        mkdir -p $gitdir
    fi
    if [ ! -e $gitdir/.git ]; then
        ( cd $gitdir; git init )
    fi

    # 2 args: @nameserver zonename
    ns=$1
    zone=$2
    shift 2
    if [ -z "$ns" ]; then
        echo Synopsis: $0 @nameserver zonename
        exit 1
    fi
    if [ -z "$zone" ]; then
        echo Synopsis: $0 @nameserver zonename
        exit 1
    fi

    # perform the dig
    dig +norec AXFR "$ns" "$zone" | grep -v '^;' | sort | \
    named-compilezone -s relative -i none -o $gitdir/$zone-zone $zone /dev/stdin
    if [ $? -ne 0 ]; then
        echo 0: Failure to AXFR $zone from $ns >&2
        exit 1
    fi
    ( cd $gitdir
    git add $zone-zone
    git commit -a -m"$zone zone of $(date -u)" >/dev/null
    git tag "$(date -u '+%Y-%m-%d_%H%M%S')" )

