Added an early check for filesystem compatability. Since we need to handle unique packages etc for certain filesystem formats. This early check can be caught and ignored if the programmer/user wants to override the check and continue anyway. But the default should be to stop all execution to not install a half-working system.

This commit is contained in:
Anton Hvornum 2021-02-07 15:25:34 +01:00
parent 759b778743
commit a5a6ff4d31
2 changed files with 17 additions and 3 deletions

View File

@ -138,14 +138,26 @@ class Partition():
self.mountpoint = partition_info['target']
self.filesystem = partition_info['fstype']
# We perform a dummy format on /dev/null with the given filesystem-type
# in order to determain if we support it or not.
try:
self.format(self.filesystem, '/dev/null')
except DiskError:
pass # We supported it, but /dev/null is not formatable as expected
except UnknownFilesystemFormat as err:
raise err
def __repr__(self, *args, **kwargs):
if self.encrypted:
return f'Partition(path={self.path}, real_device={self.real_device}, fs={self.filesystem}, mounted={self.mountpoint})'
else:
return f'Partition(path={self.path}, fs={self.filesystem}, mounted={self.mountpoint})'
def format(self, filesystem):
log(f'Formatting {self} -> {filesystem}', level=LOG_LEVELS.Info)
def format(self, filesystem, path=None):
if not path:
path = self.path
log(f'Formatting {path} -> {filesystem}', level=LOG_LEVELS.Info)
if filesystem == 'btrfs':
o = b''.join(sys_command(f'/usr/bin/mkfs.btrfs -f {self.path}'))
if b'UUID' not in o:
@ -169,7 +181,7 @@ class Partition():
raise DiskError(f'Could not format {self.path} with {filesystem} because: {b"".join(handle)}')
self.filesystem = 'f2fs'
else:
raise DiskError(f'Fileformat {filesystem} is not yet implemented.')
raise UnknownFilesystemFormat(f'Fileformat '{filesystem}' is not yet implemented.')
return True
def find_parent_of(self, data, name, parent=None):

View File

@ -2,6 +2,8 @@ class RequirementError(BaseException):
pass
class DiskError(BaseException):
pass
class UnknownFilesystemFormat(BaseException):
pass
class ProfileError(BaseException):
pass
class SysCallError(BaseException):