From 9342f86400df4939759375c75f992f7745c8ad4f Mon Sep 17 00:00:00 2001 From: Jeffrey Townsend Date: Thu, 20 Apr 2017 18:06:19 +0000 Subject: [PATCH] Check for the existance of the onie-fwpkg before attempting upgrade and provide a useful error message. --- .../vendor-config-onl/src/python/onl/grub/__init__.py | 10 ++++------ .../src/python/onl/upgrade/firmware.py | 6 +++++- .../vendor-config-onl/src/python/onl/upgrade/ubase.py | 4 ++++ 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/base/all/vendor-config-onl/src/python/onl/grub/__init__.py b/packages/base/all/vendor-config-onl/src/python/onl/grub/__init__.py index 8b2501ea..b23b948f 100644 --- a/packages/base/all/vendor-config-onl/src/python/onl/grub/__init__.py +++ b/packages/base/all/vendor-config-onl/src/python/onl/grub/__init__.py @@ -22,6 +22,10 @@ def _makedirs(d): if not os.path.exists(d): os.makedirs(d) +def onie_fwpkg_exists(): + with OnlOnieBootContext() as ob: + return os.path.exists(os.path.join(ob.directory, "onie/tools/bin/onie-fwpkg")) + def onie_fwpkg(arguments): with OnlOnieBootContext() as ob: # This is necessary if we've upgraded ONIE but haven't booted into it yet... @@ -35,9 +39,3 @@ def boot_entry_set(index): def boot_onie(): return boot_entry_set(1) - - - - - - diff --git a/packages/base/all/vendor-config-onl/src/python/onl/upgrade/firmware.py b/packages/base/all/vendor-config-onl/src/python/onl/upgrade/firmware.py index a2c1e5d1..3a901759 100755 --- a/packages/base/all/vendor-config-onl/src/python/onl/upgrade/firmware.py +++ b/packages/base/all/vendor-config-onl/src/python/onl/upgrade/firmware.py @@ -29,6 +29,11 @@ class FirmwareUpgrade(ubase.BaseOnieUpgrade): def do_upgrade(self, forced=False): if self.manifest.get('fwpkg', False): + if not self.onie_fwpkg_exists(): + # An ONIE upgrade is probably required. + print "The firmware cannot be upgraded because the current ONIE version is not correct. Please perform an ONIE upgrade first." + self.abort() + self.onie_fwpkg_add(os.path.join(sysconfig.upgrade.firmware.package.dir, self.manifest['updater'])) else: @@ -56,4 +61,3 @@ class FirmwareUpgrade(ubase.BaseOnieUpgrade): def do_no_upgrade(self): self.clean_onie_updater() - diff --git a/packages/base/all/vendor-config-onl/src/python/onl/upgrade/ubase.py b/packages/base/all/vendor-config-onl/src/python/onl/upgrade/ubase.py index 6e69b3d9..ac6edb4a 100644 --- a/packages/base/all/vendor-config-onl/src/python/onl/upgrade/ubase.py +++ b/packages/base/all/vendor-config-onl/src/python/onl/upgrade/ubase.py @@ -391,6 +391,10 @@ class BaseOnieUpgrade(BaseUpgrade): dst = os.path.join(self.ONIE_UPDATER_PATH, f) self.copyfile(src, dst) + def onie_fwpkg_exists(self): + import onl.grub + return onl.grub.onie_fwpkg_exists() + def onie_fwpkg_add(self, pkg): import onl.grub onl.grub.onie_fwpkg("-f purge")