95 lines
3.8 KiB
Python
95 lines
3.8 KiB
Python
# SPDX-License-Identifier: BSD-3-Clause
|
|
# Copyright (c) 2021, dsc@xmr.pm
|
|
|
|
import os
|
|
import pwd
|
|
import logging
|
|
import shutil
|
|
|
|
from quart import render_template
|
|
import click
|
|
|
|
from ircradio.factory import create_app
|
|
import settings
|
|
|
|
|
|
@click.group()
|
|
def cli():
|
|
pass
|
|
|
|
|
|
@cli.command(name="generate")
|
|
def cli_generate_configs(*args, **kwargs):
|
|
"""Generate icecast2/liquidsoap configs and systemd service files"""
|
|
from ircradio.utils import jinja2_render, write_file_sync, systemd_servicefile
|
|
|
|
templates_dir = os.path.join(settings.cwd, "ircradio", "templates")
|
|
|
|
# liquidsoap service file
|
|
path_liquidsoap = shutil.which("liquidsoap")
|
|
path_liquidsoap_config = os.path.join(settings.cwd, "data", "soap.liq")
|
|
|
|
liquidsoap_systemd_service = systemd_servicefile(
|
|
name="liquidsoap",
|
|
description="liquidsoap service",
|
|
user=pwd.getpwuid(os.getuid()).pw_name,
|
|
group=pwd.getpwuid(os.getuid()).pw_name,
|
|
path_executable=path_liquidsoap,
|
|
args_executable=path_liquidsoap_config,
|
|
env="")
|
|
write_file_sync(fn=os.path.join(settings.cwd, "data", "liquidsoap.service"), data=liquidsoap_systemd_service)
|
|
|
|
# liquidsoap config
|
|
template = jinja2_render("soap.liq.jinja2",
|
|
icecast2_bind_host=settings.icecast2_bind_host,
|
|
icecast2_bind_port=settings.icecast2_bind_port,
|
|
liquidsoap_host=settings.liquidsoap_host,
|
|
liquidsoap_port=settings.liquidsoap_port,
|
|
icecast2_mount=settings.icecast2_mount,
|
|
liquidsoap_description=settings.liquidsoap_description,
|
|
icecast2_source_password=settings.icecast2_source_password,
|
|
dir_music=settings.dir_music)
|
|
write_file_sync(fn=os.path.join(settings.cwd, "data", "soap.liq"), data=template.encode())
|
|
|
|
# cross.liq
|
|
path_liquidsoap_cross_template = os.path.join(templates_dir, "cross.liq.jinja2")
|
|
path_liquidsoap_cross = os.path.join(settings.cwd, "data", "cross.liq")
|
|
shutil.copyfile(path_liquidsoap_cross_template, path_liquidsoap_cross)
|
|
|
|
# icecast2.xml
|
|
template = jinja2_render("icecast.xml.jinja2",
|
|
icecast2_bind_host=settings.icecast2_bind_host,
|
|
icecast2_bind_port=settings.icecast2_bind_port,
|
|
hostname="localhost",
|
|
log_dir=settings.icecast2_logdir,
|
|
source_password=settings.icecast2_source_password,
|
|
relay_password=settings.icecast2_relay_password,
|
|
admin_password=settings.icecast2_admin_password,
|
|
dir_music=settings.dir_music)
|
|
path_icecast2_config = os.path.join(settings.cwd, "data", "icecast.xml")
|
|
write_file_sync(path_icecast2_config, data=template.encode())
|
|
|
|
# nginx
|
|
template = jinja2_render("nginx.jinja2",
|
|
icecast2_bind_host=settings.icecast2_bind_host,
|
|
icecast2_bind_port=settings.icecast2_bind_port,
|
|
hostname=settings.icecast2_hostname,
|
|
icecast2_mount=settings.icecast2_mount,
|
|
host=settings.host,
|
|
port=settings.port)
|
|
path_nginx_config = os.path.join(settings.cwd, "data", "radio_nginx.conf")
|
|
write_file_sync(path_nginx_config, data=template.encode())
|
|
print(f"written config files to {os.path.join(settings.cwd, 'data')}")
|
|
|
|
|
|
@cli.command(name="webdev")
|
|
def webdev(*args, **kwargs):
|
|
"""Run the web-if, for development purposes"""
|
|
from ircradio.factory import create_app
|
|
app = create_app()
|
|
app.run(settings.host, port=settings.port, debug=settings.debug, use_reloader=False)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
cli()
|