107 lines
2.8 KiB
Python
107 lines
2.8 KiB
Python
from re import match
|
|
|
|
defaults = {
|
|
'apt': {
|
|
'packages': {
|
|
'libc6_i386': {}, # installs libc6:i386
|
|
'lib32z1': {},
|
|
'unzip': {},
|
|
},
|
|
},
|
|
'left4dead2': {
|
|
'servers': {},
|
|
},
|
|
'nftables': {
|
|
'input': {
|
|
'udp dport { 27005, 27020 } accept',
|
|
},
|
|
},
|
|
}
|
|
|
|
|
|
@metadata_reactor.provides(
|
|
'nftables/input',
|
|
)
|
|
def nftables(metadata):
|
|
ports = sorted(str(config["port"]) for config in metadata.get('left4dead2/servers', {}).values())
|
|
|
|
return {
|
|
'nftables': {
|
|
'input': {
|
|
f'ip protocol {{ tcp, udp }} th dport {{ {", ".join(ports)} }} accept'
|
|
},
|
|
},
|
|
}
|
|
|
|
|
|
@metadata_reactor.provides(
|
|
'systemd/units',
|
|
)
|
|
def initial_unit(metadata):
|
|
install_command = (
|
|
'/opt/steam/steamcmd.sh '
|
|
'+force_install_dir /opt/left4dead2 '
|
|
'+login anonymous '
|
|
'+@sSteamCmdForcePlatformType {platform} '
|
|
'+app_update 222860 validate '
|
|
'+quit '
|
|
)
|
|
|
|
return {
|
|
'systemd': {
|
|
'units': {
|
|
'left4dead2-install.service': {
|
|
'Unit': {
|
|
'Description': 'install or update left4dead2',
|
|
'After': 'network-online.target',
|
|
},
|
|
'Service': {
|
|
'Type': 'oneshot',
|
|
'RemainAfterExit': 'yes',
|
|
'User': 'steam',
|
|
'Group': 'steam',
|
|
'WorkingDirectory': '/opt/steam',
|
|
'ExecStartPre': install_command.format(platform='windows'),
|
|
'ExecStart': install_command.format(platform='linux'),
|
|
},
|
|
'Install': {
|
|
'WantedBy': {'multi-user.target'},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
|
|
@metadata_reactor.provides(
|
|
'systemd/units',
|
|
)
|
|
def server_units(metadata):
|
|
units = {}
|
|
|
|
for name, config in metadata.get('left4dead2/servers').items():
|
|
assert match(r'^[A-z0-9-_-]+$', name)
|
|
|
|
units[f'left4dead2-{name}.service'] = {
|
|
'Unit': {
|
|
'Description': f'left4dead2 server {name}',
|
|
'After': {'left4dead2-install.service'},
|
|
'Requires': {'left4dead2-install.service'},
|
|
},
|
|
'Service': {
|
|
'User': 'steam',
|
|
'Group': 'steam',
|
|
'WorkingDirectory': '/opt/left4dead2',
|
|
'ExecStart': f'/opt/left4dead2/srcds_run -port {config["port"]} +exec server_{name}.cfg',
|
|
'Restart': 'on-failure',
|
|
},
|
|
'Install': {
|
|
'WantedBy': {'multi-user.target'},
|
|
},
|
|
}
|
|
|
|
return {
|
|
'systemd': {
|
|
'units': units,
|
|
},
|
|
}
|