From 9d8a95cc743853b60df47fbb08f51e2605fc2ad7 Mon Sep 17 00:00:00 2001 From: OpenGnSys Support Team Date: Thu, 4 Jul 2024 16:33:01 +0200 Subject: live: add checksum field to image/create response Report image checksum to ogserver through HTTP response. --- src/live/ogOperations.py | 19 +++++++++++++++---- src/ogRest.py | 1 + src/utils/image.py | 1 + 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/live/ogOperations.py b/src/live/ogOperations.py index 2d5146c..9c67728 100644 --- a/src/live/ogOperations.py +++ b/src/live/ogOperations.py @@ -157,15 +157,20 @@ class OgLiveOperations: m.update(buf) return m.hexdigest() - def _write_md5_file(self, path): + def _md5_file(self, path): + if not os.path.exists(path): + raise OgError(f'Failed to calculate checksum, image file {path} does not exist') + + return self._compute_md5(path) + + def _write_md5_file(self, path, checksum): if not os.path.exists(path): raise OgError(f'Failed to calculate checksum, image file {path} does not exist') filename = path + ".full.sum" - dig = self._compute_md5(path) try: with open(filename, 'w') as f: - f.write(dig) + f.write(checksum) except: logging.error(f'Cannot write checksum {filename}') return -1 @@ -585,9 +590,15 @@ class OgLiveOperations: logging.info(f'Writing checksum file {name}.img.full.sum...') logging.info('*DO NOT REBOOT OR POWEROFF* the client during this time') - if self._write_md5_file(f'/opt/opengnsys/images/{name}.img') == -1: + checksum = self._md5_file(f'/opt/opengnsys/images/{name}.img') + if checksum == -1: + raise OgError(f'Cannot access {name}.full.sum file') + + if self._write_md5_file(f'/opt/opengnsys/images/{name}.img', checksum) == -1: raise OgError(f'Cannot write {name}.full.sum file') + image_info.checksum = checksum + self._restartBrowser(self._url) logging.info('Image creation command OK') diff --git a/src/ogRest.py b/src/ogRest.py index 8e90842..4a734f7 100644 --- a/src/ogRest.py +++ b/src/ogRest.py @@ -209,6 +209,7 @@ class ogThread(): json_body.add_element('size', image_info.size) json_body.add_element('perms', image_info.perms) json_body.add_element('lastupdate', image_info.mtime) + json_body.add_element('checksum', image_info.checksum) response = restResponse(ogResponses.OK, json_body, seq=client.seq) client.send(response.get()) diff --git a/src/utils/image.py b/src/utils/image.py index 088c0c3..fe48a9c 100644 --- a/src/utils/image.py +++ b/src/utils/image.py @@ -32,6 +32,7 @@ class ImageInfo: self.perms = 0 self.clonator = 'PARTCLONE' self.compressor = 'LZOP' + self.checksum = 0 def human_to_kb(size, unit): -- cgit v1.2.3-18-g5258