summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/live/ogOperations.py8
-rw-r--r--src/utils/disk.py2
-rw-r--r--src/utils/fs.py20
-rw-r--r--src/utils/legacy.py10
4 files changed, 29 insertions, 11 deletions
diff --git a/src/live/ogOperations.py b/src/live/ogOperations.py
index e19a788..b24a23c 100644
--- a/src/live/ogOperations.py
+++ b/src/live/ogOperations.py
@@ -441,7 +441,9 @@ class OgLiveOperations:
logging.error('No filesystem detected. Aborting image creation.')
raise ValueError('Target partition has no filesystem present')
- cambiar_acceso(user=self._smb_user, pwd=self._smb_pass)
+ if change_access(user=self._smb_user, pwd=self._smb_pass) == -1:
+ logging.error('remount of /opt/opengnsys/images has failed')
+ raise AssertionError('remount of /opt/opengnsys/images has failed')
if os.access(f'/opt/opengnsys/images', os.R_OK | os.W_OK) == False:
logging.error('Cannot access /opt/opengnsys/images in read and write mode, check permissions')
@@ -451,7 +453,9 @@ class OgLiveOperations:
logging.info(f'image file {image_path} already exists, updating.')
ogCopyEfiBootLoader(disk, partition)
- ogReduceFs(disk, partition)
+ if ogReduceFs(disk, partition) == -1:
+ logging.error('Failed to shrink filesystem')
+ raise ValueError('Failed to shrink filesystem')
cmd1 = shlex.split(f'partclone.{fstype} -I -C --clone -s {padev} -O -')
cmd2 = shlex.split(f'lzop -1 -fo {image_path}')
diff --git a/src/utils/disk.py b/src/utils/disk.py
index e26983c..1f1fdab 100644
--- a/src/utils/disk.py
+++ b/src/utils/disk.py
@@ -33,4 +33,4 @@ def get_partition_device(disknum, partnum):
if pa.partno == partnum - 1:
return cxt.partition_to_string(pa, fdisk.FDISK_FIELD_DEVICE)
- raise ValueError('No such partition')
+ raise ValueError(f'No such partition with disk index {disknum} and partition index {partnum}')
diff --git a/src/utils/fs.py b/src/utils/fs.py
index c030e68..fbbbd3c 100644
--- a/src/utils/fs.py
+++ b/src/utils/fs.py
@@ -100,13 +100,14 @@ def ogReduceFs(disk, part):
umount(partdev)
if fstype == 'ext4':
- _reduce_resize2fs(partdev)
+ ret = _reduce_resize2fs(partdev)
elif fstype == 'ntfs':
- _reduce_ntfsresize(partdev)
+ ret = _reduce_ntfsresize(partdev)
else:
logging.warn(f'Unable to shrink filesystem at {partdev}. '
f'Unsupported filesystem "{fstype}".')
+ return ret
def ogExtendFs(disk, part):
"""
@@ -202,9 +203,13 @@ def get_filesystem_type(partdev):
def _reduce_resize2fs(partdev):
+ ret = -1
cmd = shlex.split(f'resize2fs -fpM {partdev}')
with open('/tmp/command.log', 'ab', 0) as logfile:
- subprocess.run(cmd, stdout=logfile, stderr=STDOUT)
+ proc = subprocess.run(cmd, stdout=logfile, stderr=STDOUT)
+ ret = proc.returncode
+
+ return 0 if ret == 0 else -1
def _reduce_ntfsresize(partdev):
@@ -212,6 +217,14 @@ def _reduce_ntfsresize(partdev):
proc_info = subprocess.run(cmd_info, stdout=subprocess.PIPE, encoding='utf-8')
out_info = proc_info.stdout.strip()
+ if out_info.find('ERROR: NTFS is inconsistent. Run chkdsk') != -1:
+ logging.error('NTFS is inconsistent. Run chkdsk /f on Windows then reboot TWICE!')
+ return -1
+
+ if proc_info.returncode != 0:
+ logging.error(f'nfsresize {partdev} has failed with return code {proc_info.returncode}')
+ return -1
+
# Process ntfsresize output directly.
# The first split operation leaves the wanted data at the second element of
# the split ([1]). Finally do a second split with ' ' to get the data but
@@ -241,6 +254,7 @@ def _reduce_ntfsresize(partdev):
with open('/tmp/command.log', 'ab', 0) as logfile:
subprocess.run(cmd_resize, input='y', stderr=STDOUT, encoding='utf-8')
+ return 0
def _extend_resize2fs(partdev):
cmd = shlex.split(f'resize2fs -f {partdev}')
diff --git a/src/utils/legacy.py b/src/utils/legacy.py
index 0f6c53c..a272e4c 100644
--- a/src/utils/legacy.py
+++ b/src/utils/legacy.py
@@ -130,7 +130,7 @@ def ogGetImageInfo(image_path):
return image_info
-def cambiar_acceso(mode='rw', user='opengnsys', pwd='og'):
+def change_access(mode='rw', user='opengnsys', pwd='og'):
"""
'CambiarAcceso' (admin/Interface/CambiarAcceso) rewrite into native Python.
@@ -138,14 +138,14 @@ def cambiar_acceso(mode='rw', user='opengnsys', pwd='og'):
Specify access mode ('rw', or 'ro') with mode parameter (default 'rw').
Specify samba credentials with user and pwd parameter.
- Return True if exit-code was 0. Return False otherwise.
+ Return 0 if exit-code was 0. Return -1 otherwise.
"""
- if mode not in ['rw', 'ro']:
- raise ValueError('Invalid remount mode option')
+ assert mode in ['rw', 'ro'], 'Invalid remount mode option'
cmd = shlex.split(f'mount -o remount,{mode},username={user},password={pwd} /opt/opengnsys/images')
p = subprocess.run(cmd, stdout=DEVNULL, stderr=DEVNULL)
- return p.returncode == 0
+
+ return 0 if p.returncode == 0 else -1
def ogChangeRepo(ip, smb_user='opengnsys', smb_pass='og'):
"""