Compare commits
No commits in common. "a8182473dd8f7990c51c7d4e2be7866c2a3c595f" and "db11dd933a27d3b22e4d7c53595a9e74de0ae9f6" have entirely different histories.
a8182473dd
...
db11dd933a
22 changed files with 54 additions and 99 deletions
4
.envrc
4
.envrc
|
@ -10,8 +10,8 @@ python3 -m venv .venv
|
|||
source .venv/bin/activate
|
||||
PATH_add .venv/bin
|
||||
PATH_add bin
|
||||
python3 -m pip --require-virtualenv --quiet install --upgrade pip wheel
|
||||
python3 -m pip --require-virtualenv --quiet install --upgrade -r requirements.txt
|
||||
python3 -m pip install --upgrade pip wheel
|
||||
python3 -m pip install --upgrade -r requirements.txt
|
||||
|
||||
rm -rf .cache/bw/git_deploy
|
||||
export BW_GIT_DEPLOY_CACHE=.cache/bw/git_deploy
|
||||
|
|
|
@ -68,7 +68,7 @@ for host, sources in hosts.items():
|
|||
files[f'/etc/apt/sources.list.d/{host}.list'] = {
|
||||
'content': '\n'.join(sorted(set(
|
||||
str(source).format(
|
||||
codename=node.metadata.get('os_codename'),
|
||||
release=node.metadata.get('os_release'),
|
||||
version=node.os_version[0], # WIP crystal
|
||||
)
|
||||
for source in sources
|
||||
|
@ -95,7 +95,7 @@ for package, options in node.metadata.get('apt/packages', {}).items():
|
|||
files[f'/etc/apt/preferences.d/{package}'] = {
|
||||
'content': '\n'.join([
|
||||
f"Package: {package}",
|
||||
f"Pin: release a={node.metadata.get('os_codename')}-backports",
|
||||
f"Pin: release a={node.metadata.get('os_release')}-backports",
|
||||
f"Pin-Priority: 900",
|
||||
]),
|
||||
'needed_by': [
|
||||
|
|
|
@ -6,7 +6,7 @@ version = version=node.metadata.get('gitea/version')
|
|||
|
||||
downloads['/usr/local/bin/gitea'] = {
|
||||
'url': f'https://dl.gitea.io/gitea/{version}/gitea-{version}-linux-amd64',
|
||||
'sha256_url': '{url}.sha256',
|
||||
'sha256': node.metadata.get('gitea/sha256'),
|
||||
'triggers': {
|
||||
'svc_systemd:gitea:restart',
|
||||
},
|
||||
|
|
|
@ -30,7 +30,8 @@ defaults = {
|
|||
'gitea.service': {
|
||||
'Unit': {
|
||||
'Description': 'gitea',
|
||||
'After': {'syslog.target', 'network.target'},
|
||||
'After': 'syslog.target',
|
||||
'After': 'network.target',
|
||||
'Requires': 'postgresql.service',
|
||||
},
|
||||
'Service': {
|
||||
|
|
|
@ -9,7 +9,7 @@ defaults = {
|
|||
'monitoring-plugins': {},
|
||||
},
|
||||
'sources': {
|
||||
'deb https://packages.icinga.com/debian icinga-{codename} main',
|
||||
'deb https://packages.icinga.com/debian icinga-{release} main',
|
||||
},
|
||||
},
|
||||
'icinga2': {
|
||||
|
|
|
@ -4,27 +4,18 @@ directories = {
|
|||
'owner': 'www-data',
|
||||
'group': 'icingaweb2',
|
||||
'mode': '2770',
|
||||
'needs': [
|
||||
'pkg_apt:icingaweb2',
|
||||
],
|
||||
},
|
||||
'/etc/icingaweb2/enabledModules': {
|
||||
# 'purge': True,
|
||||
'owner': 'www-data',
|
||||
'group': 'icingaweb2',
|
||||
'mode': '2770',
|
||||
'needs': [
|
||||
'pkg_apt:icingaweb2',
|
||||
],
|
||||
},
|
||||
'/etc/icingaweb2/modules': {
|
||||
# 'purge': True,
|
||||
'owner': 'www-data',
|
||||
'group': 'icingaweb2',
|
||||
'mode': '2770',
|
||||
'needs': [
|
||||
'pkg_apt:icingaweb2',
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -34,9 +25,6 @@ files = {
|
|||
'owner': 'www-data',
|
||||
'group': 'icingaweb2',
|
||||
'mode': '0660',
|
||||
'needs': [
|
||||
'pkg_apt:icingaweb2',
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -45,9 +33,6 @@ symlinks = {
|
|||
'target': '/usr/share/icingaweb2/modules/monitoring',
|
||||
'owner': 'www-data',
|
||||
'group': 'icingaweb2',
|
||||
'needs': [
|
||||
'pkg_apt:icingaweb2',
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -63,9 +48,6 @@ for name in [
|
|||
'owner': 'www-data',
|
||||
'group': 'icingaweb2',
|
||||
'mode': '0660',
|
||||
'needs': [
|
||||
'pkg_apt:icingaweb2',
|
||||
],
|
||||
}
|
||||
|
||||
for name in [
|
||||
|
@ -78,7 +60,4 @@ for name in [
|
|||
'owner': 'www-data',
|
||||
'group': 'icingaweb2',
|
||||
'mode': '0660',
|
||||
'needs': [
|
||||
'pkg_apt:icingaweb2',
|
||||
],
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ defaults = {
|
|||
'icingaweb2-module-monitoring': {},
|
||||
},
|
||||
'sources': {
|
||||
'deb https://packages.icinga.com/debian icinga-{codename} main',
|
||||
'deb https://packages.icinga.com/debian icinga-{release} main',
|
||||
},
|
||||
},
|
||||
'icingaweb2': {
|
||||
|
|
|
@ -7,7 +7,7 @@ defaults = {
|
|||
'influxdb2-cli': {},
|
||||
},
|
||||
'sources': {
|
||||
'deb https://repos.influxdata.com/debian {codename} stable',
|
||||
'deb https://repos.influxdata.com/debian {release} stable',
|
||||
},
|
||||
},
|
||||
'nftables': {
|
||||
|
|
|
@ -4,7 +4,7 @@ set -o pipefail
|
|||
|
||||
deploy_challenge() {
|
||||
echo "
|
||||
server ${server}
|
||||
server 10.0.11.3
|
||||
zone ${zone}.
|
||||
update add $1.${zone}. 60 IN TXT \"$3\"
|
||||
send
|
||||
|
@ -13,7 +13,7 @@ deploy_challenge() {
|
|||
|
||||
clean_challenge() {
|
||||
echo "
|
||||
server ${server}
|
||||
server 10.0.11.3
|
||||
zone ${zone}.
|
||||
update delete $1.${zone}. TXT
|
||||
send
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
from shlex import quote
|
||||
from ipaddress import ip_interface
|
||||
|
||||
|
||||
defaults = {
|
||||
|
|
|
@ -23,8 +23,8 @@ def sources(metadata):
|
|||
return {
|
||||
'apt': {
|
||||
'sources': {
|
||||
f'deb https://deb.nodesource.com/node_{version}.x {{codename}} main',
|
||||
f'deb-src https://deb.nodesource.com/node_{version}.x {{codename}} main',
|
||||
f'deb https://deb.nodesource.com/node_{version}.x {{release}} main',
|
||||
f'deb-src https://deb.nodesource.com/node_{version}.x {{release}} main',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -15,14 +15,16 @@ defaults = {
|
|||
def units(metadata):
|
||||
units = {}
|
||||
services = {}
|
||||
|
||||
|
||||
for mountpoint, conf in metadata.get('systemd-mount').items():
|
||||
formatted_name = mountpoint[1:].replace('-', '\\x2d').replace('/', '-') + '.mount'
|
||||
|
||||
|
||||
units[formatted_name] = {
|
||||
'Unit': {
|
||||
'Description': f"Mount {conf['source']} -> {mountpoint}",
|
||||
'DefaultDependencies': 'no',
|
||||
'Conflicts': 'umount.target',
|
||||
'Before': 'umount.target',
|
||||
},
|
||||
'Mount': {
|
||||
'What': conf['source'],
|
||||
|
@ -30,11 +32,16 @@ def units(metadata):
|
|||
'Type': 'fuse.bindfs',
|
||||
'Options': f"nonempty",
|
||||
},
|
||||
'Install': {
|
||||
'WantedBy': {
|
||||
'local-fs.target',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
if conf.get('user'):
|
||||
units[formatted_name]['Mount']['Options'] += f",force-user={conf.get('user')}"
|
||||
|
||||
|
||||
services[formatted_name] = {}
|
||||
|
||||
return {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
size = node.metadata.get('systemd-swap')
|
||||
size_mb = node.metadata.get('systemd-swap')//1_000_000
|
||||
|
||||
actions = {
|
||||
'stop_swap': {
|
||||
|
@ -15,8 +15,8 @@ actions = {
|
|||
},
|
||||
},
|
||||
'create_swapfile': {
|
||||
'command': f'fallocate -l {size} /swapfile',
|
||||
'unless': f'stat -c %s /swapfile | grep ^{size}$',
|
||||
'command': f'dd if=/dev/zero of=/swapfile bs=1000000 count={size_mb}',
|
||||
'unless': f'stat -c %s /swapfile | grep ^{size_mb*1_000_000}$',
|
||||
'preceded_by': {
|
||||
'action:stop_swap',
|
||||
'action:remove_swapfile',
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
## show unit paths
|
||||
|
||||
```
|
||||
systemctl --no-pager --property=UnitPath show --value | tr ' ' '\n'
|
||||
systemctl --no-pager --property=UnitPath show | tr ' ' '\n'
|
||||
```
|
||||
|
||||
## metadata
|
||||
|
|
|
@ -25,14 +25,19 @@ def units(metadata):
|
|||
|
||||
type = name.split('.')[-1]
|
||||
|
||||
if type == 'service':
|
||||
units.setdefault(name, {}).setdefault('Install', {}).setdefault('WantedBy', {'multi-user.target'})
|
||||
elif type == 'timer':
|
||||
units.setdefault(name, {}).setdefault('Install', {}).setdefault('WantedBy', {'timers.target'})
|
||||
elif type == 'mount':
|
||||
units.setdefault(name, {}).setdefault('Install', {}).setdefault('WantedBy', {'local-fs.target'})
|
||||
units.setdefault(name, {}).setdefault('Unit', {}).setdefault('Conflicts', {'umount.target'})
|
||||
units.setdefault(name, {}).setdefault('Unit', {}).setdefault('Before', {'umount.target'})
|
||||
if not config.get('Install/WantedBy'):
|
||||
if type == 'service':
|
||||
units[name] = {
|
||||
'Install': {
|
||||
'WantedBy': {'multi-user.target'},
|
||||
}
|
||||
}
|
||||
elif type == 'timer':
|
||||
units[name] = {
|
||||
'Install': {
|
||||
'WantedBy': {'timers.target'},
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
'systemd': {
|
||||
|
|
|
@ -95,11 +95,11 @@ defaults = {
|
|||
'apt/sources',
|
||||
)
|
||||
def apt(metadata):
|
||||
codename = {
|
||||
release = {
|
||||
'buster': 'buster',
|
||||
'bullseye': 'bullseye',
|
||||
'bookworm': 'bullseye',
|
||||
}[metadata.get('os_codename')]
|
||||
}[metadata.get('os_release')]
|
||||
|
||||
return {
|
||||
'apt': {
|
||||
|
@ -107,7 +107,7 @@ def apt(metadata):
|
|||
'telegraf': {},
|
||||
},
|
||||
'sources': {
|
||||
f"deb https://repos.influxdata.com/debian {codename} stable",
|
||||
f"deb https://repos.influxdata.com/debian {release} stable",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
directories = {
|
||||
'/var/lib/twitch-clips': {},
|
||||
}
|
||||
|
||||
pkg_pip = {
|
||||
'twitch-dl': {},
|
||||
}
|
|
@ -1,28 +0,0 @@
|
|||
defaults = {
|
||||
'backup': {
|
||||
'paths': {
|
||||
'/var/lib/twitch-clips',
|
||||
},
|
||||
},
|
||||
'systemd-timers': {
|
||||
f'twitch-clip-download': {
|
||||
'command': '/usr/local/bin/twitch-dl clips cronekorkn_ --download --all',
|
||||
'when': 'daily',
|
||||
'persistent': True,
|
||||
'working_dir': '/var/lib/twitch-clips',
|
||||
'after': {
|
||||
'network-online.target',
|
||||
},
|
||||
},
|
||||
},
|
||||
'zfs': {
|
||||
'datasets': {
|
||||
'tank/twitch-clips': {
|
||||
'mountpoint': '/var/lib/twitch-clips',
|
||||
'needed_by': {
|
||||
'svc_systemd:twitch-clip-download.timer',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
|
@ -9,7 +9,7 @@
|
|||
'postgresql': {
|
||||
'version': '13',
|
||||
},
|
||||
'os_codename': 'bullseye',
|
||||
'os_release': 'bullseye',
|
||||
},
|
||||
'os_version': (11,),
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
'postgresql': {
|
||||
'version': '14',
|
||||
},
|
||||
'os_codename': 'bookworm',
|
||||
'os_release': 'bookworm',
|
||||
},
|
||||
'os_version': (12,),
|
||||
}
|
||||
|
|
|
@ -10,10 +10,10 @@
|
|||
'metadata': {
|
||||
'apt': {
|
||||
'sources': {
|
||||
'deb https://deb.debian.org/debian {codename} main contrib non-free',
|
||||
'deb https://deb.debian.org/debian {codename}-updates main contrib non-free',
|
||||
'deb https://deb.debian.org/debian {codename}-backports main contrib non-free',
|
||||
'deb https://security.debian.org/ {codename}-security main contrib non-free',
|
||||
'deb https://deb.debian.org/debian {release} main contrib non-free',
|
||||
'deb https://deb.debian.org/debian {release}-updates main contrib non-free',
|
||||
'deb https://deb.debian.org/debian {release}-backports main contrib non-free',
|
||||
'deb https://security.debian.org/ {release}-security main contrib non-free',
|
||||
},
|
||||
'packages': {
|
||||
'mtr-tiny': {},
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
'steam-chat-logger',
|
||||
'steam-chat-viewer',
|
||||
'systemd-swap',
|
||||
'twitch-clip-download',
|
||||
'raspberrymatic-cert',
|
||||
'tasmota-charge',
|
||||
'wireguard',
|
||||
|
@ -61,7 +60,8 @@
|
|||
'download_server': 'netcup.mails',
|
||||
},
|
||||
'gitea': {
|
||||
'version': '1.19.1',
|
||||
'version': '1.17.1',
|
||||
'sha256': 'eafd476ee2a303d758448314272add00898d045439ab0d353ff4286c5e63496f',
|
||||
'domain': 'git.sublimity.de',
|
||||
'conf': {
|
||||
'mailer': {
|
||||
|
@ -153,9 +153,6 @@
|
|||
'max': 70,
|
||||
},
|
||||
},
|
||||
'twitch-clip-download': {
|
||||
'channel_name': 'cronekorkn_',
|
||||
},
|
||||
'vm': {
|
||||
'cores': 16,
|
||||
'threads': 32,
|
||||
|
|
Loading…
Reference in a new issue