recutils #2
							
								
								
									
										36
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								Makefile
									
									
									
									
									
								
							@@ -5,13 +5,36 @@ help: ## Print the help message
 | 
			
		||||
		sort | \
 | 
			
		||||
		column -s ':' -t
 | 
			
		||||
 | 
			
		||||
map.txt: map.ge ## Making map.txt
 | 
			
		||||
	grep -v '# unimportant' $< | graph-easy --boxart > $@
 | 
			
		||||
	cat $@
 | 
			
		||||
.PHONY: check
 | 
			
		||||
check: ## Check you have all dependencies
 | 
			
		||||
	@command -v graph-easy >/dev/null || { echo "Install perl-graph-easy" && exit 1 ;}
 | 
			
		||||
	@command -v recsel >/dev/null || { echo "Install recutils" && exit 1 ;}
 | 
			
		||||
	@command -v lowdown >/dev/null || { echo "Install lowdown" && exit 1 ;}
 | 
			
		||||
	@echo "All dependencies installed"
 | 
			
		||||
 | 
			
		||||
full_map.txt: map.ge ## Generating full_map.txt with graph-easy
 | 
			
		||||
	graph-easy --boxart < $< > $@
 | 
			
		||||
	cat $@
 | 
			
		||||
########## Network Map ##########
 | 
			
		||||
 | 
			
		||||
graph_cmd = graph-easy --boxart
 | 
			
		||||
 | 
			
		||||
queries = queries authqueries
 | 
			
		||||
 | 
			
		||||
query_formats = $(patsubst %, .dbs/%.txt, $(queries))
 | 
			
		||||
 | 
			
		||||
.dbs/:
 | 
			
		||||
	mkdir $@
 | 
			
		||||
 | 
			
		||||
$(query_formats): .dbs/%.txt: | .dbs/
 | 
			
		||||
	echo "[ {{name}} ] -- $(basename $(@F)) --> [ {{$(basename $(@F))}} ]" > $@
 | 
			
		||||
 | 
			
		||||
.PHONY: map
 | 
			
		||||
map: .dbs/network.txt ## Show a network map
 | 
			
		||||
	$(graph_cmd) < $<
 | 
			
		||||
 | 
			
		||||
.dbs/network.txt: network.rec $(query_formats)
 | 
			
		||||
	$(RM) .dbs/network.txt
 | 
			
		||||
	$(foreach relation, $(queries), \
 | 
			
		||||
	recsel $< -t lxc -e "$(relation) != ''" -p name,$(relation) | recfmt -f .dbs/$(relation).txt >> $@ ;\
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
########## Man Pages ##########
 | 
			
		||||
 | 
			
		||||
@@ -56,3 +79,4 @@ pages: $(kralmans) $(krovmans) $(setupmans) $(splintmans)
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	$(RM) $(kralmans) $(krovmans)
 | 
			
		||||
	$(RM) -r .dbs
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										63
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								README.md
									
									
									
									
									
								
							@@ -2,6 +2,11 @@ These setup files provide the text-only configurations for DMZ.
 | 
			
		||||
 | 
			
		||||
*It should not contain private data.*
 | 
			
		||||
 | 
			
		||||
# Dependencies
 | 
			
		||||
 | 
			
		||||
- `recutils`
 | 
			
		||||
- (optional) `graph-easy` (the package may be called `perl-graph-easy`)
 | 
			
		||||
 | 
			
		||||
# Aspirations
 | 
			
		||||
 | 
			
		||||
- Each service should reside in its own directory.
 | 
			
		||||
@@ -15,3 +20,61 @@ These setup files provide the text-only configurations for DMZ.
 | 
			
		||||
- Any maintenance scripts.
 | 
			
		||||
- Configurations should reside in shadow-directories, e.g. a backup `soft-serve`'s `config.yaml` should reside in this repo under `splint.rs/soft-serve/etc/soft/config.yaml`.
 | 
			
		||||
 | 
			
		||||
# Network Database
 | 
			
		||||
 | 
			
		||||
I have a half-baked plan to finally make use of plain-text databases, and it's already half-working.
 | 
			
		||||
Try these commands:
 | 
			
		||||
 | 
			
		||||
Ask what types of _rec_ords it contains:
 | 
			
		||||
 | 
			
		||||
## Database
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
recinf network.rec
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Select queries
 | 
			
		||||
 | 
			
		||||
Select with `recsel`, then specify the database (.rec) and type of record (like table in db).
 | 
			
		||||
 | 
			
		||||
`--include-descriptors` or `-d`
 | 
			
		||||
`--type` or `-t`
 | 
			
		||||
`--expression` or `-e`
 | 
			
		||||
`--quick` or `-q`
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
recsel network.rec --type router
 | 
			
		||||
recsel network.rec -d -t lxc
 | 
			
		||||
recsel network.rec -d -t lxc -e ?example?
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
User `-q` for a `--quick` selection, or `-e` for more precise selections.
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
recsel network.rec --type lxc --quick wiki
 | 
			
		||||
recsel network.rec -t lxc -q nginx
 | 
			
		||||
recsel network.rec -t lxc -e "name ~ 'nginx'"
 | 
			
		||||
recsel network.rec -t lxc -e "name = 'nginx12'"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Insert queries
 | 
			
		||||
 | 
			
		||||
Insert a new record with `recins`.
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
recins network.rec -t lxc -r "name: bob" -r "service: bob" -r "host: moxx"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Update queries
 | 
			
		||||
 | 
			
		||||
If you can select something, you can also set its fields with `recset`.
 | 
			
		||||
 | 
			
		||||
Use `-f` to set the `--field`, and `-a` to `--add`, or `-s` to `--set`.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```sh
 | 
			
		||||
recset network.rec -t lxc -e "name = 'nginx12'" -f proxies -a soft-serve
 | 
			
		||||
recsel network.rec -t lxc -e "name = 'nginx11'" -p proxies[0]
 | 
			
		||||
recset network.rec -t lxc -e" name = 'nginx11'" -f proxies[0] -s wiki9
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										39
									
								
								map.ge
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								map.ge
									
									
									
									
									
								
							@@ -1,39 +0,0 @@
 | 
			
		||||
# Network map of Decentrala.  Use with:
 | 
			
		||||
# graph-easy --boxart < netmap.txt
 | 
			
		||||
 | 
			
		||||
(Mox
 | 
			
		||||
	[ m_router ]{label: router ;}
 | 
			
		||||
	[ wireguard ] --> [ m_nginx ]{label: nginx-11 ;}
 | 
			
		||||
	[ wiki ] --> [ m_nginx ]
 | 
			
		||||
	[ gitea ] --> [ m_nginx ]
 | 
			
		||||
	[ tor11 ] --> [ m_nginx ] --> [ m_router ]
 | 
			
		||||
	[ smtp ]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
(Serverko
 | 
			
		||||
	[ s_nginx ]{label: nginx-12 ;}
 | 
			
		||||
	[ s_router ]{label: router ;}
 | 
			
		||||
	[ s_nginx ] --> [ nextcloud ]
 | 
			
		||||
	[ s_nginx ] --> [ tor12 ]
 | 
			
		||||
	[ s_nginx ] --> [ s_router ]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
(splint.rs # unimportant
 | 
			
		||||
	[ soft-serve ] # unimportant
 | 
			
		||||
	[ mail-cache ]# unimportant
 | 
			
		||||
) # unimportant
 | 
			
		||||
 | 
			
		||||
[ tor12 ] <..> [ onions ] <..> [ tor11 ]
 | 
			
		||||
[ m_router ] <..> [ BGP ] <..> [ madness ] <..> [ s_router ]
 | 
			
		||||
[ smtp ] <..> [ madness ]
 | 
			
		||||
[ madness ] <..> [  mail-cache ]# unimportant
 | 
			
		||||
[ A ]{label: "" ;}
 | 
			
		||||
[ B ]{label: "" ;}
 | 
			
		||||
[ C ]{label: "" ;}
 | 
			
		||||
[ D ]{label: "" ;}
 | 
			
		||||
[ onions ] <..> [ A ]
 | 
			
		||||
[ onions ] <..> [ B ]
 | 
			
		||||
[ A ] <..> [ C ]
 | 
			
		||||
[ B ] <..> [ D ]
 | 
			
		||||
 | 
			
		||||
(Sharks! [ D ])
 | 
			
		||||
							
								
								
									
										88
									
								
								network.rec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								network.rec
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
			
		||||
%rec: router
 | 
			
		||||
%doc: Routers, or possibly modems?
 | 
			
		||||
 | 
			
		||||
name: ISP Router
 | 
			
		||||
location: kralizec
 | 
			
		||||
ISP: Orion
 | 
			
		||||
 | 
			
		||||
name: ISP Router
 | 
			
		||||
location: krov
 | 
			
		||||
ISP: Yettel
 | 
			
		||||
 | 
			
		||||
%rec: host
 | 
			
		||||
%doc: These are the real machines, most of which run VMs or containters.
 | 
			
		||||
%key: name
 | 
			
		||||
 | 
			
		||||
name: moxx
 | 
			
		||||
location: kralizec
 | 
			
		||||
 | 
			
		||||
name: Serverko
 | 
			
		||||
location: krov
 | 
			
		||||
 | 
			
		||||
%rec: lxc
 | 
			
		||||
%doc: A container, usually on a Proxmox host.
 | 
			
		||||
%type: host rec host
 | 
			
		||||
 | 
			
		||||
name: nginx11
 | 
			
		||||
gateway: ISP-router
 | 
			
		||||
host: moxx
 | 
			
		||||
proxies: wiki11
 | 
			
		||||
proxies: gitea11
 | 
			
		||||
proxies: forum11
 | 
			
		||||
proxies: ejabberd11
 | 
			
		||||
proxies: dmzrs
 | 
			
		||||
 | 
			
		||||
name: LDAP
 | 
			
		||||
host: moxx
 | 
			
		||||
 | 
			
		||||
name: website
 | 
			
		||||
host: moxx
 | 
			
		||||
authqueries: LDAP
 | 
			
		||||
queries: postgresql11
 | 
			
		||||
service: dmzrs
 | 
			
		||||
service: flask accounts
 | 
			
		||||
 | 
			
		||||
name: gitea11
 | 
			
		||||
service: gitea
 | 
			
		||||
host: moxx
 | 
			
		||||
authqueries: LDAP
 | 
			
		||||
queries: postgresql11
 | 
			
		||||
 | 
			
		||||
name: ejabberd11
 | 
			
		||||
service: ejabberd
 | 
			
		||||
host: moxx
 | 
			
		||||
authqueries: LDAP
 | 
			
		||||
queries: postgresql11
 | 
			
		||||
 | 
			
		||||
name: forum11
 | 
			
		||||
service: forum
 | 
			
		||||
host: moxx
 | 
			
		||||
authqueries: LDAP
 | 
			
		||||
queries: postgresql11
 | 
			
		||||
 | 
			
		||||
name: postfix11
 | 
			
		||||
service: postfix
 | 
			
		||||
authqueries: LDAP
 | 
			
		||||
 | 
			
		||||
name: tor11
 | 
			
		||||
service: tor
 | 
			
		||||
host: moxx
 | 
			
		||||
 | 
			
		||||
name: postgresql11
 | 
			
		||||
service: postgresql
 | 
			
		||||
host: moxx
 | 
			
		||||
 | 
			
		||||
name: wiki11
 | 
			
		||||
service: wiki
 | 
			
		||||
host: moxx
 | 
			
		||||
authqueries: LDAP
 | 
			
		||||
 | 
			
		||||
name: nginx12
 | 
			
		||||
host: Serverko
 | 
			
		||||
 | 
			
		||||
name: nextcloud
 | 
			
		||||
host: Serverko
 | 
			
		||||
 | 
			
		||||
name: tor12
 | 
			
		||||
host: nginx
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user