index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
author | Anton Hvornum <anton.feeds+github@gmail.com> | 2020-07-08 16:12:57 +0000 |
---|---|---|
committer | Anton Hvornum <anton.feeds+github@gmail.com> | 2020-07-08 16:12:57 +0000 |
commit | c271e4c0d7f15c13fe056d80f1b652b6eebde21a (patch) | |
tree | 3c9dee70d4a7882fc51f01060ae06191822530d2 /archinstall/lib | |
parent | 078567f81c17492d0f3bc857a6efa09cc3503fa5 (diff) |
-rw-r--r-- | archinstall/lib/disk.py | 25 | ||||
-rw-r--r-- | archinstall/lib/installer.py | 4 |
diff --git a/archinstall/lib/disk.py b/archinstall/lib/disk.py index 30dbcdc2..c6fba8ce 100644 --- a/archinstall/lib/disk.py +++ b/archinstall/lib/disk.py @@ -88,7 +88,10 @@ class Partition(): self.encrypted = encrypted def __repr__(self, *args, **kwargs): - return f'Partition({self.path}, fs={self.filesystem}, mounted={self.mountpoint})' + 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}') @@ -110,6 +113,24 @@ class Partition(): raise DiskError(f'Fileformat {filesystem} is not yet implemented.') return True + def find_parent_of(self, data, name, parent=None): + if data['name'] == name: + return parent + elif 'children' in data: + for child in data['children']: + if (parent := self.find_parent_of(child, name, parent=data['name'])): + return parent + + @property + def real_device(self): + if not self.encrypted: + return self.path + else: + for blockdevice in json.loads(b''.join(sys_command('lsblk -J')).decode('UTF-8'))['blockdevices']: + if (parent := self.find_parent_of(blockdevice, os.path.basename(self.path))): + return f"/dev/{parent}" + raise DiskError(f'Could not find appropriate parent for encrypted partition {self}') + def mount(self, target, fs=None, options=''): if not self.mountpoint: log(f'Mounting {self} to {target}') @@ -124,7 +145,7 @@ class Partition(): if sys_command(f'/usr/bin/mount {self.path} {target}').exit_code == 0: self.mountpoint = target return True - + class Filesystem(): # TODO: # When instance of a HDD is selected, check all usages and gracefully unmount them diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 07b31a14..0a1fb784 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -63,11 +63,11 @@ class Installer(): if self.partition.encrypted: - print(f'Trying to locate {os.path.basename(self.partition.path)} under /dev/disk/by-partuuid') + print(f'Trying to locate {self.partition} under /dev/disk/by-partuuid') for root, folders, uids in os.walk('/dev/disk/by-partuuid'): for uid in uids: real_path = os.path.realpath(os.path.join(root, uid)) - if not os.path.basename(real_path) == os.path.basename(self.partition.path): continue + if not os.path.basename(real_path) == os.path.basename(self.partition.real_device): continue entry.write(f'options cryptdevice=PARTUUID={uid}:luksdev root=/dev/mapper/luksdev rw intel_pstate=no_hwp\n') return True |