terom@2: #!/bin/bash terom@2: # vim: set ft=sh : terom@2: terom@2: set -ue terom@2: terom@82: if [ $0 == './update' ]; then terom@82: SRV=$(pwd) terom@82: OPT=./opt terom@82: else terom@82: SRV=${SRV:-/srv/dns} terom@82: OPT=${SRV:-/srv/dns/opt} terom@82: cd $SRV terom@82: fi terom@2: terom@82: # charset for files under etc/ terom@82: CHARSET='utf-8' terom@52: terom@82: # External bins terom@82: NAMED_CHECKZONE=/usr/sbin/named-checkzone terom@52: terom@62: DHCPD=/usr/sbin/dhcpd terom@62: DHCPD_CONF=/etc/dhcp/dhcpd.conf terom@66: DHCPD_INIT=/etc/init.d/isc-dhcp-server terom@61: terom@31: HG=/usr/bin/hg terom@58: HG_ARGS=(--config trusted.users=root) terom@58: terom@27: RNDC=/usr/sbin/rndc terom@46: RNDC_KEY=/etc/bind/rndc.key terom@10: terom@82: # Library includes terom@82: source lib/update terom@44: terom@66: ## Flags terom@66: # set by do_reload_zone if zone data has actually been reloaded terom@66: RELOAD_ZONES= terom@21: terom@44: ## Site settings, used as arguments to scripts terom@44: # Origin domain to generate reverse records for in --reverse-zone terom@44: REVERSE_DOMAIN=paivola.fi terom@28: terom@82: ## Do things terom@89: function update { terom@13: log "Testing hosts..." terom@82: for hosts in $(list_files etc/hosts); do terom@82: log_warn "TODO: check_hosts $hosts" terom@82: done terom@36: terom@89: ## Hosts terom@84: log "Updating forward host zones..." terom@93: for zone in $(list_dirs etc/hosts/forward); do terom@93: update_hosts_forward "var/zones/hosts/forward/$zone" "$zone" \ terom@93: etc/hosts/forward/$zone/* terom@82: done terom@36: terom@82: log "Updating DHCP hosts..." terom@82: for hosts in $(list_files etc/hosts); do terom@91: update_hosts_dhcp "var/dhcp/hosts/$hosts.conf" \ terom@85: "etc/hosts/$hosts" terom@82: done terom@84: terom@84: log "Updating reverse host zones..." terom@93: for zone in $(list_dirs etc/hosts/reverse); do terom@93: update_hosts_reverse "var/zones/hosts/reverse/$zone" "$zone" \ terom@93: etc/hosts/reverse/$zone/* terom@87: done terom@62: terom@89: ## Zones terom@38: log "Copying zone includes..." terom@82: for zone in $(list_files etc/zones/includes); do terom@85: copy "var/zones/includes/$zone" "etc/zones/includes/$zone" terom@82: done terom@18: terom@82: log "Updating zone serials..." terom@82: for zone in $(list_files etc/zones); do terom@91: update_serial "var/serials/$zone" \ terom@91: "etc/zones/$zone" $(zone_includes var/include-cache/$zone etc/zones/$zone var/zones/) terom@82: done terom@13: terom@38: log "Updating zones..." terom@82: for zone in $(list_files etc/zones); do terom@85: update_zone "var/zones/$zone" "etc/zones/$zone" "var/serials/$zone" terom@82: done terom@91: terom@91: log "Updating DHCP confs..." terom@91: for conf in $(list_files etc/dhcp); do terom@91: update_dhcp_conf "var/dhcp/$conf" "etc/dhcp/$conf" terom@91: done terom@90: terom@90: ## Check terom@10: log "Testing zones..." terom@82: for zone in $(list_files etc/zones); do terom@90: check_zone "var/zones/$zone" $zone terom@90: done terom@90: terom@91: log "Testing DHCP confs..." terom@90: for conf in var/dhcp/*.conf; do terom@90: check_dhcp $conf terom@82: done terom@66: terom@89: ## Deploy terom@61: log "Reload zones..." terom@61: reload_zones terom@44: terom@66: log "Reload dhcp..." terom@66: reload_dhcp terom@66: terom@89: log "Commit..." terom@89: commit etc terom@44: } terom@44: terom@44: ## Main entry point terom@44: function main { terom@44: parse_args "$@" terom@44: terom@62: ## Input dirs terom@87: for dir in etc etc/zones etc/hosts opt; do terom@82: [ -d $dir ] || die "Missing directory: $dir" terom@82: done terom@44: terom@44: ## Output dirs terom@91: ensure_dir var terom@91: for dir in var/dhcp var/zones var/serials var/include-cache; do terom@62: ensure_dir $dir terom@62: done terom@91: for dir in var/dhcp/hosts; do terom@91: ensure_dir $dir terom@91: done terom@93: for dir in var/zones/includes var/zones/hosts; do terom@93: ensure_dir $dir terom@93: done terom@93: for dir in var/zones/hosts/forward var/zones/hosts/reverse; do terom@82: ensure_dir $dir terom@30: done terom@30: terom@44: ## Go terom@89: update terom@2: } terom@2: terom@7: main "$@"