# this is # ---------------------------------------------------------------------------- # $Id$ # Copyright (c) 2012 by Daniel Armbruster # ---- # This file is part of csback. # # csback is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # csback is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with csback. If not, see . # ---- # Daniel Armbruster 15/01/2012 # # REVISIONS and CHANGES # 15/01/2012 V0.1 Daniel Armbruster # 16/01/2012 V0.2 added package rule # 28/02/2012 V0.3 smaller modifications - added csbackobs.py # 27/04/2012 V0.4 added lsYears.py - removed with V0.5 (deprecated) # 13/02/2013 V0.5 added csbackresc.py and ssh/scp specific checks # 14/02/2013 V0.6 added csclean.sh # 28/02/2013 V0.7 added csbackscp.py # 08/11/2013 V0.8 several csbackgen.py tests implemented which are related to # the time exclusion commandline arguments # # ---------------------------------------------------------------------------- PROGRAMS=csback2cron.py csbackntfy.py csbackgen.py csbackchk.py csbackobs.py \ csbackresc.py csbackscp.py csclean.sh .PHONY: all all: install doc .PHONY: install install: installscripts .PHONY: doc doc: pdfdoc # ---------------------------------------------------------------------------- LOCBINDIR=~/bin RSYNC=$(shell env which rsync) CRON=$(shell ps -ef | grep -v grep | grep -cw cron) SYSLOGNG=$(shell ps -ef | grep -v grep | grep -cw syslog) LOGROTATE=$(shell if [ -d /etc/logrotate.d/ ]; then echo logrotate; fi) PYTHON=$(shell env which python) SSH=$(shell env which ssh) SCP=$(shell env which scp) # ---------------------------------------------------------------------------- .PHONY: clean clean: /bin/rm -rvf $(addprefix $(LOCBINDIR)/,$(patsubst %.py,%,$(PROGRAMS))) /bin/rm -rvf $(addprefix $(LOCBINDIR)/,$(patsubst %.sh,%,$(PROGRAMS))) /bin/rm -fv flist *.bak $(MAKE) -C doc clean # ---------------------------------------------------------------------------- # vim supporter .PHONY: flist flist: Makefile $(wildcard *.py *.sh *.conf doc/*.tex) \ csbackrc COPYING doc/Makefile README README.history LICENSE.GPLv3 echo $^ | tr ' ' '\n' | sort > $@ .PHONY: edit edit: flist; vim $< # ---------------------------------------------------------------------------- CHECKVAR=$(if $($(1)),,$(error ERROR: missing variable $(1))) CHECKVARS=$(foreach var,$(1),$(call CHECKVAR,$(var))) CHECKPROG=$(if $($(1)),,$(error ERROR: missing program $(1))) CHECKPROGS=$(foreach prog,$(1),$(call CHECKPROG,$(prog))) $(call CHECKVARS, LOCBINDIR) $(call CHECKPROGS, RSYNC CRON SYSLOGNG LOGROTATE PYTHON SSH SCP) # ---------------------------------------------------------------------------- PWD=$(shell env pwd) $(addprefix $(LOCBINDIR)/, $(PROGRAMS)): $(addprefix $(PWD)/, $(PROGRAMS)) $(LOCBINDIR)/%: %.py mkdir -pv $(LOCBINDIR) ln -fs $(addprefix $(PWD)/,$<) $@ chmod +x $(addprefix $(PWD)/,$<) $(LOCBINDIR)/%: %.sh mkdir -pv $(LOCBINDIR) ln -fs $(addprefix $(PWD)/,$<) $@ chmod +x $(addprefix $(PWD)/,$<) installscripts: $(addprefix $(LOCBINDIR)/, $(patsubst %.py,%,$(PROGRAMS)) \ $(patsubst %.sh,%,$(PROGRAMS))) # ---------------------------------------------------------------------------- pdfdoc: $(MAKE) -C doc pdf # ============================================================================ # create package # -------------- # version code based on current date VERSIONCODE=$(shell date +'%Y%m%d') # name of the package (including version code) THEPACKAGE=csback$(VERSIONCODE) # directory to place temporary files in TMPDIR=$(HOME)/tmp # path where the package will be created TMPPATH=$(TMPDIR)/$(THEPACKAGE) # tar file PACKAGETARFILE=$(THEPACKAGE).tar # gzipped tar file PACKAGEGZIPFILE=$(PACKAGETARFILE).gz # bzipped tar file PACKAGEBZIPFILE=$(PACKAGETARFILE).bz2 # list of README files to be obtained from the subversion repository INFOFILESFROMSVNWITHPATH=src/LICENSE.GPL # list of files to be created INFOFILESFROMSVN=$(notdir $(INFOFILESFROMSVNWITHPATH)) DIRFROMSVNWITHPATH=src/python/csback # list of files to be created DIRFROMSVN=$(notdir $(DIRFROMSVNWITHPATH)) # rule for the creation of README files from the repository $(addprefix $(TMPPATH)/,$(INFOFILESFROMSVN)): mkdir -pv $(dir $@) svn export \ $(SVNTF)/trunk/$(filter %$(notdir $@),$(INFOFILESFROMSVNWITHPATH)) $@ # rule for the creation of csback files from the repository $(addprefix $(TMPPATH)/,$(DIRFROMSVN)): mkdir -pv $(dir $@) svn export $(SVNTF)/trunk/$(filter %$(notdir $@),$(DIRFROMSVNWITHPATH)) $@ # create package tar archive $(TMPDIR)/$(PACKAGETARFILE): $(TMPPATH) /bin/rm -fv $@ cd $ $@; \ else \ echo "TEST $${testID}: ERROR ($(CONFIG))" > $@; \ fi test0: $(TESTRESULTDIR)/test0.result $(TESTRESULTDIR)/test0.result: $(TESTRESULTDIR)/test0.csbackgen.result \ $(TESTRESULTDIR)/test0.find.result $(TESTRESULTDIR)/test0.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--mtime 0")) $(eval FIND_CONFIG:= $(shell echo "-mtime 0")) @echo -ne "----\n" @echo -ne "TEST 0: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort > $@ $(TESTRESULTDIR)/test0.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) -type f $(FIND_CONFIG) -printf "%f\n" | sort > $@ test1: $(TESTRESULTDIR)/test1.result $(TESTRESULTDIR)/test1.result: $(TESTRESULTDIR)/test1.csbackgen.result \ $(TESTRESULTDIR)/test1.find.result $(TESTRESULTDIR)/test1.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--mtime 1")) $(eval FIND_CONFIG:= $(shell echo "-mtime 1")) @echo -ne "----\n" @echo -ne "TEST 1: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | \ sort | grep -v -e "checksumfile.cs" > $@ $(TESTRESULTDIR)/test1.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) -type f $(FIND_CONFIG) -printf "%f\n" | sort > $@ test2: $(TESTRESULTDIR)/test2.result $(TESTRESULTDIR)/test2.result: $(TESTRESULTDIR)/test2.csbackgen.result \ $(TESTRESULTDIR)/test2.find.result $(TESTRESULTDIR)/test2.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--mtime -1")) $(eval FIND_CONFIG:= $(shell echo "-mtime -1")) @echo -ne "----\n" @echo -ne "TEST 2: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort > $@ $(TESTRESULTDIR)/test2.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) -type f $(FIND_CONFIG) -printf "%f\n" | sort > $@ test3: $(TESTRESULTDIR)/test3.result $(TESTRESULTDIR)/test3.result: $(TESTRESULTDIR)/test3.csbackgen.result \ $(TESTRESULTDIR)/test3.find.result $(TESTRESULTDIR)/test3.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--mtime +1")) $(eval FIND_CONFIG:= $(shell echo "-mtime +1")) @echo -ne "----\n" @echo -ne "TEST 3: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | \ sort | grep -v -e "checksumfile.cs" > $@ $(TESTRESULTDIR)/test3.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) -type f $(FIND_CONFIG) -printf "%f\n" | sort > $@ test4: $(TESTRESULTDIR)/test4.result $(TESTRESULTDIR)/test4.result: $(TESTRESULTDIR)/test4.csbackgen.result \ $(TESTRESULTDIR)/test4.find.result $(TESTRESULTDIR)/test4.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--mtime +1 --mtime -3")) $(eval FIND_CONFIG:= $(shell echo "-mtime +1 -mtime -3")) @echo -ne "----\n" @echo -ne "TEST 4: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort | \ grep -v -e "checksumfile.cs" > $@ $(TESTRESULTDIR)/test4.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) -type f $(FIND_CONFIG) -printf "%f\n" | sort > $@ # --daystart related tests test5: $(TESTRESULTDIR)/test5.result $(TESTRESULTDIR)/test5.result: $(TESTRESULTDIR)/test5.csbackgen.result \ $(TESTRESULTDIR)/test5.find.result $(TESTRESULTDIR)/test5.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--daystart --mtime 0")) $(eval FIND_CONFIG:= $(shell echo "-daystart -type f -mtime 0")) @echo -ne "----\n" @echo -ne "TEST 5: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort > $@ $(TESTRESULTDIR)/test5.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) $(FIND_CONFIG) -printf "%f\n" | sort > $@ test6: $(TESTRESULTDIR)/test6.result $(TESTRESULTDIR)/test6.result: $(TESTRESULTDIR)/test6.csbackgen.result \ $(TESTRESULTDIR)/test6.find.result $(TESTRESULTDIR)/test6.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--daystart --mtime 1")) $(eval FIND_CONFIG:= $(shell echo "-daystart -type f -mtime 1")) @echo -ne "----\n" @echo -ne "TEST 6: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort | \ grep -v -e "checksumfile.cs" > $@ $(TESTRESULTDIR)/test6.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) $(FIND_CONFIG) -printf "%f\n" | sort > $@ test7: $(TESTRESULTDIR)/test7.result $(TESTRESULTDIR)/test7.result: $(TESTRESULTDIR)/test7.csbackgen.result \ $(TESTRESULTDIR)/test7.find.result $(TESTRESULTDIR)/test7.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--daystart --mtime -2")) $(eval FIND_CONFIG:= $(shell echo "-daystart -type f -mtime -2")) @echo -ne "----\n" @echo -ne "TEST 7: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort > $@ $(TESTRESULTDIR)/test7.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) $(FIND_CONFIG) -printf "%f\n" | sort > $@ test8: $(TESTRESULTDIR)/test8.result $(TESTRESULTDIR)/test8.result: $(TESTRESULTDIR)/test8.csbackgen.result \ $(TESTRESULTDIR)/test8.find.result $(TESTRESULTDIR)/test8.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--daystart --mtime +1")) $(eval FIND_CONFIG:= $(shell echo "-daystart -type f -mtime +1")) @echo -ne "----\n" @echo -ne "TEST 8: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort | \ grep -v -e 'checksumfile.cs' > $@ $(TESTRESULTDIR)/test8.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) $(FIND_CONFIG) -printf "%f\n" | sort > $@ test9: $(TESTRESULTDIR)/test9.result $(TESTRESULTDIR)/test9.result: $(TESTRESULTDIR)/test9.csbackgen.result \ $(TESTRESULTDIR)/test9.find.result $(TESTRESULTDIR)/test9.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--daystart --mtime +1 --mtime -3")) $(eval FIND_CONFIG:= $(shell echo "-daystart -mtime +1 -mtime -3")) @echo -ne "----\n" @echo -ne "TEST 9: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort | \ grep -v -e "checksumfile.cs" > $@ $(TESTRESULTDIR)/test9.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) $(FIND_CONFIG) -printf "%f\n" | sort > $@ test10: $(TESTRESULTDIR)/test10.result $(TESTRESULTDIR)/test10.result: $(TESTRESULTDIR)/test10.csbackgen.result \ $(TESTRESULTDIR)/test10.find.result $(TESTRESULTDIR)/test10.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--mmin 3")) $(eval FIND_CONFIG:= $(shell echo "-type f -mmin 3")) @echo -ne "----\n" @echo -ne "TEST 10: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort | \ grep -v -e "checksumfile.cs" > $@ $(TESTRESULTDIR)/test10.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) $(FIND_CONFIG) -printf "%f\n" | sort > $@ test11: $(TESTRESULTDIR)/test11.result $(TESTRESULTDIR)/test11.result: $(TESTRESULTDIR)/test11.csbackgen.result \ $(TESTRESULTDIR)/test11.find.result $(TESTRESULTDIR)/test11.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--mmin -3")) $(eval FIND_CONFIG:= $(shell echo "-type f -mmin -3")) @echo -ne "----\n" @echo -ne "TEST 11: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort > $@ $(TESTRESULTDIR)/test11.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) $(FIND_CONFIG) -printf "%f\n" | sort > $@ test12: $(TESTRESULTDIR)/test12.result $(TESTRESULTDIR)/test12.result: $(TESTRESULTDIR)/test12.csbackgen.result \ $(TESTRESULTDIR)/test12.find.result $(TESTRESULTDIR)/test12.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--mmin +2")) $(eval FIND_CONFIG:= $(shell echo "-type f -mmin +2")) @echo -ne "----\n" @echo -ne "TEST 12: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort | \ grep -v -e "checksumfile.cs" > $@ $(TESTRESULTDIR)/test12.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) $(FIND_CONFIG) -printf "%f\n" | sort > $@ test13: $(TESTRESULTDIR)/test13.result $(TESTRESULTDIR)/test13.result: $(TESTRESULTDIR)/test13.csbackgen.result \ $(TESTRESULTDIR)/test13.find.result $(TESTRESULTDIR)/test13.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--mmin +1 --mmin -3")) $(eval FIND_CONFIG:= $(shell echo "-type f -mmin +1 -mmin -3")) @echo -ne "----\n" @echo -ne "TEST 13: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort | \ grep -v -e "checksumfile.cs" > $@ $(TESTRESULTDIR)/test13.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) $(FIND_CONFIG) -printf "%f\n" | sort > $@ test100: $(TESTRESULTDIR)/test100.result $(TESTRESULTDIR)/test100.result: $(TESTRESULTDIR)/test100.csbackgen.result \ $(TESTRESULTDIR)/test100.find.result $(TESTRESULTDIR)/test100.csbackgen.result: testEnv $(TESTDIR) $(TESTRESULTDIR) $(eval CONFIG:= $(shell echo "--mmin 0")) $(eval FIND_CONFIG:= $(shell echo "-type f -mmin 0")) @echo -ne "----\n" @echo -ne "TEST 100: $(CONFIG)\n" @echo -ne "----\n" csbackgen -n --debug $(CONFIG) $(word 2,$^) | \ sed -n '/List of excluded files:/,/A checksum will be generated/p' | \ sed -e '1d' -e '$$d' | \ awk '{$$1=$$2=$$3=""; print $$0}' | sed -e 's/^[[:space:]]*//' | sort | \ grep -v -e "checksumfile.cs" > $@ $(TESTRESULTDIR)/test100.find.result: testEnv $(TESTDIR) $(TESTRESULTDIR) find $(word 2,$^) $(FIND_CONFIG) -printf "%f\n" | sort > $@ # ----- END OF Makefile -----