170 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
##### PARAMS
 | 
						|
 | 
						|
include Makefile.conf
 | 
						|
 | 
						|
##### TOOLS
 | 
						|
 | 
						|
OPENSSL=openssl
 | 
						|
 | 
						|
TAR=tar
 | 
						|
GZIP=gzip
 | 
						|
 | 
						|
###### DIRS
 | 
						|
 | 
						|
KEYSDIR = ./keys
 | 
						|
CFGDIR = ./configs
 | 
						|
TMPDIR = ./tmp
 | 
						|
 | 
						|
###### FILES
 | 
						|
 | 
						|
hosts_keys_pub=$(foreach net,$(nets), \
 | 
						|
				$(foreach host,$(net_$(net)_hosts), \
 | 
						|
					$(KEYSDIR)/$(net)/$(host).pub \
 | 
						|
				) \
 | 
						|
			)
 | 
						|
 | 
						|
hosts_keys_priv=$(foreach net,$(nets), \
 | 
						|
				$(foreach host,$(net_$(net)_hosts), \
 | 
						|
					$(KEYSDIR)/$(net)/$(host).priv \
 | 
						|
				) \
 | 
						|
			)
 | 
						|
 | 
						|
hosts_tgz=$(foreach net,$(nets), \
 | 
						|
				$(foreach host,$(net_$(net)_hosts), \
 | 
						|
					$(CFGDIR)/$(net)/$(host).tar.gz \
 | 
						|
				) \
 | 
						|
			)
 | 
						|
 | 
						|
nets_hosts=$(foreach net,$(nets), \
 | 
						|
				$(foreach host,$(net_$(net)_hosts), \
 | 
						|
					$(TMPDIR)/hosts/$(net)/$(host) \
 | 
						|
				) \
 | 
						|
			)
 | 
						|
 | 
						|
.PHONY: all directories misc hosts_keys hosts_tgz clean cleanall cleantmp cleancfg cleankeys
 | 
						|
 | 
						|
### ALL ###
 | 
						|
 | 
						|
all: directories hosts_tgz
 | 
						|
 | 
						|
### CLEAN ###
 | 
						|
 | 
						|
clean: cleantmp cleancfg
 | 
						|
cleanall: clean cleankeys
 | 
						|
 | 
						|
cleantmp:
 | 
						|
	-rm -rv $(TMPDIR)
 | 
						|
 | 
						|
cleancfg:
 | 
						|
	-rm -rv $(CFGDIR)
 | 
						|
 | 
						|
cleankeys:
 | 
						|
	-rm -rv $(KEYSDIR)
 | 
						|
 | 
						|
### DIRECTORIES ###
 | 
						|
 | 
						|
directories: $(TMPDIR) $(KEYSDIR) $(CFGDIR)
 | 
						|
 | 
						|
$(TMPDIR) $(KEYSDIR) $(CFGDIR):
 | 
						|
	mkdir -p $@
 | 
						|
 | 
						|
### MISC ###
 | 
						|
 | 
						|
misc:
 | 
						|
	true
 | 
						|
 | 
						|
### KEYS
 | 
						|
 | 
						|
hosts_keys: $(hosts_keys_pub) $(hosts_keys_priv)
 | 
						|
 | 
						|
$(KEYSDIR)/%.pem:
 | 
						|
	mkdir -p $(@D)
 | 
						|
	$(OPENSSL) genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out $@
 | 
						|
 | 
						|
$(KEYSDIR)/%.pub: $(KEYSDIR)/%.pem
 | 
						|
	$(OPENSSL) rsa -in $(KEYSDIR)/$*.pem -RSAPublicKey_out > $@
 | 
						|
 | 
						|
$(KEYSDIR)/%.priv: $(KEYSDIR)/%.pem
 | 
						|
	$(OPENSSL) rsa -in $(KEYSDIR)/$*.pem -text | sed -ne '/-----BEGIN RSA PRIVATE KEY-----/,/-----END RSA PRIVATE KEY-----/p' > $@
 | 
						|
 | 
						|
### NETS HOSTS
 | 
						|
 | 
						|
nets_hosts: hosts_keys $(nets_hosts)
 | 
						|
 | 
						|
$(TMPDIR)/hosts/%: net=$(firstword $(subst /, ,$*))
 | 
						|
$(TMPDIR)/hosts/%: host=$(@F)
 | 
						|
$(TMPDIR)/hosts/%: pubkey=$(KEYSDIR)/$(net)/$(host).pub
 | 
						|
$(TMPDIR)/hosts/%: pubaddr=$(net_$(net)_$(host)_public_address)
 | 
						|
$(TMPDIR)/hosts/%: pubport=$(net_$(net)_$(host)_public_port)
 | 
						|
$(TMPDIR)/hosts/%: subnets=$(net_$(net)_$(host)_local_subnets)
 | 
						|
 | 
						|
$(TMPDIR)/hosts/%:
 | 
						|
	@echo hostconf net: $(net)
 | 
						|
	@echo hostconf host: $(host)
 | 
						|
	@echo hostconf pubkey: $(pubkey)
 | 
						|
	@mkdir -p $(@D)
 | 
						|
	@echo Generating $@ for $(*F)
 | 
						|
	@
 | 
						|
	# Add Hostname
 | 
						|
	if [ -n "$(pubaddr)" ]; then echo "Address=$(pubaddr)" >> $@ ; fi
 | 
						|
	# Add Port
 | 
						|
	if [ -n "$(pubport)" ]; then echo "Port=$(pubport)" >> $@ ; fi
 | 
						|
	# Add Subnets
 | 
						|
	for subnet in $(subnets); do echo Subnet=$$subnet ; done >> $@
 | 
						|
	echo "" >> $@
 | 
						|
	# Add pubic key
 | 
						|
	cat $(pubkey) >> $@
 | 
						|
 | 
						|
### TINC.CONF
 | 
						|
 | 
						|
$(TMPDIR)/tinc.conf/%: net=$(firstword $(subst /, ,$*))
 | 
						|
$(TMPDIR)/tinc.conf/%: host=$(@F)
 | 
						|
$(TMPDIR)/tinc.conf/%:
 | 
						|
	@echo tinc.conf net: $(net)
 | 
						|
	@echo tinc.conf host: $(host)
 | 
						|
	@mkdir -p $(@D)
 | 
						|
	@echo Generating $@ for $(*F)
 | 
						|
	# Add Hostname
 | 
						|
	echo "Name=$(*F)" > $@
 | 
						|
	# Add ConnectTo
 | 
						|
	for peer in $(net_$(net)_hosts); do if [ "$$peer" != $(host) ]; then echo ConnectTo=$$peer ; fi; done >> $@
 | 
						|
	echo "" >> $@
 | 
						|
 | 
						|
### TINC-UP
 | 
						|
 | 
						|
$(TMPDIR)/tinc-up/%: net=$(firstword $(subst /, ,$*))
 | 
						|
$(TMPDIR)/tinc-up/%: host=$(@F)
 | 
						|
$(TMPDIR)/tinc-up/%: localaddr=$(net_$(net)_$(host)_local_address)
 | 
						|
$(TMPDIR)/tinc-up/%:
 | 
						|
	@echo tinc-up net: $(net)
 | 
						|
	@echo tinc-up host: $(host)
 | 
						|
	@mkdir -p $(@D)
 | 
						|
	@echo Generating $@ for $(*F)
 | 
						|
	sed -e 's|^ADDRESS=$$|ADDRESS=$(localaddr)|' scripts/tinc-up > $@
 | 
						|
 | 
						|
### CONFIG ARCHIVES
 | 
						|
 | 
						|
hosts_tgz: hosts_keys $(hosts_tgz)
 | 
						|
 | 
						|
.SECONDEXPANSION:
 | 
						|
$(CFGDIR)/%.tar.gz: net=$(firstword $(subst /, ,$*))
 | 
						|
$(CFGDIR)/%.tar.gz: host=$(basename $(basename $(@F)))
 | 
						|
$(CFGDIR)/%.tar.gz: $(TMPDIR)/tinc.conf/% $(TMPDIR)/tinc-up/% $(nets_hosts)
 | 
						|
	@echo Generating $@ for $(net) - $(host)
 | 
						|
	@echo hosts_tgz net: $(net)
 | 
						|
	@echo hosts_tgz host: $(host)
 | 
						|
	@mkdir -p $(@D)
 | 
						|
	$(TAR) --append --file $(basename $@) --directory=$(KEYSDIR)/                --transform='s|$(host).priv|rsa_key.priv|' --mode=0600 $(net)/$(host).priv
 | 
						|
 | 
						|
	$(TAR) --append --file $(basename $@) --directory=$(TMPDIR)/hosts            --transform='s|^$(net)|$(net)/hosts|' $(net)
 | 
						|
 | 
						|
	$(TAR) --append --file $(basename $@) --directory=$(TMPDIR)/tinc.conf/$(net) --transform='s|$(host)|$(net)/tinc.conf|' $(host)
 | 
						|
 | 
						|
#	$(TAR) --append --file $(basename $@) --directory=./scripts --transform='s|^|$(net)/|' --mode=0755 tinc-up
 | 
						|
	$(TAR) --append --file $(basename $@) --directory=./scripts --transform='s|^|$(net)/|' --mode=0755 tinc-down
 | 
						|
	$(TAR) --append --file $(basename $@) --directory=./scripts --transform='s|^|$(net)/|' --mode=0755 subnet-up
 | 
						|
	$(TAR) --append --file $(basename $@) --directory=./scripts --transform='s|^|$(net)/|' --mode=0755 subnet-down
 | 
						|
	$(TAR) --append --file $(basename $@) --directory=$(TMPDIR)/tinc-up/$(net)   --transform='s|$(host)|$(net)/tinc-up|' --mode=0755 $(host)
 | 
						|
 | 
						|
	$(GZIP) $(basename $@)
 |