Sunil Mohan Adapa 21e12b3c1f deluge: Perform setup operations during enable
We should use on_install setups as sparingly as possible.  We don't get
callbacks in cases where package is already installed.  Until we
implement our versioned setup mechanism, doing some idempotent setup()
during enable() is much safer.
2015-06-26 18:52:26 +05:30

152 lines
4.3 KiB
Python
Executable File

#!/usr/bin/python3
# -*- mode: python -*-
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
"""
Configuration helper for BitTorrent web client.
"""
import argparse
import os
import subprocess
APACHE_CONF_ENABLED_PATH = '/etc/apache2/conf-enabled/deluge-plinth.conf'
SYSTEMD_SERVICE_PATH = '/etc/systemd/system/deluge-web.service'
SYSTEMD_SERVICE = '''
#
# This file is managed and overwritten by Plinth. If you wish to edit
# it, disable Deluge in Plinth, remove this file and manage it manually.
#
[Unit]
Description=Deluge Web Interface
Documentation=man:deluge-web(1)
After=network.target
[Service]
ExecStart=/usr/bin/deluge-web --base=deluge
Restart=on-failure
User=debian-deluged
Group=debian-deluged
[Install]
WantedBy=multi-user.target
'''
def parse_arguments():
"""Return parsed command line arguments as dictionary."""
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
# Get whether deluge-web site is enabled
subparsers.add_parser('get-enabled',
help='Get whether deluge-web site is enabled')
# Enable deluge-web site and start deluge-web
subparsers.add_parser('enable', help='Enable deluge-web site')
# Disable deluge-web site and stop deluge-web
subparsers.add_parser('disable', help='Disable deluge-web site')
# Get whether deluge-web is running
subparsers.add_parser('is-running',
help='Get whether deluge-web is running')
return parser.parse_args()
def subcommand_get_enabled(_):
"""Get whether deluge-web site is enabled."""
if os.path.isfile(APACHE_CONF_ENABLED_PATH) and \
os.path.isfile(SYSTEMD_SERVICE_PATH):
print('yes')
else:
print('no')
def subcommand_enable(_):
"""Enable deluge-web site and start deluge-web."""
setup()
enable()
def subcommand_disable(_):
"""Disable deluge-web site and stop deluge-web."""
disable()
def subcommand_is_running(_):
"""Get whether deluge-web is running."""
try:
output = subprocess.check_output(['systemctl', 'status', 'deluge-web'])
except subprocess.CalledProcessError:
print('no')
else:
running = False
for line in output.decode().split('\n'):
if 'Active' in line and 'running' in line:
running = True
break
print('yes' if running else 'no')
def enable():
"""Start and enable deluge-web service."""
subprocess.check_call(['systemctl', 'enable', 'deluge-web'])
subprocess.check_call(['systemctl', 'start', 'deluge-web'])
subprocess.check_call(['a2enconf', 'deluge-plinth'])
subprocess.check_call(['service', 'apache2', 'reload'])
def disable():
"""Stop and disable deluge-web service."""
subprocess.check_call(['a2disconf', 'deluge-plinth'])
subprocess.check_call(['service', 'apache2', 'reload'])
try:
subprocess.check_output(['systemctl', 'stop', 'deluge-web'])
subprocess.check_output(['systemctl', 'disable', 'deluge-web'])
except subprocess.CalledProcessError:
pass
def setup():
"""Perform initial setup for deluge-web."""
if not os.path.isfile(SYSTEMD_SERVICE_PATH):
with open(SYSTEMD_SERVICE_PATH, 'w') as file_handle:
file_handle.write(SYSTEMD_SERVICE)
subprocess.check_call(['systemctl', 'daemon-reload'])
def main():
"""Parse arguments and perform all duties."""
arguments = parse_arguments()
subcommand = arguments.subcommand.replace('-', '_')
subcommand_method = globals()['subcommand_' + subcommand]
subcommand_method(arguments)
if __name__ == '__main__':
main()