*: Drop use of managed_packages and rely on Packages component

- For zoph, drop dependency on php7.4 as it will cause issues for future
versions of php. The dependency was a hack and not needed for Bullseye and
higher.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
Sunil Mohan Adapa 2021-11-16 08:11:46 -08:00 committed by James Valleroy
parent 6ba98573d5
commit 4bf57c5707
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
55 changed files with 164 additions and 263 deletions

View File

@ -21,10 +21,6 @@ is_essential = True
managed_services = ['apache2', 'uwsgi']
managed_packages = [
'apache2', 'php-fpm', 'ssl-cert', 'uwsgi', 'uwsgi-plugin-python3'
]
app = None
@ -42,7 +38,9 @@ class ApacheApp(app_module.App):
name=_('Apache HTTP Server'))
self.add(info)
packages = Packages('packages-apache', managed_packages)
packages = Packages('packages-apache', [
'apache2', 'php-fpm', 'ssl-cert', 'uwsgi', 'uwsgi-plugin-python3'
])
self.add(packages)
web_server_ports = Firewall('firewall-web', _('Web Server'),
@ -66,7 +64,7 @@ class ApacheApp(app_module.App):
def setup(helper, old_version=None):
"""Configure the module."""
helper.install(managed_packages)
app.setup(old_version)
actions.superuser_run(
'apache',
['setup', '--old-version', str(old_version)])

View File

@ -29,8 +29,6 @@ depends = ['names']
managed_services = ['avahi-daemon']
managed_packages = ['avahi-daemon', 'avahi-utils']
_description = [
format_lazy(
_('Service discovery allows other devices on the network to '
@ -64,7 +62,7 @@ class AvahiApp(app_module.App):
'avahi:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-avahi', managed_packages)
packages = Packages('packages-avahi', ['avahi-daemon', 'avahi-utils'])
self.add(packages)
domain_type = DomainType('domain-type-local',
@ -96,7 +94,7 @@ class AvahiApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
# Reload avahi-daemon now that first-run does not reboot. After performing
# FreedomBox Service (Plinth) package installation, new Avahi files will be
# available and require restart.

View File

@ -27,8 +27,6 @@ version = 3
is_essential = True
managed_packages = ['borgbackup', 'sshfs']
depends = ['storage']
_description = [
@ -62,7 +60,7 @@ class BackupsApp(app_module.App):
'backups:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-backups', managed_packages)
packages = Packages('packages-backups', ['borgbackup', 'sshfs'])
self.add(packages)
@staticmethod
@ -76,7 +74,7 @@ class BackupsApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
from . import repository
helper.call('post', actions.superuser_run, 'backups',
['setup', '--path', repository.RootBorgRepository.PATH])

View File

@ -19,8 +19,6 @@ from . import manifest
version = 2
managed_packages = ['bepasty']
_description = [
_('bepasty is a web application that allows large files to be uploaded '
'and shared. Text and code snippets can also be pasted and shared. '
@ -80,7 +78,7 @@ class BepastyApp(app_module.App):
clients=manifest.clients)
self.add(shortcut)
packages = Packages('packages-bepasty', managed_packages)
packages = Packages('packages-bepasty', ['bepasty'])
self.add(packages)
firewall = Firewall('firewall-bepasty', info.name,
@ -101,7 +99,7 @@ class BepastyApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'bepasty',
['setup', '--domain-name', 'freedombox.local'])
helper.call('post', app.enable)

View File

@ -25,8 +25,6 @@ version = 2
managed_services = ['bind9', 'named']
managed_packages = ['bind9']
_description = [
_('BIND enables you to publish your Domain Name System (DNS) information '
'on the Internet, and to resolve DNS queries for your user devices on '
@ -87,7 +85,7 @@ class BindApp(app_module.App):
parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-bind', managed_packages)
packages = Packages('packages-bind', ['bind9'])
self.add(packages)
firewall = Firewall('firewall-bind', info.name, ports=['dns'],
@ -109,7 +107,7 @@ class BindApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call(
'post', actions.superuser_run, 'bind',
['setup', '--old-version', str(old_version)])
@ -118,7 +116,7 @@ def setup(helper, old_version=None):
def force_upgrade(helper, _packages):
"""Force upgrade the managed packages to resolve conffile prompt."""
helper.install(managed_packages, force_configuration='old')
helper.install(['bind9'], force_configuration='old')
return True

View File

@ -25,8 +25,6 @@ version = 1
managed_services = ['calibre-server-freedombox']
managed_packages = ['calibre']
_description = [
format_lazy(
_('calibre server provides online access to your e-book collection. '
@ -79,7 +77,7 @@ class CalibreApp(app_module.App):
allowed_groups=list(groups))
self.add(shortcut)
packages = Packages('packages-calibre', managed_packages)
packages = Packages('packages-calibre', ['calibre'])
self.add(packages)
firewall = Firewall('firewall-calibre', info.name,
@ -106,7 +104,7 @@ class CalibreApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', app.enable)

View File

@ -26,8 +26,6 @@ is_essential = True
managed_services = ['cockpit.socket']
managed_packages = ['cockpit']
_description = [
format_lazy(
_('Cockpit is a server manager that makes it easy to administer '
@ -83,7 +81,7 @@ class CockpitApp(app_module.App):
allowed_groups=['admin'])
self.add(shortcut)
packages = Packages('packages-cockpit', managed_packages)
packages = Packages('packages-cockpit', ['cockpit'])
self.add(packages)
firewall = Firewall('firewall-cockpit', info.name,
@ -110,7 +108,7 @@ class CockpitApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
domains = names.components.DomainName.list_names('https')
helper.call('post', actions.superuser_run, 'cockpit',
['setup'] + list(domains))

View File

@ -31,8 +31,6 @@ _description = [
depends = ['apache', 'firewall', 'names']
managed_packages = ['zram-tools']
APACHE_CONF_ENABLED_DIR = '/etc/apache2/conf-enabled'
APACHE_HOMEPAGE_CONF_FILE_NAME = 'freedombox-apache-homepage.conf'
APACHE_HOMEPAGE_CONFIG = os.path.join(APACHE_CONF_ENABLED_DIR,
@ -65,7 +63,7 @@ class ConfigApp(app_module.App):
'config:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-config', managed_packages)
packages = Packages('packages-config', ['zram-tools'])
self.add(packages)
domain_type = DomainType('domain-type-static', _('Domain Name'),
@ -192,7 +190,7 @@ def set_advanced_mode(advanced_mode):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
_migrate_home_page_config()
# systemd-journald is socket activated, it may not be running and it does

View File

@ -29,8 +29,6 @@ version = 1
managed_services = ['coturn']
managed_packages = ['coturn']
managed_paths = [pathlib.Path('/etc/coturn/')]
_description = [
@ -70,7 +68,7 @@ class CoturnApp(app_module.App):
parent_url_name='apps')
self.add(menu_item)
packages = Packages('packages-coturn', managed_packages)
packages = Packages('packages-coturn', ['coturn'])
self.add(packages)
firewall = Firewall('firewall-coturn', info.name,
@ -107,7 +105,7 @@ class CoturnApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'coturn', ['setup'])
helper.call('post', app.enable)
app.get_component('letsencrypt-coturn').setup_certificates()

View File

@ -22,8 +22,6 @@ version = 6
managed_services = ['deluged', 'deluge-web']
managed_packages = ['deluged', 'deluge-web']
_description = [
_('Deluge is a BitTorrent client that features a Web UI.'),
_('The default password is \'deluge\', but you should log in and '
@ -70,7 +68,7 @@ class DelugeApp(app_module.App):
allowed_groups=list(groups))
self.add(shortcut)
packages = Packages('packages-deluge', managed_packages)
packages = Packages('packages-deluge', ['deluged', 'deluge-web'])
self.add(packages)
firewall = Firewall('firewall-deluge', info.name,
@ -101,7 +99,7 @@ class DelugeApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
add_user_to_share_group(SYSTEM_USER)
helper.call('post', actions.superuser_run, 'deluge', ['setup'])
helper.call('post', app.enable)

View File

@ -40,8 +40,6 @@ version = 1
managed_services = ['diaspora']
managed_packages = ['diaspora']
_description = [
_('diaspora* is a decentralized social network where you can store '
'and control your own data.'),
@ -84,7 +82,7 @@ class DiasporaApp(app_module.App):
clients=info.clients, login_required=True)
self.add(shortcut)
packages = Packages('packages-diaspora', managed_packages)
packages = Packages('packages-diaspora', ['diaspora'])
self.add(packages)
firewall = Firewall('firewall-diaspora', info.name,
@ -127,7 +125,7 @@ class Shortcut(frontpage.Shortcut):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.call('pre', actions.superuser_run, 'diaspora', ['pre-install'])
helper.install(managed_packages)
app.setup(old_version)
helper.call('custom_config', actions.superuser_run, 'diaspora',
['disable-ssl'])

View File

@ -23,8 +23,6 @@ is_essential = True
depends = ['names']
managed_packages = ['ez-ipupdate']
_description = [
format_lazy(
_('If your Internet provider changes your IP address periodically '
@ -64,7 +62,7 @@ class DynamicDNSApp(app_module.App):
'dynamicdns:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-dynamicdns', managed_packages)
packages = Packages('packages-dynamicdns', ['ez-ipupdate'])
self.add(packages)
domain_type = DomainType('domain-type-dynamic',
@ -101,7 +99,7 @@ class DynamicDNSApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
def get_status():

View File

@ -32,8 +32,6 @@ version = 4
managed_services = ['ejabberd']
managed_packages = ['ejabberd']
managed_paths = [pathlib.Path('/etc/ejabberd/')]
_description = [
@ -90,7 +88,7 @@ class EjabberdApp(app_module.App):
login_required=True)
self.add(shortcut)
packages = Packages('packages-ejabberd', managed_packages)
packages = Packages('packages-ejabberd', ['ejabberd'])
self.add(packages)
firewall = Firewall('firewall-ejabberd', info.name,
@ -152,7 +150,7 @@ def setup(helper, old_version=None):
helper.call('pre', actions.superuser_run, 'ejabberd',
['pre-install', '--domainname', domainname])
# XXX: Configure all other domain names
helper.install(managed_packages)
app.setup(old_version)
helper.call('post',
app.get_component('letsencrypt-ejabberd').setup_certificates,
[domainname])

View File

@ -14,7 +14,7 @@ from plinth.modules.apache.components import Webserver
from plinth.modules.config import get_domainname
from plinth.modules.firewall.components import Firewall
from plinth.modules.letsencrypt.components import LetsEncrypt
from plinth.package import packages_installed, remove
from plinth.package import Packages, packages_installed, remove
from . import audit, manifest
@ -27,18 +27,6 @@ version = 1
package_conflicts = ('exim4-base', 'exim4-config', 'exim4-daemon-light')
package_conflicts_action = 'ignore'
packages = [
'postfix-ldap',
'postfix-sqlite',
'dovecot-pop3d',
'dovecot-imapd',
'dovecot-ldap',
'dovecot-lmtpd',
'dovecot-managesieved',
]
packages_bloat = ['rspamd']
clamav_packages = ['clamav', 'clamav-daemon']
clamav_daemons = ['clamav-daemon', 'clamav-freshclam']
@ -49,8 +37,6 @@ port_info = {
managed_services = ['postfix', 'dovecot', 'rspamd']
managed_packages = packages + packages_bloat
_description = [
_('<a href="/plinth/apps/roundcube/">Roundcube app</a> provides web '
'interface for users to access email.'),
@ -71,6 +57,17 @@ class EmailServerApp(plinth.app.App):
"""The app's constructor"""
super().__init__()
self._add_ui_components()
packages = Packages('packages-email-server', [
'postfix-ldap', 'postfix-sqlite', 'dovecot-pop3d', 'dovecot-imapd',
'dovecot-ldap', 'dovecot-lmtpd', 'dovecot-managesieved'
])
self.add(packages)
packages = Packages('packages-email-server-skip-rec', ['rspamd'],
skip_recommends=True)
self.add(packages)
self._add_daemons()
self._add_firewall_ports()
@ -160,8 +157,7 @@ def setup(helper, old_version=None):
# Install
helper.call('pre', _clear_conflicts)
helper.install(packages)
helper.install(packages_bloat, skip_recommends=True)
app.setup(old_version)
# Setup
helper.call('post', audit.home.repair)

View File

@ -25,8 +25,6 @@ version = 2
is_essential = True
managed_packages = ['firewalld', 'nftables']
managed_services = ['firewalld']
_description = [
@ -74,7 +72,7 @@ class FirewallApp(app_module.App):
'firewall:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-firewall', managed_packages)
packages = Packages('packages-firewall', ['firewalld', 'nftables'])
self.add(packages)
daemon = Daemon('daemon-firewall', managed_services[0])
@ -98,7 +96,7 @@ def _run_setup():
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
_run_setup()

View File

@ -24,8 +24,6 @@ from .manifest import GIT_REPO_PATH
version = 1
managed_packages = ['gitweb', 'highlight']
_description = [
_('Git is a distributed version-control system for tracking changes in '
'source code during software development. Gitweb provides a web '
@ -74,7 +72,7 @@ class GitwebApp(app_module.App):
allowed_groups=list(groups))
self.add(shortcut)
packages = Packages('packages-gitweb', managed_packages)
packages = Packages('packages-gitweb', ['gitweb', 'highlight'])
self.add(packages)
firewall = Firewall('firewall-gitweb', info.name,
@ -161,7 +159,7 @@ class GitwebBackupRestore(BackupRestore):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'gitweb', ['setup'])
helper.call('post', app.enable)

View File

@ -24,8 +24,6 @@ service_name = 'i2p'
managed_services = [service_name]
managed_packages = ['i2p']
_description = [
_('The Invisible Internet Project is an anonymous network layer intended '
'to protect communication from censorship and surveillance. I2P '
@ -78,7 +76,7 @@ class I2PApp(app_module.App):
allowed_groups=list(groups))
self.add(shortcut)
packages = Packages('packages-i2p', managed_packages)
packages = Packages('packages-i2p', ['i2p'])
self.add(packages)
firewall = Firewall('firewall-i2p-web', info.name,
@ -108,7 +106,7 @@ class I2PApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', app.disable)
# Add favorites to the configuration

View File

@ -20,11 +20,6 @@ from . import manifest
version = 1
managed_packages = [
'ikiwiki', 'libdigest-sha-perl', 'libxml-writer-perl', 'xapian-omega',
'libsearch-xapian-perl', 'libimage-magick-perl'
]
_description = [
_('ikiwiki is a simple wiki and blog application. It supports '
'several lightweight markup languages, including Markdown, and '
@ -65,7 +60,10 @@ class IkiwikiApp(app_module.App):
self.refresh_sites()
packages = Packages('packages-ikiwiki', managed_packages)
packages = Packages('packages-ikiwiki', [
'ikiwiki', 'libdigest-sha-perl', 'libxml-writer-perl',
'xapian-omega', 'libsearch-xapian-perl', 'libimage-magick-perl'
])
self.add(packages)
firewall = Firewall('firewall-ikiwiki', info.name,
@ -113,6 +111,6 @@ class IkiwikiApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'ikiwiki', ['setup'])
helper.call('post', app.enable)

View File

@ -21,8 +21,6 @@ version = 3
managed_services = ['infinoted']
managed_packages = ['infinoted']
_description = [
_('infinoted is a server for Gobby, a collaborative text editor.'),
format_lazy(
@ -65,7 +63,7 @@ class InfinotedApp(app_module.App):
clients=info.clients, login_required=False)
self.add(shortcut)
packages = Packages('packages-infinoted', managed_packages)
packages = Packages('packages-infinoted', ['infinoted'])
self.add(packages)
firewall = Firewall('firewall-infinoted', info.name,
@ -83,6 +81,6 @@ class InfinotedApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'infinoted', ['setup'])
helper.call('post', app.enable)

View File

@ -19,8 +19,6 @@ from . import manifest
version = 1
managed_packages = ['libjs-jsxc']
_description = [
_('JSXC is a web client for XMPP. Typically it is used with an XMPP '
'server running locally.'),
@ -61,7 +59,7 @@ class JSXCApp(app_module.App):
clients=info.clients)
self.add(shortcut)
packages = Packages('packages-jsxc', managed_packages)
packages = Packages('packages-jsxc', ['libjs-jsxc'])
self.add(packages)
firewall = Firewall('firewall-jsxc', info.name,
@ -85,5 +83,5 @@ class JSXCApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', app.enable)

View File

@ -29,8 +29,6 @@ is_essential = True
depends = ['names']
managed_packages = ['certbot']
_description = [
format_lazy(
_('A digital certificate allows users of a web service to verify the '
@ -76,7 +74,7 @@ class LetsEncryptApp(app_module.App):
'letsencrypt:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-letsencrypt', managed_packages)
packages = Packages('packages-letsencrypt', ['certbot'])
self.add(packages)
backup_restore = BackupRestore('backup-restore-letsencrypt',
@ -108,7 +106,7 @@ class LetsEncryptApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
actions.superuser_run(
'letsencrypt',
['setup', '--old-version', str(old_version)])

View File

@ -30,8 +30,6 @@ version = 7
managed_services = ['matrix-synapse']
managed_packages = ['matrix-synapse', 'matrix-synapse-ldap3']
managed_paths = [pathlib.Path('/etc/matrix-synapse/')]
_description = [
@ -94,7 +92,8 @@ class MatrixSynapseApp(app_module.App):
clients=info.clients, login_required=True)
self.add(shortcut)
packages = Packages('packages-matrixsynapse', managed_packages)
packages = Packages('packages-matrixsynapse',
['matrix-synapse', 'matrix-synapse-ldap3'])
self.add(packages)
firewall = Firewall('firewall-matrixsynapse', info.name,
@ -137,7 +136,7 @@ class MatrixSynapseTurnConsumer(TurnConsumer):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
if old_version and old_version < 6:
helper.call('post', upgrade, helper)
else:

View File

@ -21,8 +21,6 @@ from . import manifest
version = 10
managed_packages = ['mediawiki', 'imagemagick', 'php-sqlite3']
managed_services = ['mediawiki-jobrunner']
_description = [
@ -75,7 +73,8 @@ class MediaWikiApp(app_module.App):
clients=info.clients, login_required=True)
self.add(shortcut)
packages = Packages('packages-mediawiki', managed_packages)
packages = Packages('packages-mediawiki',
['mediawiki', 'imagemagick', 'php-sqlite3'])
self.add(packages)
firewall = Firewall('firewall-mediawiki', info.name,
@ -109,7 +108,7 @@ class Shortcut(frontpage.Shortcut):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'mediawiki', ['setup'])
helper.call('post', actions.superuser_run, 'mediawiki', ['update'])
helper.call('post', app.enable)

View File

@ -22,7 +22,7 @@ version = 2
managed_services = ['minetest-server']
mods = [
_mods = [
'minetest-mod-character-creator', 'minetest-mod-craftguide',
'minetest-mod-infinite-chest', 'minetest-mod-lucky-block',
'minetest-mod-maidroid', 'minetest-mod-mesecons',
@ -33,8 +33,6 @@ mods = [
'minetest-mod-unifieddyes', 'minetest-mod-worldedit'
]
managed_packages = ['minetest-server'] + mods
_description = [
format_lazy(
_('Minetest is a multiplayer infinite-world block sandbox. This '
@ -80,7 +78,7 @@ class MinetestApp(app_module.App):
login_required=False)
self.add(shortcut)
packages = Packages('packages-minetest', managed_packages)
packages = Packages('packages-minetest', ['minetest-server'] + _mods)
self.add(packages)
firewall = Firewall('firewall-minetest', info.name,
@ -103,7 +101,7 @@ class MinetestApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', app.enable)

View File

@ -18,8 +18,6 @@ from . import manifest
version = 2
managed_packages = ['minidlna']
managed_services = ['minidlna']
_description = [
@ -72,7 +70,7 @@ class MiniDLNAApp(app_module.App):
allowed_groups=list(groups))
self.add(shortcut)
packages = Packages('packages-minidlna', managed_packages)
packages = Packages('packages-minidlna', ['minidlna'])
self.add(packages)
firewall = Firewall('firewall-minidlna', info.name, ports=['minidlna'],
@ -97,7 +95,7 @@ class MiniDLNAApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the package"""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'minidlna', ['setup'])
if not old_version:
helper.call('post', app.enable)

View File

@ -23,8 +23,6 @@ version = 2
managed_services = ['mldonkey-server']
managed_packages = ['mldonkey-server']
_description = [
_('MLDonkey is a peer-to-peer file sharing application used to exchange '
'large files. It can participate in multiple peer-to-peer networks '
@ -74,7 +72,7 @@ class MLDonkeyApp(app_module.App):
allowed_groups=list(groups))
self.add(shortcuts)
packages = Packages('packages-mldonkey', managed_packages)
packages = Packages('packages-mldonkey', ['mldonkey-server'])
self.add(packages)
firewall = Firewall('firewall-mldonkey', info.name,
@ -102,7 +100,7 @@ class MLDonkeyApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.call('pre', actions.superuser_run, 'mldonkey', ['pre-install'])
helper.install(managed_packages)
app.setup(old_version)
if not old_version:
helper.call('post', app.enable)

View File

@ -15,8 +15,6 @@ from . import manifest
version = 1
managed_packages = ['monkeysphere']
_description = [
_('With Monkeysphere, an OpenPGP key can be generated for each configured '
'domain serving SSH. The OpenPGP public key can then be uploaded to the '
@ -59,7 +57,7 @@ class MonkeysphereApp(app_module.App):
advanced=True)
self.add(menu_item)
packages = Packages('packages-monkeysphere', managed_packages)
packages = Packages('packages-monkeysphere', ['monkeysphere'])
self.add(packages)
users_and_groups = UsersAndGroups('users-and-groups-monkeysphere',
@ -73,4 +71,4 @@ class MonkeysphereApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)

View File

@ -26,8 +26,6 @@ version = 2
managed_services = ['mumble-server']
managed_packages = ['mumble-server']
managed_paths = [pathlib.Path('/var/lib/mumble-server')]
_description = [
@ -69,7 +67,7 @@ class MumbleApp(app_module.App):
configure_url=reverse_lazy('mumble:index'), clients=info.clients)
self.add(shortcut)
packages = Packages('packages-mumble', managed_packages)
packages = Packages('packages-mumble', ['mumble-server'])
self.add(packages)
firewall = Firewall('firewall-mumble', info.name,
@ -102,7 +100,7 @@ class MumbleApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'mumble', ['setup'])
if not old_version:
helper.call('post', app.enable)

View File

@ -18,8 +18,6 @@ version = 1
is_essential = True
managed_packages = ['network-manager', 'batctl']
first_boot_steps = [
{
'id': 'network_topology_wizard',
@ -69,7 +67,7 @@ class NetworksApp(app_module.App):
'networks:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-networks', managed_packages)
packages = Packages('packages-networks', ['network-manager', 'batctl'])
self.add(packages)
def diagnose(self):
@ -91,7 +89,7 @@ class NetworksApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
actions.superuser_run('networks')
helper.call('post', app.enable)

View File

@ -24,8 +24,6 @@ version = 4
managed_services = ['openvpn-server@freedombox']
managed_packages = ['openvpn', 'easy-rsa']
_description = [
format_lazy(
_('Virtual Private Network (VPN) is a technique for securely '
@ -82,7 +80,7 @@ class OpenVPNApp(app_module.App):
allowed_groups=['vpn'])
self.add(shortcut)
packages = Packages('packages-openvpn', managed_packages)
packages = Packages('packages-openvpn', ['openvpn', 'easy-rsa'])
self.add(packages)
firewall = Firewall('firewall-openvpn', info.name, ports=['openvpn'],
@ -112,7 +110,7 @@ class OpenVPNApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'openvpn', ['setup'])
helper.call('post', app.enable)

View File

@ -22,8 +22,6 @@ depends = ['names']
managed_services = ['pagekite']
managed_packages = ['pagekite']
_description = [
format_lazy(
_('PageKite is a system for exposing {box_name} services when '
@ -75,7 +73,7 @@ class PagekiteApp(app_module.App):
'pagekite:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-pagekite', managed_packages)
packages = Packages('packages-pagekite', ['pagekite'])
self.add(packages)
domain_type = DomainType('domain-type-pagekite', _('PageKite Domain'),
@ -109,7 +107,7 @@ class PagekiteApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
if not old_version:
helper.call('post', app.enable)

View File

@ -21,8 +21,6 @@ managed_services = [
'pmcd.service', 'pmie.service', 'pmlogger.service', 'pmproxy.service'
]
managed_packages = ['cockpit-pcp']
_description = [
_('Performance app allows you to collect, store and view information '
'about utilization of the hardware. This can give you basic insights '
@ -57,7 +55,7 @@ class PerformanceApp(app_module.App):
'performance:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-performance', managed_packages)
packages = Packages('packages-performance', ['cockpit-pcp'])
self.add(packages)
backup_restore = BackupRestore('backup-restore-performance',
@ -83,5 +81,5 @@ class PerformanceApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', app.enable)

View File

@ -25,8 +25,6 @@ is_essential = False
managed_services = ['privoxy']
managed_packages = ['privoxy']
_description = [
_('Privoxy is a non-caching web proxy with advanced filtering '
'capabilities for enhancing privacy, modifying web page data and '
@ -73,7 +71,7 @@ class PrivoxyApp(app_module.App):
configure_url=reverse_lazy('privoxy:index'), login_required=True)
self.add(shortcut)
packages = Packages('packages-privoxy', managed_packages)
packages = Packages('packages-privoxy', ['privoxy'])
self.add(packages)
firewall = Firewall('firewall-privoxy', info.name, ports=['privoxy'],
@ -103,7 +101,7 @@ class PrivoxyApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.call('pre', actions.superuser_run, 'privoxy', ['pre-install'])
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', app.enable)

View File

@ -26,8 +26,6 @@ version = 1
managed_services = ['quasselcore']
managed_packages = ['quassel-core']
managed_paths = [pathlib.Path('/var/lib/quassel/')]
_description = [
@ -78,7 +76,7 @@ class QuasselApp(app_module.App):
login_required=True)
self.add(shortcut)
packages = Packages('packages-quassel', managed_packages)
packages = Packages('packages-quassel', ['quassel-core'])
self.add(packages)
firewall = Firewall('firewall-quassel', info.name,
@ -109,7 +107,7 @@ class QuasselApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', app.enable)
app.get_component('letsencrypt-quassel').setup_certificates()

View File

@ -22,8 +22,6 @@ from . import manifest
version = 2
managed_packages = ['radicale']
_description = [
format_lazy(
_('Radicale is a CalDAV and CardDAV server. It allows synchronization '
@ -73,7 +71,7 @@ class RadicaleApp(app_module.App):
login_required=True)
self.add(shortcut)
packages = Packages('packages-radicale', managed_packages)
packages = Packages('packages-radicale', ['radicale'])
self.add(packages)
firewall = Firewall('firewall-radicale', info.name,
@ -103,7 +101,7 @@ class RadicaleApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', app.enable)

View File

@ -18,8 +18,6 @@ from . import manifest
version = 1
managed_packages = ['sqlite3', 'roundcube', 'roundcube-sqlite3']
_description = [
_('Roundcube webmail is a browser-based multilingual IMAP '
'client with an application-like user interface. It provides '
@ -71,7 +69,8 @@ class RoundcubeApp(app_module.App):
login_required=True)
self.add(shortcut)
packages = Packages('packages-roundcube', managed_packages)
packages = Packages('packages-roundcube',
['sqlite3', 'roundcube', 'roundcube-sqlite3'])
self.add(packages)
firewall = Firewall('firewall-roundcube', info.name,
@ -90,7 +89,7 @@ class RoundcubeApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.call('pre', actions.superuser_run, 'roundcube', ['pre-install'])
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'roundcube', ['setup'])
helper.call('post', app.enable)

View File

@ -27,8 +27,6 @@ version = 2
managed_services = ['smbd', 'nmbd']
managed_packages = ['samba', 'acl']
_description = [
_('Samba allows to share files and folders between FreedomBox and '
'other computers in your local network.'),
@ -80,7 +78,7 @@ class SambaApp(app_module.App):
login_required=True, allowed_groups=list(groups))
self.add(shortcut)
packages = Packages('packages-samba', managed_packages)
packages = Packages('packages-samba', ['samba', 'acl'])
self.add(packages)
firewall = Firewall('firewall-samba', info.name, ports=['samba'])
@ -122,7 +120,7 @@ class SambaBackupRestore(BackupRestore):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'samba', ['setup'])
helper.call('post', app.enable)

View File

@ -20,8 +20,6 @@ from . import manifest
version = 4
managed_packages = ['searx']
_description = [
_('Searx is a privacy-respecting Internet metasearch engine. '
'It aggregrates and displays results from multiple search engines.'),
@ -64,7 +62,7 @@ class SearxApp(app_module.App):
allowed_groups=list(groups))
self.add(shortcut)
packages = Packages('packages-searx', managed_packages)
packages = Packages('packages-searx', ['searx'])
self.add(packages)
firewall = Firewall('firewall-searx', info.name,
@ -112,7 +110,7 @@ class SearxWebserverAuth(Webserver):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'searx', ['setup'])
if not old_version or old_version < 3:
helper.call('post', actions.superuser_run, 'searx',

View File

@ -21,8 +21,6 @@ version = 7
is_essential = True
managed_packages = ['fail2ban', 'debsecan']
managed_services = ['fail2ban']
ACCESS_CONF_FILE = '/etc/security/access.d/50freedombox.conf'
@ -52,7 +50,7 @@ class SecurityApp(app_module.App):
'security:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-security', managed_packages)
packages = Packages('packages-security', ['fail2ban', 'debsecan'])
self.add(packages)
backup_restore = BackupRestore('backup-restore-security',
@ -62,7 +60,7 @@ class SecurityApp(app_module.App):
def setup(helper, old_version=None):
"""Install the required packages"""
helper.install(managed_packages)
app.setup(old_version)
if not old_version:
enable_fail2ban()

View File

@ -15,8 +15,6 @@ from . import manifest
version = 1
managed_packages = ['shaarli']
_description = [
_('Shaarli allows you to save and share bookmarks.'),
_('Note that Shaarli only supports a single user account, which you will '
@ -54,7 +52,7 @@ class ShaarliApp(app_module.App):
login_required=True)
self.add(shortcut)
packages = Packages('packages-shaarli', managed_packages)
packages = Packages('packages-shaarli', ['shaarli'])
self.add(packages)
firewall = Firewall('firewall-shaarli', info.name,
@ -67,5 +65,5 @@ class ShaarliApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', app.enable)

View File

@ -21,8 +21,6 @@ version = 3
managed_services = ['shadowsocks-libev-local@freedombox']
managed_packages = ['shadowsocks-libev']
_description = [
_('Shadowsocks is a lightweight and secure SOCKS5 proxy, designed to '
'protect your Internet traffic. It can be used to bypass Internet '
@ -70,7 +68,7 @@ class ShadowsocksApp(app_module.App):
login_required=True)
self.add(shortcut)
packages = Packages('packages-shadowsocks', managed_packages)
packages = Packages('packages-shadowsocks', ['shadowsocks-libev'])
self.add(packages)
firewall = Firewall('firewall-shadowsocks', info.name,
@ -89,6 +87,6 @@ class ShadowsocksApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
helper.install(['shadowsocks-libev'])
helper.call('post', actions.superuser_run, 'shadowsocks', ['setup'])
helper.call('post', app.enable)

View File

@ -22,8 +22,6 @@ version = 4
is_essential = True
managed_packages = ['snapper']
_description = [
_('Snapshots allows creating and managing btrfs file system snapshots. '
'These can be used to roll back the system to a previously known '
@ -64,7 +62,7 @@ class SnapshotApp(app_module.App):
'snapshot:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-snapshot', managed_packages)
packages = Packages('packages-snapshot', ['snapper'])
self.add(packages)
backup_restore = SnapshotBackupRestore('backup-restore-snapshot',
@ -92,7 +90,7 @@ def is_supported():
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
if is_supported():
helper.call('post', actions.superuser_run, 'snapshot',
['setup', '--old-version',

View File

@ -25,8 +25,6 @@ is_essential = True
managed_services = ['ssh']
managed_packages = ['openssh-server']
_description = [
_('A Secure Shell server uses the secure shell protocol to accept '
'connections from remote computers. An authorized remote computer '
@ -56,7 +54,7 @@ class SSHApp(app_module.App):
'ssh:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-ssh', managed_packages)
packages = Packages('packages-ssh', ['openssh-server'])
self.add(packages)
firewall = Firewall('firewall-ssh', info.name, ports=['ssh'],
@ -72,6 +70,7 @@ class SSHApp(app_module.App):
def setup(helper, old_version=None):
"""Configure the module."""
app.setup(old_version)
actions.superuser_run('ssh', ['setup'])
helper.call('post', app.enable)

View File

@ -15,12 +15,7 @@ is_essential = True
depends = ['security', 'apache']
managed_packages = [
'libapache2-mod-auth-pubtkt',
'openssl',
'python3-openssl',
'flite',
]
app = None
class SSOApp(app_module.App):
@ -36,11 +31,16 @@ class SSOApp(app_module.App):
name=_('Single Sign On'))
self.add(info)
packages = Packages('packages-sso', managed_packages)
packages = Packages('packages-sso', [
'libapache2-mod-auth-pubtkt',
'openssl',
'python3-openssl',
'flite',
])
self.add(packages)
def setup(helper, old_version=None):
"""Install the required packages"""
helper.install(managed_packages)
app.setup(old_version)
actions.superuser_run('auth-pubtkt', ['create-key-pair'])

View File

@ -23,8 +23,6 @@ from . import manifest, udisks2
version = 4
managed_packages = ['parted', 'udisks2', 'gir1.2-udisks-2.0']
_description = [
format_lazy(
_('This module allows you to manage storage media attached to your '
@ -61,7 +59,9 @@ class StorageApp(app_module.App):
'storage:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-storage', managed_packages)
packages = Packages('packages-storage',
['parted', 'udisks2', 'gir1.2-udisks-2.0'],
skip_recommends=True)
self.add(packages)
backup_restore = BackupRestore('backup-restore-storage',
@ -279,7 +279,7 @@ def get_error_message(error):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages, skip_recommends=True)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'storage', ['setup'])
helper.call('post', app.enable)
disks = get_disks()

View File

@ -23,8 +23,6 @@ version = 5
managed_services = ['syncthing@syncthing']
managed_packages = ['syncthing']
_description = [
_('Syncthing is an application to synchronize files across multiple '
'devices, e.g. your desktop computer and mobile phone. Creation, '
@ -81,7 +79,7 @@ class SyncthingApp(app_module.App):
allowed_groups=list(self.groups))
self.add(shortcut)
packages = Packages('packages-syncthing', managed_packages)
packages = Packages('packages-syncthing', ['syncthing'])
self.add(packages)
firewall = Firewall('firewall-syncthing-web', info.name,
@ -110,7 +108,7 @@ class SyncthingApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'syncthing', ['setup'])
add_user_to_share_group(SYSTEM_USER, managed_services[0])

View File

@ -26,8 +26,6 @@ version = 1
managed_services = ['tahoe-lafs']
managed_packages = ['tahoe-lafs']
_description = [
_('Tahoe-LAFS is a decentralized secure file storage system. '
'It uses provider independent security to store files over a '
@ -80,7 +78,7 @@ class TahoeApp(app_module.App):
configure_url=reverse_lazy('tahoe:index'), login_required=True)
self.add(shortcut)
packages = Packages('packages-tahoe', managed_packages)
packages = Packages('packages-tahoe', ['tahoe-lafs'])
self.add(packages)
firewall = Firewall('firewall-tahoe', info.name,
@ -146,7 +144,7 @@ def get_configured_domain_name():
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
def post_setup(configured_domain_name):

View File

@ -26,10 +26,6 @@ version = 5
depends = ['names']
managed_packages = [
'tor', 'tor-geoipdb', 'torsocks', 'obfs4proxy', 'apt-transport-tor'
]
managed_services = ['tor@plinth']
_description = [
@ -66,7 +62,9 @@ class TorApp(app_module.App):
parent_url_name='apps')
self.add(menu_item)
packages = Packages('packages-tor', managed_packages)
packages = Packages('packages-tor', [
'tor', 'tor-geoipdb', 'torsocks', 'obfs4proxy', 'apt-transport-tor'
])
self.add(packages)
domain_type = DomainType('domain-type-tor', _('Tor Onion Service'),
@ -160,7 +158,7 @@ class TorApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call(
'post', actions.superuser_run, 'tor',
['setup', '--old-version', str(old_version)])

View File

@ -24,8 +24,6 @@ version = 4
managed_services = ['transmission-daemon']
managed_packages = ['transmission-daemon']
_description = [
_('Transmission is a BitTorrent client with a web interface.'),
_('BitTorrent is a peer-to-peer file sharing protocol. '
@ -72,7 +70,7 @@ class TransmissionApp(app_module.App):
allowed_groups=list(groups))
self.add(shortcut)
packages = Packages('packages-transmission', managed_packages)
packages = Packages('packages-transmission', ['transmission-daemon'])
self.add(packages)
firewall = Firewall('firewall-transmission', info.name,
@ -105,7 +103,7 @@ class TransmissionApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
if old_version and old_version <= 3 and app.is_enabled():
app.get_component('firewall-transmission').enable()

View File

@ -23,10 +23,6 @@ version = 3
managed_services = ['tt-rss']
managed_packages = [
'tt-rss', 'postgresql', 'dbconfig-pgsql', 'php-pgsql', 'python3-psycopg2'
]
_description = [
_('Tiny Tiny RSS is a news feed (RSS/Atom) reader and aggregator, '
'designed to allow reading news from any location, while feeling as '
@ -75,7 +71,10 @@ class TTRSSApp(app_module.App):
allowed_groups=list(groups))
self.add(shortcut)
packages = Packages('packages-ttrss', managed_packages)
packages = Packages('packages-ttrss', [
'tt-rss', 'postgresql', 'dbconfig-pgsql', 'php-pgsql',
'python3-psycopg2'
])
self.add(packages)
firewall = Firewall('firewall-ttrss', info.name,
@ -125,7 +124,7 @@ class TTRSSBackupRestore(BackupRestore):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.call('pre', actions.superuser_run, 'ttrss', ['pre-setup'])
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'ttrss', ['setup'])
helper.call('post', app.enable)

View File

@ -25,8 +25,6 @@ version = 9
is_essential = True
managed_packages = ['unattended-upgrades', 'needrestart']
managed_services = ['freedombox-dist-upgrade']
first_boot_steps = [
@ -85,7 +83,8 @@ class UpgradesApp(app_module.App):
'upgrades:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-upgrades', managed_packages)
packages = Packages('packages-upgrades',
['unattended-upgrades', 'needrestart'])
self.add(packages)
backup_restore = BackupRestore('backup-restore-upgrades',
@ -139,7 +138,7 @@ class UpgradesApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
# Enable automatic upgrades but only on first install
if not old_version and not cfg.develop:

View File

@ -21,11 +21,6 @@ version = 3
is_essential = True
managed_packages = [
'ldapscripts', 'ldap-utils', 'libnss-ldapd', 'libpam-ldapd', 'nscd',
'nslcd', 'samba-common-bin', 'slapd', 'tdb-tools'
]
managed_services = ['slapd']
first_boot_steps = [
@ -72,7 +67,10 @@ class UsersApp(app_module.App):
'users:index', parent_url_name='system')
self.add(menu_item)
packages = Packages('packages-users', managed_packages)
packages = Packages('packages-users', [
'ldapscripts', 'ldap-utils', 'libnss-ldapd', 'libpam-ldapd',
'nscd', 'nslcd', 'samba-common-bin', 'slapd', 'tdb-tools'
])
self.add(packages)
daemon = Daemon('daemon-users', managed_services[0],
@ -98,7 +96,7 @@ class UsersApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
if not old_version:
helper.call('post', actions.superuser_run, 'users', ['first-setup'])
helper.call('post', actions.superuser_run, 'users', ['setup'])

View File

@ -18,8 +18,6 @@ nm = import_from_gi('NM', '1.0')
version = 1
managed_packages = ['wireguard']
_description = [
_('WireGuard is a fast, modern, secure VPN tunnel.'),
format_lazy(
@ -69,7 +67,7 @@ class WireguardApp(app_module.App):
clients=info.clients)
self.add(shortcut)
packages = Packages('packages-wireguard', managed_packages)
packages = Packages('packages-wireguard', ['wireguard'])
self.add(packages)
firewall = Firewall('firewall-wireguard', info.name,
@ -99,5 +97,5 @@ class WireguardApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', app.enable)

View File

@ -23,17 +23,6 @@ version = 1
managed_services = ['wordpress-freedombox.timer']
# Add php to avoid wordpress package bringing in lib-apache2-mod-php.
# WordPress only supports MySQL/MariaDB as database server.
managed_packages = [
'wordpress',
'php', # Avoid WordPress package bringing in libapache2-mod-php
'php-imagick', # Optional, for performance
'php-ssh2', # Optional, to upload plugins/themes using SSH connection
'php-zip', # Optional, for performance
'default-mysql-server', # WordPress only supports MySQL/MariaDB as DB
]
_description = [
_('WordPress is a popular way to create and manage websites and blogs. '
'Content can be managed using a visual interface. Layout and '
@ -86,7 +75,23 @@ class WordPressApp(app_module.App):
url='/wordpress/', clients=info.clients)
self.add(shortcut)
packages = Packages('packages-wordpress', managed_packages)
# Add php to avoid wordpress package bringing in lib-apache2-mod-php.
# WordPress only supports MySQL/MariaDB as database server.
packages = Packages(
'packages-wordpress',
[
'wordpress',
# Avoid WordPress package bringing in libapache2-mod-php
'php',
# Optional, for performance
'php-imagick',
# Optional, to upload plugins/themes using SSH connection
'php-ssh2',
# Optional, for performance
'php-zip',
# WordPress only supports MySQL/MariaDB as DB
'default-mysql-server',
])
self.add(packages)
firewall = Firewall('firewall-wordpress', info.name,
@ -119,6 +124,6 @@ class WordPressBackupRestore(BackupRestore):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'wordpress', ['setup'])
helper.call('post', app.enable)

View File

@ -23,12 +23,6 @@ logger = logging.getLogger(__name__)
version = 1
# XXX: This implementation of Zoph does not work with version 0.9.9 in Buster.
# As an easy hack to make the app only available in Bullseye, php7.4 dependency
# has been added. After making the last release for Buster, this can be removed
# to allow compatibility with newer versions of PHP that become available.
managed_packages = ['zoph', 'php7.4']
_description = [
format_lazy(
_('Zoph manages your photo collection. Photos are stored on your '
@ -79,7 +73,7 @@ class ZophApp(app_module.App):
login_required=True)
self.add(shortcut)
packages = Packages('packages-zoph', managed_packages)
packages = Packages('packages-zoph', ['zoph'])
self.add(packages)
firewall = Firewall('firewall-zoph', info.name,
@ -98,7 +92,7 @@ class ZophApp(app_module.App):
def setup(helper, old_version=None):
"""Install and configure the module."""
helper.call('pre', actions.superuser_run, 'zoph', ['pre-install'])
helper.install(managed_packages)
app.setup(old_version)
helper.call('post', actions.superuser_run, 'zoph', ['setup'])
helper.call('post', app.enable)