upgrades: Check that backports is for current release

- If backports is for older release, then it can be activated again to
  upgrade to latest release. (Plan is to make this automatic, but
  leave the manual option as a fallback.)

- Security notice still shown if older backports are enabled.

Tests:

- On Buster system, change distribution in
  /etc/apt/sources.list.d/freedombox2.list to
  stretch-backports. Updates page shows button to activate backports
  again. Activate and check the source list to confirm that it has
  buster-backports again.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
This commit is contained in:
James Valleroy 2020-07-03 07:57:38 -04:00 committed by Sunil Mohan Adapa
parent 6b0744c1c7
commit ca91120fdc
No known key found for this signature in database
GPG Key ID: 43EA1CFF0AA7C5F2
2 changed files with 19 additions and 3 deletions

View File

@ -13,7 +13,7 @@ import sys
from plinth.action_utils import run_apt_command
from plinth.modules.apache.components import check_url
from plinth.modules.upgrades import is_backports_enabled, SOURCES_LIST
from plinth.modules.upgrades import is_backports_current, SOURCES_LIST
AUTO_CONF_FILE = '/etc/apt/apt.conf.d/20auto-upgrades'
LOG_FILE = '/var/log/unattended-upgrades/unattended-upgrades.log'
@ -193,7 +193,7 @@ def _check_and_backports_sources():
if os.path.exists(old_sources_list):
os.remove(old_sources_list)
if is_backports_enabled():
if is_backports_current():
print('Repositories list up-to-date. Skipping update.')
return

View File

@ -3,6 +3,7 @@
FreedomBox app for upgrades.
"""
from aptsources import sourceslist
import os
import subprocess
@ -143,9 +144,24 @@ def is_backports_enabled():
return os.path.exists(SOURCES_LIST)
def is_backports_current():
"""Return whether backports are enabled for the current release."""
if not is_backports_enabled:
return False
dist = subprocess.check_output(['lsb_release', '--codename', '--short'
]).decode().strip() + '-backports'
sources = sourceslist.SourcesList()
for source in sources:
if source.dist == dist:
return True
return False
def can_activate_backports():
"""Return whether backports can be activated."""
if is_backports_enabled():
if is_backports_current():
return False
release = subprocess.check_output(['lsb_release', '--release',