add bundle:snapserver

This commit is contained in:
Franzi 2025-06-28 12:10:04 +02:00
parent 575474af83
commit a4d4b0b8e0
Signed by: kunsi
GPG key ID: 12E3D2136B818350
4 changed files with 106 additions and 0 deletions

View file

@ -31,6 +31,17 @@ defaults = {
}, },
} }
if node.has_bundle('snapserver'):
defaults['navidrome']['config']['Jukebox'] = {
'Enabled': True,
}
defaults['navidrome']['config']['MPVCmdTemplate'] = 'mpv --no-audio-display --pause %f --input-ipc-server=%s --audio-channels=stereo --audio-samplerate=48000 --audio-format=s16 --ao=pcm --ao-pcm-file=/tmp/snapserver_navidrome_fifo'
defaults['snapserver'] = {
'sources': {
'pipe:///tmp/snapserver_navidrome_fifo?name=Navidrome',
},
}
@metadata_reactor.provides( @metadata_reactor.provides(
'zfs/datasets', 'zfs/datasets',

View file

@ -0,0 +1,24 @@
[server]
threads = -1
[stream]
bind_to_address = 0.0.0.0
port = 1704
% for source in sorted(node.metadata.get('snapserver/sources')):
source = ${source}
% endfor
[streaming_client]
initial_volume = 100
[http]
enabled = true
port = 1780
hostname = ${node.metadata.get('snapserver/domain')}
doc_root = /usr/share/snapweb/
[tcp]
enabled = true
bind_to_address = 0.0.0.0
port = 1705

View file

@ -0,0 +1,13 @@
files['/etc/snapserver.conf'] = {
'content_type': 'mako',
'triggers': {
'svc_systemd:snapserver:restart',
},
}
svc_systemd['snapserver'] = {
'needs': {
'file:/etc/snapserver.conf',
'pkg_apt:snapserver',
},
}

View file

@ -0,0 +1,58 @@
from bundlewrap.metadata import atomic
defaults = {
'apt': {
'packages': {
'snapserver': {},
},
},
'snapserver': {
'sources': set(),
},
'sysctl': {
'options': {
'fs.protected_fifos': '0',
},
},
}
@metadata_reactor.provides(
'nginx/vhosts/snapserver',
)
def nginx(metadata):
if not node.has_bundle('nginx'):
raise DoNotRunAgain
return {
'nginx': {
'vhosts': {
'snapserver': {
'domain': metadata.get('snapserver/domain'),
'locations': {
'/': {
'target': f'http://127.0.0.1:1780',
'websockets': True,
},
},
'website_check_path': '/',
'website_check_string': 'Snapweb',
},
},
},
}
@metadata_reactor.provides(
'firewall/port_rules',
'firewall/port_rules',
)
def firewall(metadata):
return {
'firewall': {
'port_rules': {
'1704/tcp': atomic(metadata.get('snapserver/restrict-to', set())),
'1705/tcp': atomic(metadata.get('snapserver/restrict-to', set())),
},
},
}