From a5a6ff4d31aa23dfaceca3973166a24dba4ccd0f Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Sun, 7 Feb 2021 15:25:34 +0100 Subject: 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. --- archinstall/lib/disk.py | 18 +++++++++++++++--- archinstall/lib/exceptions.py | 2 ++ 2 files changed, 17 insertions(+), 3 deletions(-) (limited to 'archinstall/lib') diff --git a/archinstall/lib/disk.py b/archinstall/lib/disk.py index 93d24613..e23e354c 100644 --- a/archinstall/lib/disk.py +++ b/archinstall/lib/disk.py @@ -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): diff --git a/archinstall/lib/exceptions.py b/archinstall/lib/exceptions.py index 84e6a766..a7864a23 100644 --- a/archinstall/lib/exceptions.py +++ b/archinstall/lib/exceptions.py @@ -2,6 +2,8 @@ class RequirementError(BaseException): pass class DiskError(BaseException): pass +class UnknownFilesystemFormat(BaseException): + pass class ProfileError(BaseException): pass class SysCallError(BaseException): -- cgit v1.2.3-70-g09d2