PS: more Makefiles
This commit is contained in:
parent
0d2d466dac
commit
4c51ade750
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
|
Loading…
Reference in New Issue
Block a user