mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-08-19 12:36:06 +00:00
upgrades: Add a setting to enable dist upgrade
- Setting is stored in kvstore. - Enable for new installs, and once when upgrading from version without flag. - Split action subcommands for activating backports and for performing dist upgrade. Tests: - Dist upgrade is enabled by default in stable container. - Dist upgrade is disabled by default in testing container. - Enable dist upgrade. Dist upgrade is attempted periodically. - Disable dist upgrade. Dist upgrade is no longer attempted. Signed-off-by: James Valleroy <jvalleroy@mailbox.org> [sunil: kvstore need to be locally imported anymore, import as usual] [sunil: Minor changes to comments for PEP compliance] Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
This commit is contained in:
parent
6180e3a051
commit
49c21cabc8
@ -92,15 +92,20 @@ def parse_arguments():
|
||||
subparsers.add_parser('get-log', help='Print the automatic upgrades log')
|
||||
|
||||
subparsers.add_parser('setup', help='Setup apt preferences')
|
||||
setup_repositories = subparsers.add_parser(
|
||||
'setup-repositories',
|
||||
help='Setup software repositories for FreedomBox')
|
||||
setup_repositories.add_argument('--develop', required=False, default=False,
|
||||
|
||||
activate_backports = subparsers.add_parser(
|
||||
'activate-backports', help='Activate backports if possible')
|
||||
activate_backports.add_argument('--develop', required=False, default=False,
|
||||
action='store_true',
|
||||
help='Development mode')
|
||||
setup_repositories.add_argument(
|
||||
'--test-upgrade', required=False, default=False, action='store_true',
|
||||
help='Test dist-upgrade from stable to testing')
|
||||
|
||||
dist_upgrade = subparsers.add_parser(
|
||||
'dist-upgrade', help='Perform dist upgrade if possible')
|
||||
dist_upgrade.add_argument('--develop', required=False, default=False,
|
||||
action='store_true', help='Development mode')
|
||||
dist_upgrade.add_argument('--test', required=False, default=False,
|
||||
action='store_true',
|
||||
help='Test dist-upgrade from stable to testing')
|
||||
|
||||
subparsers.required = True
|
||||
return parser.parse_args()
|
||||
@ -407,17 +412,24 @@ def subcommand_setup(_):
|
||||
_add_apt_preferences()
|
||||
|
||||
|
||||
def subcommand_setup_repositories(arguments):
|
||||
def subcommand_activate_backports(arguments):
|
||||
"""Setup software repositories needed for FreedomBox.
|
||||
|
||||
Repositories list for now only contains the backports. If the file exists,
|
||||
assume that it contains backports.
|
||||
|
||||
Check if a new stable release is available, and perform
|
||||
dist-upgrade if updates are enabled.
|
||||
"""
|
||||
_check_and_backports_sources(arguments.develop)
|
||||
_check_and_dist_upgrade(arguments.develop, arguments.test_upgrade)
|
||||
|
||||
|
||||
def subcommand_dist_upgrade(arguments):
|
||||
"""Perform major distribution upgrade.
|
||||
|
||||
Check if a new stable release is available, and perform dist-upgrade if
|
||||
updates are enabled.
|
||||
|
||||
"""
|
||||
_check_and_dist_upgrade(arguments.develop, arguments.test)
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
@ -14,11 +14,11 @@ from django.utils.translation import ugettext_noop
|
||||
import plinth
|
||||
from plinth import actions
|
||||
from plinth import app as app_module
|
||||
from plinth import cfg, glib, menu
|
||||
from plinth import cfg, glib, kvstore, menu
|
||||
|
||||
from .manifest import backup # noqa, pylint: disable=unused-import
|
||||
|
||||
version = 7
|
||||
version = 8
|
||||
|
||||
is_essential = True
|
||||
|
||||
@ -45,6 +45,8 @@ app = None
|
||||
|
||||
BACKPORTS_REQUESTED_KEY = 'upgrades_backports_requested'
|
||||
|
||||
DIST_UPGRADE_ENABLED_KEY = 'upgrades_dist_upgrade_enabled'
|
||||
|
||||
SOURCES_LIST = '/etc/apt/sources.list'
|
||||
|
||||
BACKPORTS_SOURCES_LIST = '/etc/apt/sources.list.d/freedombox2.list'
|
||||
@ -128,6 +130,11 @@ def setup(helper, old_version=None):
|
||||
if old_version and old_version < 7:
|
||||
set_backports_requested(can_activate_backports())
|
||||
|
||||
# Enable dist upgrade for new installs, and once when upgrading
|
||||
# from version without flag.
|
||||
if not old_version or old_version < 8:
|
||||
set_dist_upgrade_enabled(can_enable_dist_upgrade())
|
||||
|
||||
# Try to setup apt repositories, if needed, if possible, on first install
|
||||
# and on version increment.
|
||||
helper.call('post', setup_repositories, None)
|
||||
@ -152,26 +159,42 @@ def disable():
|
||||
def setup_repositories(data):
|
||||
"""Setup apt repositories for backports or new stable release."""
|
||||
if is_backports_requested():
|
||||
command = ['setup-repositories']
|
||||
command = ['activate-backports']
|
||||
if cfg.develop:
|
||||
command += ['--develop']
|
||||
command.append('--develop')
|
||||
|
||||
actions.superuser_run('upgrades', command)
|
||||
|
||||
if is_dist_upgrade_enabled():
|
||||
command = ['dist-upgrade']
|
||||
if cfg.develop:
|
||||
command.append('--develop')
|
||||
|
||||
actions.superuser_run('upgrades', command)
|
||||
|
||||
|
||||
def is_backports_requested():
|
||||
"""Return whether user has chosen to activate backports."""
|
||||
from plinth import kvstore
|
||||
return kvstore.get_default(BACKPORTS_REQUESTED_KEY, False)
|
||||
|
||||
|
||||
def set_backports_requested(requested):
|
||||
"""Set whether user has chosen to activate backports."""
|
||||
from plinth import kvstore
|
||||
kvstore.set(BACKPORTS_REQUESTED_KEY, requested)
|
||||
logger.info('Backports requested - %s', requested)
|
||||
|
||||
|
||||
def is_dist_upgrade_enabled():
|
||||
"""Return whether user has enabled dist upgrade."""
|
||||
return kvstore.get_default(DIST_UPGRADE_ENABLED_KEY, False)
|
||||
|
||||
|
||||
def set_dist_upgrade_enabled(enabled=True):
|
||||
"""Set whether user has enabled dist upgrade."""
|
||||
kvstore.set(DIST_UPGRADE_ENABLED_KEY, enabled)
|
||||
logger.info('Distribution upgrade configured - %s', enabled)
|
||||
|
||||
|
||||
def is_backports_enabled():
|
||||
"""Return whether backports are enabled in the system configuration."""
|
||||
return os.path.exists(BACKPORTS_SOURCES_LIST)
|
||||
@ -208,3 +231,9 @@ def can_activate_backports():
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def can_enable_dist_upgrade():
|
||||
"""Return whether dist upgrade can be enabled."""
|
||||
release, _ = get_current_release()
|
||||
return release not in ['unstable', 'testing']
|
||||
|
||||
@ -13,6 +13,11 @@ class ConfigureForm(forms.Form):
|
||||
label=_('Enable auto-update'), required=False, help_text=_(
|
||||
'When enabled, FreedomBox automatically updates once a day.'))
|
||||
|
||||
dist_upgrade_enabled = forms.BooleanField(
|
||||
label=_('Enable auto-update to next stable release'), required=False,
|
||||
help_text=_('When enabled, FreedomBox will upgrade to the next stable '
|
||||
'distribution release when it is available.'))
|
||||
|
||||
|
||||
class BackportsFirstbootForm(forms.Form):
|
||||
"""Form to configure backports during first boot wizard."""
|
||||
|
||||
@ -28,7 +28,10 @@ class UpgradesConfigurationView(AppView):
|
||||
app_id = 'upgrades'
|
||||
|
||||
def get_initial(self):
|
||||
return {'auto_upgrades_enabled': upgrades.is_enabled()}
|
||||
return {
|
||||
'auto_upgrades_enabled': upgrades.is_enabled(),
|
||||
'dist_upgrade_enabled': upgrades.is_dist_upgrade_enabled()
|
||||
}
|
||||
|
||||
def get_context_data(self, *args, **kwargs):
|
||||
context = super().get_context_data(*args, **kwargs)
|
||||
@ -69,6 +72,17 @@ class UpgradesConfigurationView(AppView):
|
||||
messages.success(self.request,
|
||||
_('Automatic upgrades disabled'))
|
||||
|
||||
if old_status['dist_upgrade_enabled'] \
|
||||
!= new_status['dist_upgrade_enabled']:
|
||||
upgrades.set_dist_upgrade_enabled(
|
||||
new_status['dist_upgrade_enabled'])
|
||||
if new_status['dist_upgrade_enabled']:
|
||||
messages.success(self.request,
|
||||
_('Distribution upgrade enabled'))
|
||||
else:
|
||||
messages.success(self.request,
|
||||
_('Distribution upgrade disabled'))
|
||||
|
||||
return super().form_valid(form)
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user