PS: more Makefiles
This commit is contained in:
		
							
								
								
									
										119
									
								
								slides/makefiles/PS/general_make.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								slides/makefiles/PS/general_make.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | |||||||
|  | # Generalizing Makefiles for All Occasions | ||||||
|  |  | ||||||
|  | - Rules are bad, | ||||||
|  | - standards are good, | ||||||
|  | - habits are better. | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # General Standards | ||||||
|  |  | ||||||
|  | - `make help` | ||||||
|  | - `make check` | ||||||
|  | - `sudo make install` | ||||||
|  |  | ||||||
|  | **NB:** we separate `make` from `make install` so that the files are not build with the user `root` as the owner. | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # Service Standards | ||||||
|  |  | ||||||
|  | - `make backup.tgz` | ||||||
|  | - `make install` | ||||||
|  |  | ||||||
|  | ## Service Backups in Two Files | ||||||
|  |  | ||||||
|  | - `configs`: configuration files, all tracked in git. | ||||||
|  | - `store`: passwords and binary files, not tracked in git. | ||||||
|  |  | ||||||
|  | ## New Abilities Unlocked | ||||||
|  |  | ||||||
|  | - Open Access Administration. | ||||||
|  | - Sharing admin configs with hacker spaces. | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | ## BEHOLD: The Everything Makefile | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  | CONFIGS = $(patsubst /%,%,$(shell cat configs)) | ||||||
|  | STORE = $(patsubst /%,%,$(shell cat store)) | ||||||
|  | CP = mkdir -p $(dir $@) && cp -a | ||||||
|  | IGNORE_FILE = $(shell test -d .git/info && echo .git/info/exclude || echo .gitignore) | ||||||
|  | GIT_COMMIT = git commit -m"add $@" --no-gpg-sign --no-signoff | ||||||
|  | SELECTOR != command -v sk || command -v fzy || command -f fzf | ||||||
|  | .PHONY: all | ||||||
|  | all: init backup.tgz $(IGNORE_FILE) | ||||||
|  | backup.tgz: $(CONFIGS) $(STORE) | ||||||
|  | 	tar czf $@ $^ | ||||||
|  | $(IGNORE_FILE): store | ||||||
|  | 	echo $(STORE) backup.tgz | tr ' ' '\n' > $@ | ||||||
|  | .PHONY: init | ||||||
|  | init: configs store | ||||||
|  | configs store: | ||||||
|  | 	while con="$$(find /var /etc/ /sys/ -maxdepth 2 -mindepth 1 -type f 2>/dev/null  | $(SELECTOR) -p "Select files for $@\nPress Ctrl+d once done")"; do \ | ||||||
|  | 	echo "$$con"; \ | ||||||
|  | 	done > $@ | ||||||
|  | $(CONFIGS): %: /% | ||||||
|  | 	$(CP) $< $@ | ||||||
|  | 	git add $@ | ||||||
|  | 	$(GIT_COMMIT) | ||||||
|  | 	$(info made git commit for $@) | ||||||
|  | $(STORE): %: /% | ||||||
|  | 	$(CP) $< $@ | ||||||
|  | clean: | ||||||
|  | 	$(RM) -r $(CONFIGS) $(STORE) backup.tgz | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | ## Example: Soft Serve Makefile | ||||||
|  |  | ||||||
|  | <br> | ||||||
|  | The `configs` file: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | /etc/soft-serve.conf | ||||||
|  | /var/lib/soft-serve/data/config.yaml | ||||||
|  | /var/lib/soft-serve/data/file | ||||||
|  | /etc/nginx/sites-enabled/soft.dmz.rs | ||||||
|  | /etc/nginx/sites-available/soft.dmz.rs | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | <br> | ||||||
|  | The `store` file: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | /var/lib/soft-serve/data/lfs | ||||||
|  | /var/lib/soft-serve/data/repo | ||||||
|  | /var/lib/soft-serve/data/soft | ||||||
|  | /etc/letsencrypt/archive/soft | ||||||
|  | /etc/letsencrypt/live/soft.dm | ||||||
|  | /var/lib/soft-serve/data/ssh/ | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # Other Build Systems | ||||||
|  |  | ||||||
|  | > "*What if I want to use this other thing, instead of a makefile?" | ||||||
|  |  | ||||||
|  | *** | ||||||
|  |  | ||||||
|  | # Other Build Systems (Sans Heresy) | ||||||
|  |  | ||||||
|  | > "*What if I want to use this other thing, instead of a makefile?" | ||||||
|  |  | ||||||
|  | - Easy: just use a Makefile. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ```make | ||||||
|  |  | ||||||
|  | [ ... ] | ||||||
|  |  | ||||||
|  | public/: src/ | ||||||
|  |     python build_pages.py | ||||||
|  | ``` | ||||||
|  |  | ||||||
							
								
								
									
										34
									
								
								slides/makefiles/PS/omni_makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								slides/makefiles/PS/omni_makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | CONFIGS = $(patsubst /%,%,$(shell cat configs)) | ||||||
|  | STORE = $(patsubst /%,%,$(shell cat store)) | ||||||
|  | CP = mkdir -p $(dir $@) && cp -a | ||||||
|  | IGNORE_FILE = $(shell test -d .git/info && echo .git/info/exclude || echo .gitignore) | ||||||
|  | GIT_COMMIT = git commit -m"add $@" --no-gpg-sign --no-signoff | ||||||
|  | SELECTOR != command -v sk || command -v fzy || command -f fzf | ||||||
|  |  | ||||||
|  | .PHONY: all | ||||||
|  | all: init backup.tgz $(IGNORE_FILE) | ||||||
|  |  | ||||||
|  | backup.tgz: $(CONFIGS) $(STORE) | ||||||
|  | 	tar czf $@ $^ | ||||||
|  |  | ||||||
|  | $(IGNORE_FILE): store | ||||||
|  | 	echo $(STORE) backup.tgz | tr ' ' '\n' > $@ | ||||||
|  |  | ||||||
|  | .PHONY: init | ||||||
|  | init: configs store | ||||||
|  |  | ||||||
|  | configs store: | ||||||
|  | 	while con="$$(find /var /etc/ /sys/ -maxdepth 2 -mindepth 1 -type f 2>/dev/null  | $(SELECTOR) -p "Select files for $@\nPress Ctrl+d once done")"; do \ | ||||||
|  | 	echo "$$con"; \ | ||||||
|  | 	done > $@ | ||||||
|  |  | ||||||
|  | $(CONFIGS): %: /% | ||||||
|  | 	$(CP) $< $@ | ||||||
|  | 	git add $@ | ||||||
|  | 	$(GIT_COMMIT) | ||||||
|  | 	$(info made git commit for $@) | ||||||
|  | $(STORE): %: /% | ||||||
|  | 	$(CP) $< $@ | ||||||
|  |  | ||||||
|  | clean: | ||||||
|  | 	$(RM) -r $(CONFIGS) $(STORE) backup.tgz | ||||||
							
								
								
									
										1
									
								
								slides/makefiles/examples/omni_makefile
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								slides/makefiles/examples/omni_makefile
									
									
									
									
									
										Symbolic link
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | ../PS/omni_makefile | ||||||
		Reference in New Issue
	
	Block a user