From 3ada482b90a7945a92cfd7f98a28aecfe8357090 Mon Sep 17 00:00:00 2001 From: James Valleroy Date: Fri, 29 Jan 2021 07:22:57 -0500 Subject: [PATCH] upgrades: Move start-dist-upgrade result string to app Separate checking for dist upgrade from other setup. We don't want to start a dist upgrade during the module's setup. Tests: Checked logs for the following: - Up to date. - Updates not enabled. - Dist upgrade started. Signed-off-by: James Valleroy Reviewed-by: Veiko Aasa --- actions/upgrades | 18 +++++++-------- plinth/modules/upgrades/__init__.py | 36 +++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/actions/upgrades b/actions/upgrades index a0121127a..74fd404fa 100755 --- a/actions/upgrades +++ b/actions/upgrades @@ -320,12 +320,11 @@ def _check_dist_upgrade(test_upgrade=False): if not. """ if dist_upgrade_flag.exists(): - return (True, 'Found previously interrupted dist-upgrade.') + return (True, 'found-previous') release, dist = get_current_release() if release in ['unstable', 'testing']: - return (False, f'System release is {release}. Skip checking for new ' - 'stable release.') + return (False, f'already-{release}') check_dists = ['stable'] if test_upgrade: @@ -351,23 +350,22 @@ def _check_dist_upgrade(test_upgrade=False): codename = line.split()[1] if not codename: - return (False, '"Codename:" not found in release file.') + return (False, 'codename-not-found') if codename == dist: - return (False, f'{dist} is already the latest release.') + return (False, f'already-{dist}') if not _check_auto(): - return (False, 'Automatic updates are not enabled.') + return (False, 'upgrades-not-enabled') if check_dist == 'testing' and not test_upgrade: - return (False, f'Skipping dist-upgrade to {check_dist} since --test is' - ' not set.') + return (False, 'test-not-set') output = subprocess.check_output(['df', '--output=avail,pcent', '/']) output = output.decode().split('\n')[1].split() free_space, free_percent = int(output[0]), int(output[1][:-1]) if free_space < 5000000 or free_percent < 10: - return (False, 'Not enough free space in /.') + return (False, 'not-enough-free-space') logging.info('Upgrading from %s to %s...', dist, codename) with open(SOURCES_LIST, 'r') as sources_list: @@ -389,7 +387,7 @@ def _check_dist_upgrade(test_upgrade=False): logging.info('Dist upgrade in progress. Setting flag.') dist_upgrade_flag.touch(mode=0o660) - return (True, 'Started dist upgrade.') + return (True, 'started-dist-upgrade') def _perform_dist_upgrade(): diff --git a/plinth/modules/upgrades/__init__.py b/plinth/modules/upgrades/__init__.py index 9618f72b9..b67fa678d 100644 --- a/plinth/modules/upgrades/__init__.py +++ b/plinth/modules/upgrades/__init__.py @@ -91,10 +91,14 @@ class UpgradesApp(app_module.App): # Check every day (every 3 minutes in debug mode): # - backports becomes available -> configure it if selected by user + interval = 180 if cfg.develop else 24 * 3600 + glib.schedule(interval, setup_repositories) + + # Check every day (every 3 minutes in debug mode): # - new stable release becomes available -> perform dist-upgrade if # updates are enabled interval = 180 if cfg.develop else 24 * 3600 - glib.schedule(interval, setup_repositories) + glib.schedule(interval, check_dist_upgrade) def _show_new_release_notification(self): """When upgraded to new release, show a notification.""" @@ -169,8 +173,8 @@ def disable(): actions.superuser_run('upgrades', ['disable-auto']) -def setup_repositories(data): - """Setup apt repositories for backports or new stable release.""" +def setup_repositories(_): + """Setup apt repositories for backports.""" if is_backports_requested(): command = ['activate-backports'] if cfg.develop: @@ -178,13 +182,35 @@ def setup_repositories(data): actions.superuser_run('upgrades', command) + +def check_dist_upgrade(_): + """Check for upgrade to new stable release.""" if is_dist_upgrade_enabled(): output = actions.superuser_run('upgrades', ['start-dist-upgrade']) result = json.loads(output) dist_upgrade_started = result['dist_upgrade_started'] reason = result['reason'] - logger.info('Result of start-dist-upgrade: %s, %s', - dist_upgrade_started, reason) + if 'found-previous' in reason: + logger.info( + 'Found previous dist-upgrade. If it was interrupted, it will ' + 'be restarted.') + elif 'already-' in reason: + logger.info('Skip dist upgrade: System is already up-to-date.') + elif 'codename-not-found' in reason: + logger.warning('Skip dist upgrade: Codename not found in release ' + 'file.') + elif 'upgrades-not-enabled' in reason: + logger.info('Skip dist upgrade: Automatic updates are not ' + 'enabled.') + elif 'test-not-set' in reason: + logger.info('Skip dist upgrade: --test is not set.') + elif 'not-enough-free-space' in reason: + logger.warning('Skip dist upgrade: Not enough free space in /.') + elif 'started-dist-upgrade' in reason: + logger.info('Started dist upgrade.') + else: + logger.warning('Unhandled result of start-dist-upgrade: %s, %s', + dist_upgrade_started, reason) def is_backports_requested():