mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-06-03 10:50:20 +00:00
xmpp: Preseed debconf values before ejabberd and jwchat packages are installed.
This commit is contained in:
parent
6a8fa93477
commit
ca61649105
23
actions/xmpp
23
actions/xmpp
@ -39,6 +39,14 @@ def parse_arguments():
|
||||
parser = argparse.ArgumentParser()
|
||||
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
|
||||
|
||||
# Preseed debconf values before packages are installed.
|
||||
pre_install = subparsers.add_parser(
|
||||
'pre-install',
|
||||
help='Preseed debconf values before packages are installed.')
|
||||
pre_install.add_argument(
|
||||
'--domainname',
|
||||
help='The domain name that will be used by the XMPP service.')
|
||||
|
||||
# Prepare ejabberd for hostname change
|
||||
pre_hostname_change = subparsers.add_parser(
|
||||
'pre-change-hostname',
|
||||
@ -80,6 +88,21 @@ def parse_arguments():
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def subcommand_pre_install(arguments):
|
||||
"""Preseed debconf values before packages are installed."""
|
||||
domainname = arguments.domainname.strip("'")
|
||||
if not domainname:
|
||||
# If new domainname is blank, use hostname instead.
|
||||
domainname = socket.gethostname()
|
||||
|
||||
subprocess.check_output(
|
||||
['debconf-set-selections'],
|
||||
input=b'ejabberd ejabberd/hostname string ' + domainname.encode())
|
||||
subprocess.check_output(
|
||||
['debconf-set-selections'],
|
||||
input=b'jwchat jwchat/ApacheServerName string ' + domainname.encode())
|
||||
|
||||
|
||||
def subcommand_pre_change_hostname(arguments):
|
||||
"""Prepare ejabberd for hostname change"""
|
||||
old_hostname = arguments.old_hostname
|
||||
|
||||
@ -61,8 +61,17 @@ def init():
|
||||
domainname_change.connect(on_domainname_change)
|
||||
|
||||
|
||||
def before_install():
|
||||
"""Preseed debconf values before the packages are installed."""
|
||||
fqdn = socket.getfqdn()
|
||||
domainname = '.'.join(fqdn.split('.')[1:])
|
||||
LOGGER.info('XMPP service domainname will be ', domainname)
|
||||
actions.superuser_run('xmpp', ['pre-install', '--domainname', domainname])
|
||||
|
||||
|
||||
@login_required
|
||||
@package.required(['jwchat', 'ejabberd'])
|
||||
@package.required(['jwchat', 'ejabberd'],
|
||||
before_install=before_install)
|
||||
def index(request):
|
||||
"""Serve XMPP page"""
|
||||
return TemplateResponse(request, 'xmpp.html',
|
||||
|
||||
@ -49,13 +49,14 @@ class PackageException(Exception):
|
||||
class Transaction(object):
|
||||
"""Information about an ongoing transaction."""
|
||||
|
||||
def __init__(self, package_names, on_install=None):
|
||||
def __init__(self, package_names, before_install=None, on_install=None):
|
||||
"""Initialize transaction object.
|
||||
|
||||
Set most values to None until they are sent as progress update.
|
||||
"""
|
||||
self.package_names = package_names
|
||||
# XXX: This is hack, remove after implementing proper setup mechanism.
|
||||
self.before_install = before_install
|
||||
self.on_install = on_install
|
||||
|
||||
# Progress
|
||||
@ -97,6 +98,15 @@ class Transaction(object):
|
||||
|
||||
def _install(self):
|
||||
"""Run a PackageKit transaction to install given packages."""
|
||||
try:
|
||||
if self.before_install:
|
||||
self.before_install()
|
||||
except Exception as exception:
|
||||
logger.exception('Error during setup before install - %s',
|
||||
exception)
|
||||
self.finish(exception)
|
||||
return
|
||||
|
||||
try:
|
||||
self._do_install()
|
||||
except PackageException as exception:
|
||||
@ -209,7 +219,7 @@ class Transaction(object):
|
||||
return self.exception
|
||||
|
||||
|
||||
def required(package_names, on_install=None):
|
||||
def required(package_names, before_install=None, on_install=None):
|
||||
"""Decorate a view to check and install required packages."""
|
||||
|
||||
def wrapper2(func):
|
||||
@ -223,7 +233,8 @@ def required(package_names, on_install=None):
|
||||
|
||||
view = plinth.views.PackageInstallView.as_view()
|
||||
return view(request, package_names=package_names,
|
||||
on_install=on_install, *args, **kwargs)
|
||||
before_install=before_install, on_install=on_install,
|
||||
*args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
|
||||
@ -290,12 +301,14 @@ def is_installing(package_names):
|
||||
return frozenset(package_names) in transactions
|
||||
|
||||
|
||||
def start_install(package_names, on_install=None):
|
||||
def start_install(package_names, before_install=None, on_install=None):
|
||||
"""Start a PackageKit transaction to install given list of packages.
|
||||
|
||||
This operation is non-blocking at it spawns a new thread.
|
||||
"""
|
||||
transaction = Transaction(package_names, on_install=on_install)
|
||||
transaction = Transaction(package_names,
|
||||
before_install=before_install,
|
||||
on_install=on_install)
|
||||
transactions[frozenset(package_names)] = transaction
|
||||
|
||||
transaction.start_install()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user