From a060fed3c1d17cbed6a40c4c861006f739e42228 Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Fri, 15 Jun 2007 18:07:45 +0100 Subject: [PATCH] Overhaul for service role names and split-horizon craziness. Organization: Straylight/Edgeware From: Mark Wooding To add to the fun, the Makefile is now m4-preprocessed. Output files are now written to subdirectories. --- .gitignore | 1 + Makefile | 44 ------------------ Makefile.m4 | 120 +++++++++++++++++++++++++++++++++++++++++++++++++ distorted.lisp | 24 ++++++---- 4 files changed, 137 insertions(+), 52 deletions(-) delete mode 100644 Makefile create mode 100644 Makefile.m4 diff --git a/.gitignore b/.gitignore index c26be56..2184fad 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ publish *.lof *.lot *.toc +Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index a0c2d66..0000000 --- a/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -## Makefile for mdw's zones - -ZONE = zone - -DISTORTED_ZONES = \ - distorted.org.uk.zone \ - 198.29.172.in-addr.arpa.zone \ - 199.29.172.in-addr.arpa.zone -HARLEQUIN_ZONES = \ - harlequin.org.uk.zone -ALL_ZONES = \ - $(DISTORTED_ZONES) \ - $(HARLEQUIN_ZONES) - -DOCS = distorted.tex -DOC_OUTPUTS = $(foreach suffix,dvi ps,\ - $(patsubst %.tex,%.$(suffix),$(DOCS))) - -all: $(ALL_ZONES) $(DOC_OUTPUTS) - -publish:; mkdir publish - -install: all publish - for i in $(ALL_ZONES); do \ - cmp $$i publish/$$i >/dev/null 2>&1 && continue; \ - cp $$i publish/$$i.new && mv publish/$$i.new publish/$$i; \ - echo -n "$${i%.zone}: "; userv root named-reload $${i%.zone}; \ - done - -$(DISTORTED_ZONES): distorted.lisp hosts.lisp - $(ZONE) $< - -$(HARLEQUIN_ZONES): harlequin.lisp hosts.lisp - $(ZONE) $< - -%.dvi: %.tex - latex $< - latex $< - -%.ps: %.dvi - dvips -o $@ $< - -clean: - rm -f $(ALL_ZONES) *.toc *.lof *.lot *.log *.dvi *.ps *.aux diff --git a/Makefile.m4 b/Makefile.m4 new file mode 100644 index 0000000..49b4376 --- /dev/null +++ b/Makefile.m4 @@ -0,0 +1,120 @@ +### Makefile for mdw's zones +### +### Preprocessed with m4, for the sake of madness + +m4_divert(-1) +###-------------------------------------------------------------------------- +### M4 trickery. + +m4_changequote([, ]) +m4_define([_dolist], [m4_pushdef([$1])__loop($@)m4_popdef([$1])]) +m4_define([__loop], [m4_ifelse([$2], [()], ,m4_dnl +[m4_define([$1], __first$2)$3[]__loop([$1],(m4_shift$2),[$3])])]) +m4_define([__first], [$1]) + +m4_define([DOMAIN], [m4_dnl +m4_pushdef([_undivert], [m4_divert(]m4_divnum[)m4_popdef([_undivert])])m4_dnl +m4_divert(10)m4_dnl +$1_SUBNETS = _dolist([_subnet], [($2)], [ _subnet]) +$1_ZONES = _dolist([_zone], [($3)], [ _zone]) +$1_ZONE_FILES = _dolist([_subnet], [($2)], + [_dolist([_zone], [($3)], [ _subnet/_zone.zone])]) +ALL_SUBNETS += $($1_SUBNETS) +ALL_ZONES += $($1_ZONES) +ALL_ZONE_FILES += $($1_ZONE_FILES) +m4_divert(30)m4_dnl +$($1_ZONE_FILES): $1.lisp $(ZONEDEPS) + mkdir -p $($1_SUBNETS)m4_dnl +_dolist([_subnet], [($2)], [ + $(ZONE) -d _subnet/ -s _subnet $1.lisp]) +_undivert[]m4_dnl +]) + +m4_divert(-1) +###-------------------------------------------------------------------------- +### Domains. + +DOMAIN([distorted], [inet, fretwank], + [distorted.org.uk, 198.29.172.in-addr.arpa, 199.29.172.in-addr.arpa]) +DOMAIN([harlequin], [inet], [harlequin.org.uk]) + +m4_divert(0) +###-------------------------------------------------------------------------- +### Make configuration. + +ZONE = zone + +ALL_ZONES = +ALL_ZONE_FILES = +ALL_SUBNETS = + +PUBLISH = publish + +ZONEDEPS = hosts.lisp + +DOCS = distorted.tex +DOC_OUTPUTS = $(foreach suffix,dvi ps,\ + $(patsubst %.tex,%.$(suffix),$(DOCS))) + +m4_divert(20) +###-------------------------------------------------------------------------- +### Rules + +all: $(ALL_ZONE_FILES) $(DOC_OUTPUTS) + +install: all + ## + ## Make directories + rm -rf $(PUBLISH).new + mkdir $(PUBLISH).new + cd $(PUBLISH).new && mkdir $(sort $(ALL_SUBNETS)) + ## + ## Copy zone files to output + for i in $(ALL_ZONE_FILES); do \ + cp $$i $(PUBLISH).new/$$i; \ + done + ## + ## Make links as necessary + cd $(PUBLISH).new; \ + for i in $(sort $(ALL_SUBNETS)); do \ + test $$i = inet && continue; \ + for z in $(sort $(ALL_ZONES)); do \ + test -f $$i/$$z.zone || ln -s ../inet/$$z.zone $$i/$$z.zone; \ + done; \ + done + ## + ## Switch over + rm -rf $(PUBLISH).old + mv $(PUBLISH) $(PUBLISH).old + mv $(PUBLISH).new $(PUBLISH) + ## + ## Get nameserver to reload changed zones + for i in $(sort $(ALL_SUBNETS)); do \ + for z in $(sort $(ALL_ZONES)); do \ + cmp $(PUBLISH)/$$i/$$z.zone $(PUBLISH).old/$$i/$$z.zone \ + >/dev/null 2>&1 && continue; \ + echo -n "$$z ($$i): "; \ + userv root named-reload $$z $$i; \ + done; \ + done + ## + ## Clear up mess + rm -rf $(PUBLISH).old + +%.dvi: %.tex + latex $< + latex $< + +%.ps: %.dvi + dvips -o $@ $< + +m4_divert(40) +Makefile: Makefile.m4 + m4 -P $< >$@.new + mv $@.new $@ + +clean: + rm -f $(ALL_ZONE_FILES) *.toc *.lof *.lot *.log *.dvi *.ps *.aux + rmdir $(sort $(ALL_SUBNETS)) + +###----- That's all, folks -------------------------------------------------- diff --git a/distorted.lisp b/distorted.lisp index e851922..d661a67 100644 --- a/distorted.lisp +++ b/distorted.lisp @@ -24,6 +24,9 @@ (defhost evolution (unsafe)) (defhost evolution.wireless (wireless)) (defhost fuzzface (virtual)) (defhost mz (virtual)) +(if (zone-preferred-subnet-p 'fretwank) + (defhost www-frontend metalzone) + (defhost www-frontend guvnor.demon)) (setf *default-zone-admin* "hostmaster@distorted.org.uk") (setf *default-zone-source* 'guvnor.distorted.org.uk.) @@ -36,24 +39,29 @@ (defzone distorted.org.uk (guvnor.ns :ip guvnor.demon)) ;; ;; Mail servers - ((@ lists bugs cryptomail) :mx guvnor) + ((@ mail lists bugs cryptomail) :mx mail) ;; ;; Colocated services - ((www ftp wiki git) :a boyle.nsict.org) + ;;((www ftp git) (inet :svc boyle.nsict.org) (fretwank :svc metalzone)) ;; ;; Entry is via little port-forwarding box - (guvnor (demon :a guvnor.demon) - (fretwank :a guvnor)) + (guvnor (inet :a guvnor.demon) (fretwank :a guvnor)) ;; ;; Wireless gateway - (evolution (fretwank :a evolution) - (wireless :a evolution.wireless)) + (evolution (fretwank :a evolution) (wireless :a evolution.wireless)) ;; ;; Local services - (bugs :a guvnor.demon) + (@ :svc www-frontend) + ((www ftp git bugs mail rawk) + (inet :svc guvnor.demon) + (fretwank :svc metalzone)) + ;; + ;; Internal services + ((news www-cache) + (fretwank :svc metalzone)) ;; ;; Wired ethernet - (metalzone (fretwank :a metalzone)) + (metalzone (inet :a guvnor.demon) (fretwank :a metalzone)) (tubescreamer (fretwank :a tubescreamer)) (obsidian (fretwank :a obsidian)) (fuzzface (virtual :a fuzzface)) -- [mdw]