bin/update
author Tero Marttila <terom@paivola.fi>
Thu, 19 Dec 2013 01:17:48 +0200
branchdns-new
changeset 610 cb4607af8663
parent 608 4ad9c9b7cd0e
child 612 51270237a6ff
permissions -rwxr-xr-x
add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
525
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
#!/bin/bash
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
# vim: set ft=sh :
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
set -ue
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
     6
if [ $0 == './update' ]; then
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
     7
    SRV=$(pwd)
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
     8
    OPT=./opt
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
     9
else
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    10
    SRV=${SRV:-/srv/dns}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    11
    OPT=${SRV:-/srv/dns/opt}
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    12
    cd $SRV
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    13
fi
525
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    15
# charset for files under etc/
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    16
CHARSET='utf-8'
575
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents: 574
diff changeset
    17
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    18
# External bins
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    19
NAMED_CHECKZONE=/usr/sbin/named-checkzone
575
b68b8615c512 update: split out code into lib/update.foo
Tero Marttila <terom@paivola.fi>
parents: 574
diff changeset
    20
585
65bf391fd2f3 update: link + check dhcpd hosts from settings/dhcp/... -> dhcp/...
Tero Marttila <terom@paivola.fi>
parents: 584
diff changeset
    21
DHCPD=/usr/sbin/dhcpd
65bf391fd2f3 update: link + check dhcpd hosts from settings/dhcp/... -> dhcp/...
Tero Marttila <terom@paivola.fi>
parents: 584
diff changeset
    22
DHCPD_CONF=/etc/dhcp/dhcpd.conf
589
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 587
diff changeset
    23
DHCPD_INIT=/etc/init.d/isc-dhcp-server
584
22b58b938fd0 update: rename deploy_zones -> reload_zones; move related do_* from lib/update.updates -> lib/update.operations where they belong
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
    24
554
2b7aad3466c6 update: log_warn, -q; ensure_dir; link_zone paivola-reverse; indent error exit
Tero Marttila <terom@paivola.fi>
parents: 553
diff changeset
    25
HG=/usr/bin/hg
581
6292cb597954 update: hg trust root
Tero Marttila <terom@paivola.fi>
parents: 577
diff changeset
    26
HG_ARGS=(--config trusted.users=root)
6292cb597954 update: hg trust root
Tero Marttila <terom@paivola.fi>
parents: 577
diff changeset
    27
550
773c91a7547a update: deploy_zones
Tero Marttila <terom@paivola.fi>
parents: 549
diff changeset
    28
RNDC=/usr/sbin/rndc
569
3613e93e4fd7 update: rndc: fail if no read perms on $RNDC_KEY
Tero Marttila <terom@paivola.fi>
parents: 568
diff changeset
    29
RNDC_KEY=/etc/bind/rndc.key
533
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 532
diff changeset
    30
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    31
# Library includes
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    32
source lib/update
567
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
    33
589
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 587
diff changeset
    34
## Flags
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 587
diff changeset
    35
# set by do_reload_zone if zone data has actually been reloaded
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 587
diff changeset
    36
RELOAD_ZONES=
544
81cd07bc5f76 update: commit
Tero Marttila <terom@paivola.fi>
parents: 542
diff changeset
    37
567
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
    38
## Site settings, used as arguments to scripts
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
    39
# Origin domain to generate reverse records for in --reverse-zone
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
    40
REVERSE_DOMAIN=paivola.fi
551
647f6de0d0ac update: implement -d for $ROOT
Tero Marttila <terom@paivola.fi>
parents: 550
diff changeset
    41
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    42
## Do things
584
22b58b938fd0 update: rename deploy_zones -> reload_zones; move related do_* from lib/update.updates -> lib/update.operations where they belong
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
    43
function run_hosts {
550
773c91a7547a update: deploy_zones
Tero Marttila <terom@paivola.fi>
parents: 549
diff changeset
    44
    # test
536
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 533
diff changeset
    45
    log "Testing hosts..."
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    46
    for hosts in $(list_files etc/hosts); do
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    47
        log_warn "TODO: check_hosts $hosts"
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    48
    done
559
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 555
diff changeset
    49
607
77df429f63a3 update: full host forward/dhcp/reverse zones
Tero Marttila <terom@paivola.fi>
parents: 605
diff changeset
    50
    log "Updating forward host zones..."
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    51
    for hosts in $(list_files etc/hosts); do
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 607
diff changeset
    52
        update_hosts_forward    "var/zones/hosts/$hosts"            "$hosts" \
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 607
diff changeset
    53
            "etc/hosts/$hosts"
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    54
    done
559
3208cd6540dc update: restructure zones/, manage .pvl
Tero Marttila <terom@paivola.fi>
parents: 555
diff changeset
    55
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    56
    log "Updating DHCP hosts..."
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    57
    for hosts in $(list_files etc/hosts); do
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 607
diff changeset
    58
        update_hosts_dhcp       "var/dhcp/$hosts.conf"              \
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 607
diff changeset
    59
            "etc/hosts/$hosts"
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    60
    done
607
77df429f63a3 update: full host forward/dhcp/reverse zones
Tero Marttila <terom@paivola.fi>
parents: 605
diff changeset
    61
77df429f63a3 update: full host forward/dhcp/reverse zones
Tero Marttila <terom@paivola.fi>
parents: 605
diff changeset
    62
    log "Updating reverse host zones..."
610
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    63
    for zone in $(list_dirs etc/reverse-zones-hosts); do
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    64
        update_hosts_reverse    "var/zones/hosts/$zone"             "$zone" \
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    65
            etc/reverse-zones-hosts/$zone/*
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    66
    done
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    67
#    for zone in $(list_files etc/zones); do
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    68
#        for reverse_hosts in $(zone_includes_grep var/include-cache/$zone etc/zones/$zone reverse-hosts/); do
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    69
#            prefix="${reverse_hosts%_*}"
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    70
#            hosts="${reverse_hosts#*_}"
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    71
#
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    72
#            update_hosts_reverse    "var/zones/reverse-hosts/${prefix}_${hosts}"    "$prefix" \
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    73
#                "etc/hosts/$hosts"
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    74
#        done
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    75
#    done
584
22b58b938fd0 update: rename deploy_zones -> reload_zones; move related do_* from lib/update.updates -> lib/update.operations where they belong
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
    76
}
585
65bf391fd2f3 update: link + check dhcpd hosts from settings/dhcp/... -> dhcp/...
Tero Marttila <terom@paivola.fi>
parents: 584
diff changeset
    77
584
22b58b938fd0 update: rename deploy_zones -> reload_zones; move related do_* from lib/update.updates -> lib/update.operations where they belong
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
    78
function run_zones {
561
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 560
diff changeset
    79
    log "Copying zone includes..."
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    80
    for zone in $(list_files etc/zones/includes); do
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 607
diff changeset
    81
        copy                "var/zones/includes/$zone"      "etc/zones/includes/$zone"
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    82
    done
541
826103fe3c8c update: abspath; fixup serials log; indent log_cmd
Tero Marttila <terom@paivola.fi>
parents: 540
diff changeset
    83
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    84
    log "Updating zone serials..."
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    85
    for zone in $(list_files etc/zones); do
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 607
diff changeset
    86
        update_serial       "var/serials/$zone"             "etc/zones/$zone" \
610
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
    87
            $(zone_includes var/include-cache/$zone etc/zones/$zone var/zones/)
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 607
diff changeset
    88
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    89
    done
536
7d02a07e0354 update: check_hosts
Tero Marttila <terom@paivola.fi>
parents: 533
diff changeset
    90
561
39799fc994e9 update: unify [check/copy/update/link]_[hosts/zone/serial]
Tero Marttila <terom@paivola.fi>
parents: 560
diff changeset
    91
    log "Updating zones..."
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    92
    for zone in $(list_files etc/zones); do
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 607
diff changeset
    93
        update_zone         "var/zones/$zone"               "etc/zones/$zone"       "var/serials/$zone"
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    94
    done
533
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 532
diff changeset
    95
26e789db3f72 update: named-checkzone
Tero Marttila <terom@paivola.fi>
parents: 532
diff changeset
    96
    log "Testing zones..."
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    97
    for zone in $(list_files etc/zones); do
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    98
        # check_zone          var/zones/$zone     $zone
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
    99
        log_warn "TODO: check_zone $zone"
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
   100
    done
589
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 587
diff changeset
   101
}
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 587
diff changeset
   102
584
22b58b938fd0 update: rename deploy_zones -> reload_zones; move related do_* from lib/update.updates -> lib/update.operations where they belong
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
   103
function run_deploy {
22b58b938fd0 update: rename deploy_zones -> reload_zones; move related do_* from lib/update.updates -> lib/update.operations where they belong
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
   104
    log "Reload zones..."
22b58b938fd0 update: rename deploy_zones -> reload_zones; move related do_* from lib/update.updates -> lib/update.operations where they belong
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
   105
        reload_zones
567
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
   106
589
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 587
diff changeset
   107
    log "Reload dhcp..."
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 587
diff changeset
   108
        reload_dhcp
482d06935d96 update: cmd_test; check_dhcp_hosts after do_reload_zones; reload_dhcp
Tero Marttila <terom@paivola.fi>
parents: 587
diff changeset
   109
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
   110
    log "Commit etc..."
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
   111
        commit_data     etc
567
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
   112
}
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
   113
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
   114
## Main entry point
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
   115
function main {
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
   116
    parse_args "$@"
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
   117
585
65bf391fd2f3 update: link + check dhcpd hosts from settings/dhcp/... -> dhcp/...
Tero Marttila <terom@paivola.fi>
parents: 584
diff changeset
   118
    ## Input dirs
610
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
   119
    for dir in etc etc/zones etc/hosts opt; do
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
   120
        [ -d $dir ] || die "Missing directory: $dir"
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
   121
    done
567
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
   122
    
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
   123
    ## Output dirs
608
4ad9c9b7cd0e update: many things
Tero Marttila <terom@paivola.fi>
parents: 607
diff changeset
   124
    for dir in var var/dhcp var/zones var/serials var/include-cache; do
585
65bf391fd2f3 update: link + check dhcpd hosts from settings/dhcp/... -> dhcp/...
Tero Marttila <terom@paivola.fi>
parents: 584
diff changeset
   125
        ensure_dir  $dir
65bf391fd2f3 update: link + check dhcpd hosts from settings/dhcp/... -> dhcp/...
Tero Marttila <terom@paivola.fi>
parents: 584
diff changeset
   126
    done
600
b0c0e3e80c39 update: move zones/serials/dhcp to ./var; requires update -FR and bind/dhcpd config update
Tero Marttila <terom@paivola.fi>
parents: 599
diff changeset
   127
    
b0c0e3e80c39 update: move zones/serials/dhcp to ./var; requires update -FR and bind/dhcpd config update
Tero Marttila <terom@paivola.fi>
parents: 599
diff changeset
   128
    # sub-$ZONES
610
cb4607af8663 add etc/reverse-zones-hosts support, in preference to a magical include-based mechanism..
Tero Marttila <terom@paivola.fi>
parents: 608
diff changeset
   129
    for dir in var/zones/includes var/zones/hosts var/zones/reverse-hosts; do
605
26a307558602 update update
Tero Marttila <terom@paivola.fi>
parents: 603
diff changeset
   130
        ensure_dir  $dir
553
1a8bc67b1eb7 update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents: 552
diff changeset
   131
    done
1a8bc67b1eb7 update: link_zones for paivola.*.zone -> paivola.zone
Tero Marttila <terom@paivola.fi>
parents: 552
diff changeset
   132
567
8f49e2f51c0d update: cleanup, docs
Tero Marttila <terom@paivola.fi>
parents: 566
diff changeset
   133
    ## Go
584
22b58b938fd0 update: rename deploy_zones -> reload_zones; move related do_* from lib/update.updates -> lib/update.operations where they belong
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
   134
    run_hosts
22b58b938fd0 update: rename deploy_zones -> reload_zones; move related do_* from lib/update.updates -> lib/update.operations where they belong
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
   135
    run_zones
22b58b938fd0 update: rename deploy_zones -> reload_zones; move related do_* from lib/update.updates -> lib/update.operations where they belong
Tero Marttila <terom@paivola.fi>
parents: 581
diff changeset
   136
    run_deploy
525
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   137
}
aeb106b9487c update: update zonefiles
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   138
530
f4457348faa0 update: function update { ... }, color logging, update_serial
Tero Marttila <terom@paivola.fi>
parents: 525
diff changeset
   139
main "$@"