diff --git a/common/tasks/apt.py b/common/tasks/apt.py index 9e17924..72baba3 100644 --- a/common/tasks/apt.py +++ b/common/tasks/apt.py @@ -68,15 +68,25 @@ class AptUpgrade(Task): predecessors = [AptUpdate, DisableDaemonAutostart] def run(self, info): - log_check_call(['/usr/sbin/chroot', info.root, - '/usr/bin/apt-get', 'install', - '--fix-broken', - '--no-install-recommends', - '--assume-yes']) - log_check_call(['/usr/sbin/chroot', info.root, - '/usr/bin/apt-get', 'upgrade', - '--no-install-recommends', - '--assume-yes']) + from subprocess import CalledProcessError + try: + log_check_call(['/usr/sbin/chroot', info.root, + '/usr/bin/apt-get', 'install', + '--fix-broken', + '--no-install-recommends', + '--assume-yes']) + log_check_call(['/usr/sbin/chroot', info.root, + '/usr/bin/apt-get', 'upgrade', + '--no-install-recommends', + '--assume-yes']) + except CalledProcessError as e: + if e.returncode == 100: + import logging + msg = ('apt exited with status code 100. ' + 'This can sometimes occur when package retrieval times out or a package extraction failed. ' + 'apt might succeed if you try bootstrapping again.') + logging.getLogger(__name__).warn(msg) + raise e class PurgeUnusedPackages(Task): diff --git a/common/tasks/packages.py b/common/tasks/packages.py index a56d112..88d1776 100644 --- a/common/tasks/packages.py +++ b/common/tasks/packages.py @@ -44,6 +44,12 @@ class InstallRemotePackages(Task): 'this may be because\nthe image volume is ' 'running out of disk space ({free}MB left)').format(free=free_mb) logging.getLogger(__name__).warn(msg) + else: + if e.returncode == 100: + msg = ('apt exited with status code 100. ' + 'This can sometimes occur when package retrieval times out or a package extraction failed. ' + 'apt might succeed if you try bootstrapping again.') + logging.getLogger(__name__).warn(msg) raise e