From 3da0310173ffd2257fe9e09ee3c2f584208f3af9 Mon Sep 17 00:00:00 2001
From: jo <ljonas@riseup.net>
Date: Thu, 2 Sep 2021 14:08:20 +0200
Subject: [PATCH 1/2] Drop SysV support

---
 install                                       |  11 +-
 .../install/conf/airtime-celery               |  25 --
 .../install/initd/libretime-celery            | 346 ------------------
 python_apps/airtime-celery/setup.py           |  47 +--
 .../install/sysvinit/libretime-analyzer       |  79 ----
 python_apps/api_clients/setup.py              |  11 +-
 .../install/sysvinit/libretime-liquidsoap     |  79 ----
 .../pypo/install/sysvinit/libretime-playout   |  79 ----
 python_apps/pypo/setup.py                     |  54 +--
 9 files changed, 30 insertions(+), 701 deletions(-)
 delete mode 100644 python_apps/airtime-celery/install/conf/airtime-celery
 delete mode 100755 python_apps/airtime-celery/install/initd/libretime-celery
 delete mode 100755 python_apps/airtime_analyzer/install/sysvinit/libretime-analyzer
 delete mode 100755 python_apps/pypo/install/sysvinit/libretime-liquidsoap
 delete mode 100755 python_apps/pypo/install/sysvinit/libretime-playout

diff --git a/install b/install
index f578b297f..85bbfbd1e 100755
--- a/install
+++ b/install
@@ -716,6 +716,13 @@ verbose "Using distribution id \"$dist\", release code \"$code\""
 # Detect init system type
 systemInitDetect
 
+# SysV is not supported, fail fast instead of cleaning the whole script
+# from sysv related entries.
+if $has_systemv_init; then
+    echo "ERROR: Installation on SysV init system is not supported!" >&2
+    exit 1
+fi
+
 if $is_centos_dist; then
   python_bin="python3.8"
   apache_bin="httpd"
@@ -1014,7 +1021,7 @@ loudCmd "$python_bin ${AIRTIMEROOT}/python_apps/api_clients/setup.py install --i
 verbose "...Done"
 
 verbose "\n * Installing pypo and liquidsoap..."
-loudCmd "$python_bin ${AIRTIMEROOT}/python_apps/pypo/setup.py install --install-scripts=/usr/bin --no-init-script"
+loudCmd "$python_bin ${AIRTIMEROOT}/python_apps/pypo/setup.py install --install-scripts=/usr/bin"
 loudCmd "mkdir -p /var/log/airtime/{pypo,pypo-liquidsoap} /var/tmp/airtime/pypo/{cache,files,tmp} /var/tmp/airtime/show-recorder/"
 loudCmd "chown -R ${web_user}:${web_user} /var/log/airtime/{pypo,pypo-liquidsoap} /var/tmp/airtime/pypo/{cache,files,tmp} /var/tmp/airtime/show-recorder/"
 systemInitInstall libretime-liquidsoap "$web_user"
@@ -1022,7 +1029,7 @@ systemInitInstall libretime-playout "$web_user"
 verbose "...Done"
 
 verbose "\n * Installing airtime-celery..."
-loudCmd "$python_bin ${AIRTIMEROOT}/python_apps/airtime-celery/setup.py install --no-init-script"
+loudCmd "$python_bin ${AIRTIMEROOT}/python_apps/airtime-celery/setup.py install"
 # Create the Celery user
 if $is_centos_dist; then
   loudCmd "id celery 2>/dev/null || adduser --no-create-home -c 'LibreTime Celery' -r celery || true"
diff --git a/python_apps/airtime-celery/install/conf/airtime-celery b/python_apps/airtime-celery/install/conf/airtime-celery
deleted file mode 100644
index cee05654b..000000000
--- a/python_apps/airtime-celery/install/conf/airtime-celery
+++ /dev/null
@@ -1,25 +0,0 @@
-# Names of nodes to start
-CELERYD_NODES="airtime-celery"
-
-# Absolute or relative path to the 'celery' command:
-CELERY_BIN="/usr/local/bin/celery"
-
-# App instance to use
-CELERY_APP="airtime-celery.tasks:celery"
-
-# Extra command-line arguments to the worker
-CELERYD_OPTS="--time-limit=1800 --concurrency=1 --config=celeryconfig"
-
-# %N will be replaced with the first part of the nodename.
-CELERYD_LOG_FILE="/var/log/airtime/%N.log"
-CELERYD_PID_FILE="/var/run/celery/%N.pid"
-
-# Workers should run as an unprivileged user.
-#   You need to create this user manually (or you can choose
-#   a user/group combination that already exists, e.g. nobody).
-CELERYD_USER="celery"
-CELERYD_GROUP="celery"
-
-# If enabled pid and log directories will be created if missing,
-# and owned by the userid/group configured.
-CELERY_CREATE_DIRS=1
diff --git a/python_apps/airtime-celery/install/initd/libretime-celery b/python_apps/airtime-celery/install/initd/libretime-celery
deleted file mode 100755
index 6028a1aeb..000000000
--- a/python_apps/airtime-celery/install/initd/libretime-celery
+++ /dev/null
@@ -1,346 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-# ============================================
-#  celeryd - Starts the Celery worker daemon.
-# ============================================
-#
-# :Usage: /etc/init.d/celeryd {start|stop|force-reload|restart|try-restart|status}
-# :Configuration file: /etc/default/celeryd
-#
-# See http://docs.celeryproject.org/en/latest/tutorials/daemonizing.html#generic-init-scripts
-
-### BEGIN INIT INFO
-# Provides:          celeryd
-# Required-Start:    $network $local_fs $remote_fs
-# Required-Stop:     $network $local_fs $remote_fs
-# Default-Start:     2 3 4 5
-# Default-Stop:      0 1 6
-# Short-Description: celery task worker daemon
-### END INIT INFO
-#
-#
-# To implement separate init scripts, copy this script and give it a different
-# name:
-# I.e., if my new application, "little-worker" needs an init, I
-# should just use:
-#
-#   cp /etc/init.d/celeryd /etc/init.d/little-worker
-#
-# You can then configure this by manipulating /etc/default/little-worker.
-#
-VERSION=10.1
-echo "celery init v${VERSION}."
-if [ "$(id -u)" -ne 0 ]; then
-  echo "Error: This program can only be used by the root user."
-  echo "       Unprivileged users must use the 'celery multi' utility, "
-  echo "       or 'celery worker --detach'."
-  exit 1
-fi
-
-export RMQ_CONFIG_FILE="/etc/airtime/airtime.conf"
-
-# Can be a runlevel symlink (e.g. S02celeryd)
-if [ -L "$0" ]; then
-  SCRIPT_FILE=$(readlink "$0")
-else
-  SCRIPT_FILE="$0"
-fi
-SCRIPT_NAME="$(basename "$SCRIPT_FILE")"
-
-DEFAULT_USER="celery"
-DEFAULT_PID_FILE="/var/run/celery/%n.pid"
-DEFAULT_LOG_FILE="/var/log/celery/%n.log"
-DEFAULT_LOG_LEVEL="INFO"
-DEFAULT_NODES="celery"
-# DEFAULT_CELERYD="-m celery worker --detach"
-
-CELERY_DEFAULTS=${CELERY_DEFAULTS:-"/etc/default/${SCRIPT_NAME}"}
-# Make sure executable configuration script is owned by root
-_config_sanity() {
-  local path
-  local owner
-  local iwgrp
-  local iwoth
-  path="$1"
-  owner=$(ls -ld "$path" | awk '{print $3}')
-  iwgrp=$(ls -ld "$path" | cut -b 6)
-  iwoth=$(ls -ld "$path" | cut -b 9)
-  if [ "$(id -u $owner)" != "0" ]; then
-    echo "Error: Config script '$path' must be owned by root!"
-    echo
-    echo "Resolution:"
-    echo "Review the file carefully and make sure it has not been "
-    echo "modified with mailicious intent.  When sure the "
-    echo "script is safe to execute with superuser privileges "
-    echo "you can change ownership of the script:"
-    echo "    $ sudo chown root '$path'"
-    exit 1
-  fi
-  if [ "$iwoth" != "-" ]; then # S_IWOTH
-    echo "Error: Config script '$path' cannot be writable by others!"
-    echo
-    echo "Resolution:"
-    echo "Review the file carefully and make sure it has not been "
-    echo "modified with malicious intent.  When sure the "
-    echo "script is safe to execute with superuser privileges "
-    echo "you can change the scripts permissions:"
-    echo "    $ sudo chmod 640 '$path'"
-    exit 1
-  fi
-  if [ "$iwgrp" != "-" ]; then # S_IWGRP
-    echo "Error: Config script '$path' cannot be writable by group!"
-    echo
-    echo "Resolution:"
-    echo "Review the file carefully and make sure it has not been "
-    echo "modified with malicious intent.  When sure the "
-    echo "script is safe to execute with superuser privileges "
-    echo "you can change the scripts permissions:"
-    echo "    $ sudo chmod 640 '$path'"
-    exit 1
-  fi
-}
-if [ -f "$CELERY_DEFAULTS" ]; then
-  _config_sanity "$CELERY_DEFAULTS"
-  echo "Using config script: $CELERY_DEFAULTS"
-  # shellcheck disable=SC1090
-  . "$CELERY_DEFAULTS"
-fi
-# Sets --app argument for CELERY_BIN
-CELERY_APP_ARG=""
-if [ ! -z "$CELERY_APP" ]; then
-  CELERY_APP_ARG="--app=$CELERY_APP"
-fi
-CELERYD_USER=${CELERYD_USER:-$DEFAULT_USER}
-# Set CELERY_CREATE_DIRS to always create log/pid dirs.
-CELERY_CREATE_DIRS=${CELERY_CREATE_DIRS:-0}
-CELERY_CREATE_RUNDIR=$CELERY_CREATE_DIRS
-CELERY_CREATE_LOGDIR=$CELERY_CREATE_DIRS
-if [ -z "$CELERYD_PID_FILE" ]; then
-  CELERYD_PID_FILE="$DEFAULT_PID_FILE"
-  CELERY_CREATE_RUNDIR=1
-fi
-if [ -z "$CELERYD_LOG_FILE" ]; then
-  CELERYD_LOG_FILE="$DEFAULT_LOG_FILE"
-  CELERY_CREATE_LOGDIR=1
-fi
-CELERYD_LOG_LEVEL=${CELERYD_LOG_LEVEL:-${CELERYD_LOGLEVEL:-$DEFAULT_LOG_LEVEL}}
-CELERY_BIN=${CELERY_BIN:-"celery"}
-CELERYD_MULTI=${CELERYD_MULTI:-"$CELERY_BIN multi"}
-CELERYD_NODES=${CELERYD_NODES:-$DEFAULT_NODES}
-export CELERY_LOADER
-if [ -n "$2" ]; then
-  CELERYD_OPTS="$CELERYD_OPTS $2"
-fi
-CELERYD_LOG_DIR=$(dirname $CELERYD_LOG_FILE)
-CELERYD_PID_DIR=$(dirname $CELERYD_PID_FILE)
-# Extra start-stop-daemon options, like user/group.
-if [ -n "$CELERYD_CHDIR" ]; then
-  DAEMON_OPTS="$DAEMON_OPTS --workdir=$CELERYD_CHDIR"
-fi
-check_dev_null() {
-  if [ ! -c /dev/null ]; then
-    echo "/dev/null is not a character device!"
-    exit 75 # EX_TEMPFAIL
-  fi
-}
-maybe_die() {
-  if [ $? -ne 0 ]; then
-    echo "Exiting: $* (errno $?)"
-    exit 77 # EX_NOPERM
-  fi
-}
-create_default_dir() {
-  if [ ! -d "$1" ]; then
-    echo "- Creating default directory: '$1'"
-    mkdir -p "$1"
-    maybe_die "Couldn't create directory $1"
-    echo "- Changing permissions of '$1' to 02755"
-    chmod 02755 "$1"
-    maybe_die "Couldn't change permissions for $1"
-    if [ -n "$CELERYD_USER" ]; then
-      echo "- Changing owner of '$1' to '$CELERYD_USER'"
-      chown "$CELERYD_USER" "$1"
-      maybe_die "Couldn't change owner of $1"
-    fi
-    if [ -n "$CELERYD_GROUP" ]; then
-      echo "- Changing group of '$1' to '$CELERYD_GROUP'"
-      chgrp "$CELERYD_GROUP" "$1"
-      maybe_die "Couldn't change group of $1"
-    fi
-  fi
-}
-check_paths() {
-  if [ $CELERY_CREATE_LOGDIR -eq 1 ]; then
-    create_default_dir "$CELERYD_LOG_DIR"
-  fi
-  if [ $CELERY_CREATE_RUNDIR -eq 1 ]; then
-    create_default_dir "$CELERYD_PID_DIR"
-  fi
-}
-create_paths() {
-  create_default_dir "$CELERYD_LOG_DIR"
-  create_default_dir "$CELERYD_PID_DIR"
-}
-export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"
-_get_pidfiles() {
-  # note: multi < 3.1.14 output to stderr, not stdout, hence the redirect.
-  ${CELERYD_MULTI} expand "${CELERYD_PID_FILE}" ${CELERYD_NODES} 2>&1
-}
-_get_pids() {
-  found_pids=0
-  my_exitcode=0
-  for pidfile in $(_get_pidfiles); do
-    local pid
-    local cleaned_pid
-    pid=$(cat "$pidfile")
-    cleaned_pid=$(echo "$pid" | sed -e 's/[^0-9]//g')
-    if [ -z "$pid" ] || [ "$cleaned_pid" != "$pid" ]; then
-      echo "bad pid file ($pidfile)"
-      one_failed=true
-      my_exitcode=1
-    else
-      found_pids=1
-      echo "$pid"
-    fi
-    if [ $found_pids -eq 0 ]; then
-      echo "${SCRIPT_NAME}: All nodes down"
-      exit $my_exitcode
-    fi
-  done
-}
-_chuid() {
-  su "$CELERYD_USER" -c "$CELERYD_MULTI $*"
-}
-start_workers() {
-  if [ ! -z "$CELERYD_ULIMIT" ]; then
-    ulimit $CELERYD_ULIMIT
-  fi
-  _chuid "$@" start $CELERYD_NODES $DAEMON_OPTS \
-    --pidfile="$CELERYD_PID_FILE" \
-    --logfile="$CELERYD_LOG_FILE" \
-    --loglevel="$CELERYD_LOG_LEVEL" \
-    $CELERY_APP_ARG \
-    $CELERYD_OPTS
-}
-dryrun() {
-  (C_FAKEFORK=1 start_workers --verbose)
-}
-stop_workers() {
-  _chuid stopwait $CELERYD_NODES --pidfile="$CELERYD_PID_FILE"
-}
-restart_workers() {
-  _chuid restart $CELERYD_NODES $DAEMON_OPTS \
-    --pidfile="$CELERYD_PID_FILE" \
-    --logfile="$CELERYD_LOG_FILE" \
-    --loglevel="$CELERYD_LOG_LEVEL" \
-    $CELERY_APP_ARG \
-    $CELERYD_OPTS
-}
-kill_workers() {
-  _chuid kill $CELERYD_NODES --pidfile="$CELERYD_PID_FILE"
-}
-restart_workers_graceful() {
-  echo "WARNING: Use with caution in production"
-  echo "The workers will attempt to restart, but they may not be able to."
-  local worker_pids=
-  worker_pids=$(_get_pids)
-  [ "$one_failed" ] && exit 1
-  for worker_pid in $worker_pids; do
-    local failed=
-    kill -HUP $worker_pid 2> /dev/null || failed=true
-    if [ "$failed" ]; then
-      echo "${SCRIPT_NAME} worker (pid $worker_pid) could not be restarted"
-      one_failed=true
-    else
-      echo "${SCRIPT_NAME} worker (pid $worker_pid) received SIGHUP"
-    fi
-  done
-  [ "$one_failed" ] && exit 1 || exit 0
-}
-check_status() {
-  my_exitcode=0
-  found_pids=0
-  local one_failed=
-  for pidfile in $(_get_pidfiles); do
-    if [ ! -r $pidfile ]; then
-      echo "${SCRIPT_NAME} down: no pidfiles found"
-      one_failed=true
-      break
-    fi
-    local node
-    local pid
-    local cleaned_pid
-    node=$(basename "$pidfile" .pid)
-    pid=$(cat "$pidfile")
-    cleaned_pid=$(echo "$pid" | sed -e 's/[^0-9]//g')
-    if [ -z "$pid" ] || [ "$cleaned_pid" != "$pid" ]; then
-      echo "bad pid file ($pidfile)"
-      one_failed=true
-    else
-      local failed=
-      kill -0 $pid 2> /dev/null || failed=true
-      if [ "$failed" ]; then
-        echo "${SCRIPT_NAME} (node $node) (pid $pid) is down, but pidfile exists!"
-        one_failed=true
-      else
-        echo "${SCRIPT_NAME} (node $node) (pid $pid) is up..."
-      fi
-    fi
-  done
-  [ "$one_failed" ] && exit 1 || exit 0
-}
-case "$1" in
-  start)
-    check_dev_null
-    check_paths
-    start_workers
-    ;;
-  stop)
-    check_dev_null
-    check_paths
-    stop_workers
-    ;;
-  reload | force-reload)
-    echo "Use restart"
-    ;;
-  status)
-    check_status
-    ;;
-  restart)
-    check_dev_null
-    check_paths
-    restart_workers
-    ;;
-  graceful)
-    check_dev_null
-    restart_workers_graceful
-    ;;
-  kill)
-    check_dev_null
-    kill_workers
-    ;;
-  dryrun)
-    check_dev_null
-    dryrun
-    ;;
-  try-restart)
-    check_dev_null
-    check_paths
-    restart_workers
-    ;;
-  create-paths)
-    check_dev_null
-    create_paths
-    ;;
-  check-paths)
-    check_dev_null
-    check_paths
-    ;;
-  *)
-    echo "Usage: /etc/init.d/${SCRIPT_NAME} {start|stop|restart|graceful|kill|dryrun|create-paths}"
-    exit 64 # EX_USAGE
-    ;;
-esac
-exit 0
diff --git a/python_apps/airtime-celery/setup.py b/python_apps/airtime-celery/setup.py
index d42e54dd3..fc92b0689 100644
--- a/python_apps/airtime-celery/setup.py
+++ b/python_apps/airtime-celery/setup.py
@@ -1,44 +1,9 @@
 import os
-import sys
-from pathlib import Path
-from subprocess import call
 
 from setuptools import setup
 
 # Change directory since setuptools uses relative paths
-script_path = os.path.dirname(os.path.realpath(__file__))
-print(script_path)
-os.chdir(script_path)
-
-install_args = ["install", "install_data", "develop"]
-no_init = False
-run_postinst = False
-
-# XXX Definitely not the best way of doing this...
-if sys.argv[1] in install_args and "--no-init-script" not in sys.argv:
-    run_postinst = True
-    data_files = [
-        ("/etc/default", ["install/conf/airtime-celery"]),
-        ("/etc/init.d", ["install/initd/airtime-celery"]),
-    ]
-else:
-    if "--no-init-script" in sys.argv:
-        no_init = True
-        run_postinst = True  # We still want to run the postinst here
-        sys.argv.remove("--no-init-script")
-    data_files = []
-
-
-def postinst():
-    initd = Path("/etc/init.d/airtime-celery")
-    conf = Path("/etc/default/airtime-celery")
-    if not no_init and initd.is_file() and conf.is_file():
-        # Make /etc/init.d file executable and set proper
-        # permissions for the defaults config file
-        os.chmod("/etc/init.d/airtime-celery", 0o755)
-        os.chmod("/etc/default/airtime-celery", 0o640)
-    print('Run "sudo service airtime-celery restart" now.')
-
+os.chdir(os.path.dirname(os.path.realpath(__file__)))
 
 setup(
     name="airtime-celery",
@@ -49,10 +14,10 @@ setup(
     author_email="duncan.sommerville@sourcefabric.org",
     license="MIT",
     packages=["airtime-celery"],
-    install_requires=["celery==4.4.7", "kombu==4.6.10", "configobj"],
+    install_requires=[
+        "celery==4.4.7",
+        "kombu==4.6.10",
+        "configobj",
+    ],
     zip_safe=False,
-    data_files=data_files,
 )
-
-if run_postinst:
-    postinst()
diff --git a/python_apps/airtime_analyzer/install/sysvinit/libretime-analyzer b/python_apps/airtime_analyzer/install/sysvinit/libretime-analyzer
deleted file mode 100755
index c88be1ea8..000000000
--- a/python_apps/airtime_analyzer/install/sysvinit/libretime-analyzer
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env bash
-
-### BEGIN INIT INFO
-# Provides:          libretime-analyzer
-# Required-Start:    $local_fs $remote_fs $network $syslog $all
-# Required-Stop:     $local_fs $remote_fs $network $syslog
-# Default-Start:     2 3 4 5
-# Default-Stop:      0 1 6
-# Short-Description: Manage libretime-analyzer daemon
-### END INIT INFO
-
-USERID=www-data
-GROUPID=www-data
-NAME=libretime-analyzer
-
-DAEMON=/usr/bin/$NAME
-PIDFILE=/var/run/$NAME.pid
-
-# Exit if the package is not installed
-[ -x "$DAEMON" ] || exit 0
-
-# Read configuration variable file if it is present
-# shellcheck disable=SC1090
-[ -r /etc/default/$NAME ] && . /etc/default/$NAME
-
-# Load the VERBOSE setting and other rcS variables
-. /lib/init/vars.sh
-
-# Define LSB log_* functions.
-# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
-# and status_of_proc is working.
-. /lib/lsb/init-functions
-
-start() {
-  start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \
-    --make-pidfile --pidfile $PIDFILE --startas $DAEMON
-}
-
-stop() {
-  # Send TERM after 5 seconds, wait at most 30 seconds.
-  start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE
-  rm -f $PIDFILE
-}
-
-case "${1:-''}" in
-  'start')
-    # start commands here
-    echo -n "Starting $NAME: "
-    start
-    echo "Done."
-    ;;
-  'stop')
-    # stop commands here
-    echo -n "Stopping $NAME: "
-    stop
-    echo "Done."
-    ;;
-  'restart')
-    # restart commands here
-    echo -n "Restarting $NAME: "
-    stop
-    start
-    echo "Done."
-    ;;
-  'force-reload')
-    # reload commands here
-    echo -n "Reloading $NAME: "
-    stop
-    start
-    echo "Done."
-    ;;
-  'status')
-    status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
-    ;;
-  *)    # no parameter specified
-    echo "Usage: $SELF start|stop|restart|status"
-    exit 1
-    ;;
-esac
diff --git a/python_apps/api_clients/setup.py b/python_apps/api_clients/setup.py
index e8bb5ab75..90bf95f75 100644
--- a/python_apps/api_clients/setup.py
+++ b/python_apps/api_clients/setup.py
@@ -1,14 +1,9 @@
-from __future__ import print_function
-
 import os
-import sys
-from subprocess import call
 
 from setuptools import setup
 
-script_path = os.path.dirname(os.path.realpath(__file__))
-print(script_path)
-os.chdir(script_path)
+# Change directory since setuptools uses relative paths
+os.chdir(os.path.dirname(os.path.realpath(__file__)))
 
 setup(
     name="api_clients",
@@ -18,12 +13,10 @@ setup(
     author="LibreTime Contributors",
     license="AGPLv3",
     packages=["api_clients"],
-    scripts=[],
     install_requires=[
         "configobj",
         "python-dateutil>=2.7.0",
         "requests",
     ],
     zip_safe=False,
-    data_files=[],
 )
diff --git a/python_apps/pypo/install/sysvinit/libretime-liquidsoap b/python_apps/pypo/install/sysvinit/libretime-liquidsoap
deleted file mode 100755
index 35b2cd020..000000000
--- a/python_apps/pypo/install/sysvinit/libretime-liquidsoap
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env bash
-
-### BEGIN INIT INFO
-# Provides:          airtime-liquidsoap
-# Required-Start:    $local_fs $remote_fs $network $syslog $all
-# Required-Stop:     $local_fs $remote_fs $network $syslog
-# Default-Start:     2 3 4 5
-# Default-Stop:      0 1 6
-# Short-Description: Manage airtime-liquidsoap daemon
-### END INIT INFO
-
-USERID=www-data
-GROUPID=www-data
-NAME=airtime-liquidsoap
-
-DAEMON=/usr/bin/$NAME
-PIDFILE=/var/run/$NAME.pid
-
-# Exit if the package is not installed
-[ -x "$DAEMON" ] || exit 0
-
-# Read configuration variable file if it is present
-# shellcheck disable=SC1090
-[ -r /etc/default/$NAME ] && . /etc/default/$NAME
-
-# Load the VERBOSE setting and other rcS variables
-. /lib/init/vars.sh
-
-# Define LSB log_* functions.
-# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
-# and status_of_proc is working.
-. /lib/lsb/init-functions
-
-start() {
-  start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \
-    --make-pidfile --pidfile $PIDFILE --startas $DAEMON
-}
-
-stop() {
-  # Send TERM after 5 seconds, wait at most 30 seconds.
-  start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE
-  rm -f $PIDFILE
-}
-
-case "${1:-''}" in
-  'start')
-    # start commands here
-    echo -n "Starting $NAME: "
-    start
-    echo "Done."
-    ;;
-  'stop')
-    # stop commands here
-    echo -n "Stopping $NAME: "
-    stop
-    echo "Done."
-    ;;
-  'restart')
-    # restart commands here
-    echo -n "Restarting $NAME: "
-    stop
-    start
-    echo "Done."
-    ;;
-  'force-reload')
-    # reload commands here
-    echo -n "Reloading $NAME: "
-    stop
-    start
-    echo "Done."
-    ;;
-  'status')
-    status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
-    ;;
-  *)    # no parameter specified
-    echo "Usage: $SELF start|stop|restart|status"
-    exit 1
-    ;;
-esac
diff --git a/python_apps/pypo/install/sysvinit/libretime-playout b/python_apps/pypo/install/sysvinit/libretime-playout
deleted file mode 100755
index 0183336ac..000000000
--- a/python_apps/pypo/install/sysvinit/libretime-playout
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env bash
-
-### BEGIN INIT INFO
-# Provides:          airtime-playout
-# Required-Start:    $local_fs $remote_fs $network $syslog $all
-# Required-Stop:     $local_fs $remote_fs $network $syslog
-# Default-Start:     2 3 4 5
-# Default-Stop:      0 1 6
-# Short-Description: Manage airtime-playout daemon
-### END INIT INFO
-
-USERID=www-data
-GROUPID=www-data
-NAME=airtime-playout
-
-DAEMON=/usr/bin/$NAME
-PIDFILE=/var/run/$NAME.pid
-
-# Exit if the package is not installed
-[ -x "$DAEMON" ] || exit 0
-
-# Read configuration variable file if it is present
-# shellcheck disable=SC1090
-[ -r /etc/default/$NAME ] && . /etc/default/$NAME
-
-# Load the VERBOSE setting and other rcS variables
-. /lib/init/vars.sh
-
-# Define LSB log_* functions.
-# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
-# and status_of_proc is working.
-. /lib/lsb/init-functions
-
-start() {
-  start-stop-daemon --start --background --quiet --chuid $USERID:$GROUPID \
-    --make-pidfile --pidfile $PIDFILE --startas $DAEMON
-}
-
-stop() {
-  # Send TERM after 5 seconds, wait at most 30 seconds.
-  start-stop-daemon --stop --oknodo --retry TERM/5/0/30 --quiet --pidfile $PIDFILE
-  rm -f $PIDFILE
-}
-
-case "${1:-''}" in
-  'start')
-    # start commands here
-    echo -n "Starting $NAME: "
-    start
-    echo "Done."
-    ;;
-  'stop')
-    # stop commands here
-    echo -n "Stopping $NAME: "
-    stop
-    echo "Done."
-    ;;
-  'restart')
-    # restart commands here
-    echo -n "Restarting $NAME: "
-    stop
-    start
-    echo "Done."
-    ;;
-  'force-reload')
-    # reload commands here
-    echo -n "Reloading $NAME: "
-    stop
-    start
-    echo "Done."
-    ;;
-  'status')
-    status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
-    ;;
-  *)    # no parameter specified
-    echo "Usage: $SELF start|stop|restart|status"
-    exit 1
-    ;;
-esac
diff --git a/python_apps/pypo/setup.py b/python_apps/pypo/setup.py
index 44a63bc2d..feca4c872 100644
--- a/python_apps/pypo/setup.py
+++ b/python_apps/pypo/setup.py
@@ -1,38 +1,10 @@
-from __future__ import print_function
-
 import os
-import sys
-from subprocess import call
 
 from setuptools import setup
 
-script_path = os.path.dirname(os.path.realpath(__file__))
-print(script_path)
-os.chdir(script_path)
+# Change directory since setuptools uses relative paths
+os.chdir(os.path.dirname(os.path.realpath(__file__)))
 
-# Allows us to avoid installing the upstart init script when deploying on Airtime Pro:
-if "--no-init-script" in sys.argv:
-    data_files = []
-    sys.argv.remove("--no-init-script")  # super hax
-else:
-    pypo_files = []
-    for root, dirnames, filenames in os.walk("pypo"):
-        for filename in filenames:
-            pypo_files.append(os.path.join(root, filename))
-
-    data_files = [
-        ("/etc/init", ["install/upstart/airtime-playout.conf.template"]),
-        ("/etc/init", ["install/upstart/airtime-liquidsoap.conf.template"]),
-        ("/etc/init.d", ["install/sysvinit/airtime-playout"]),
-        ("/etc/init.d", ["install/sysvinit/airtime-liquidsoap"]),
-        ("/var/log/airtime/pypo", []),
-        ("/var/log/airtime/pypo-liquidsoap", []),
-        ("/var/tmp/airtime/pypo", []),
-        ("/var/tmp/airtime/pypo/cache", []),
-        ("/var/tmp/airtime/pypo/files", []),
-        ("/var/tmp/airtime/pypo/tmp", []),
-    ]
-    print(data_files)
 
 setup(
     name="airtime-playout",
@@ -41,9 +13,18 @@ setup(
     url="http://github.com/sourcefabric/Airtime",
     author="sourcefabric",
     license="AGPLv3",
-    packages=["pypo", "pypo.media", "pypo.media.update", "liquidsoap"],
+    packages=[
+        "pypo",
+        "pypo.media",
+        "pypo.media.update",
+        "liquidsoap",
+    ],
     package_data={"": ["**/*.liq", "*.cfg", "*.types"]},
-    scripts=["bin/airtime-playout", "bin/airtime-liquidsoap", "bin/pyponotify"],
+    scripts=[
+        "bin/airtime-playout",
+        "bin/airtime-liquidsoap",
+        "bin/pyponotify",
+    ],
     install_requires=[
         "amqplib",
         "anyjson",
@@ -61,13 +42,4 @@ setup(
         "packaging",
     ],
     zip_safe=False,
-    data_files=data_files,
 )
-
-# Reload the initctl config so that playout services works
-if data_files:
-    print("Reloading initctl configuration")
-    # call(['initctl', 'reload-configuration'])
-    print(
-        'Run "sudo service airtime-playout start" and "sudo service airtime-liquidsoap start"'
-    )

From cac25543c6f0c72697204e91c14044b2f79918e3 Mon Sep 17 00:00:00 2001
From: jo <ljonas@riseup.net>
Date: Thu, 2 Sep 2021 14:11:40 +0200
Subject: [PATCH 2/2] Drop Upstart support

---
 install                                       |  7 +++++++
 .../install/upstart/libretime-celery.conf     | 18 ----------------
 .../install/upstart/libretime-analyzer.conf   | 21 -------------------
 .../libretime-liquidsoap.conf.template        | 19 -----------------
 .../upstart/libretime-playout.conf.template   | 19 -----------------
 5 files changed, 7 insertions(+), 77 deletions(-)
 delete mode 100644 python_apps/airtime-celery/install/upstart/libretime-celery.conf
 delete mode 100644 python_apps/airtime_analyzer/install/upstart/libretime-analyzer.conf
 delete mode 100644 python_apps/pypo/install/upstart/libretime-liquidsoap.conf.template
 delete mode 100644 python_apps/pypo/install/upstart/libretime-playout.conf.template

diff --git a/install b/install
index 85bbfbd1e..9661a7a7e 100755
--- a/install
+++ b/install
@@ -723,6 +723,13 @@ if $has_systemv_init; then
     exit 1
 fi
 
+# Upstart is not supported, fail fast instead of cleaning the whole script
+# from Upstart related entries.
+if $has_upstart_init; then
+    echo "ERROR: Installation on Upstart init system is not supported!" >&2
+    exit 1
+fi
+
 if $is_centos_dist; then
   python_bin="python3.8"
   apache_bin="httpd"
diff --git a/python_apps/airtime-celery/install/upstart/libretime-celery.conf b/python_apps/airtime-celery/install/upstart/libretime-celery.conf
deleted file mode 100644
index 93b34efbd..000000000
--- a/python_apps/airtime-celery/install/upstart/libretime-celery.conf
+++ /dev/null
@@ -1,18 +0,0 @@
-description "LibreTime Celery Service"
-author "help@libretime.org"
-
-start on runlevel [2345]
-stop on runlevel [!2345]
-
-respawn
-
-setuid celery
-setgid celery
-
-env LANG='en_US.UTF-8'
-env LC_ALL='en_US.UTF-8'
-env RMQ_CONFIG_FILE=/etc/airtime/airtime.conf
-
-chdir /srv/airtime
-
-exec celery worker -A airtime-celery.tasks:celery --time-limit=300 --concurrency=1 --config=celeryconfig -l INFO
diff --git a/python_apps/airtime_analyzer/install/upstart/libretime-analyzer.conf b/python_apps/airtime_analyzer/install/upstart/libretime-analyzer.conf
deleted file mode 100644
index 6e0fd79fc..000000000
--- a/python_apps/airtime_analyzer/install/upstart/libretime-analyzer.conf
+++ /dev/null
@@ -1,21 +0,0 @@
-description "Airtime Analyzer"
-author "help@sourcefabric.org"
-
-start on runlevel [2345]
-stop on runlevel [!2345]
-
-respawn
-
-setuid www-data
-setgid www-data
-
-#expect fork
-
-env LANG='en_US.UTF-8'
-env LC_ALL='en_US.UTF-8'
-
-#script
-#    libretime-analyzer
-#end script
-
-exec libretime-analyzer
diff --git a/python_apps/pypo/install/upstart/libretime-liquidsoap.conf.template b/python_apps/pypo/install/upstart/libretime-liquidsoap.conf.template
deleted file mode 100644
index f7b6fa696..000000000
--- a/python_apps/pypo/install/upstart/libretime-liquidsoap.conf.template
+++ /dev/null
@@ -1,19 +0,0 @@
-description "Airtime Liquidsoap"
-author "help@sourcefabric.org"
-
-start on runlevel [2345]
-stop on runlevel [!2345]
-
-respawn
-# Respawn it indefinitely
-respawn limit unlimited
-# Wait 3 seconds before spawning it again though, to throttle CPU.
-post-stop exec sleep 3
-
-setuid WEB_USER
-setgid WEB_USER
-
-env LANG='en_US.UTF-8'
-env LC_ALL='en_US.UTF-8'
-
-exec airtime-liquidsoap
diff --git a/python_apps/pypo/install/upstart/libretime-playout.conf.template b/python_apps/pypo/install/upstart/libretime-playout.conf.template
deleted file mode 100644
index 8d94eba5a..000000000
--- a/python_apps/pypo/install/upstart/libretime-playout.conf.template
+++ /dev/null
@@ -1,19 +0,0 @@
-description "Pypo"
-author "help@sourcefabric.org"
-
-start on runlevel [2345]
-stop on runlevel [!2345]
-
-respawn
-# Respawn it indefinitely
-respawn limit unlimited
-# Wait 3 seconds before spawning it again though, to throttle CPU.
-post-stop exec sleep 3
-
-setuid WEB_USER
-setgid WEB_USER
-
-env LANG='en_US.UTF-8'
-env LC_ALL='en_US.UTF-8'
-
-exec airtime-playout