Fix acquisition of UUID (#2077)
* Fix acquisition of UUID * Fix inadequate solution * Add check for UUID
This commit is contained in:
parent
b1e0068795
commit
3e2999bc27
|
|
@ -291,6 +291,11 @@ class DeviceHandler(object):
|
||||||
else:
|
else:
|
||||||
self._perform_formatting(part_mod.safe_fs_type, part_mod.safe_dev_path)
|
self._perform_formatting(part_mod.safe_fs_type, part_mod.safe_dev_path)
|
||||||
|
|
||||||
|
lsblk_info = self._fetch_part_info(part_mod.safe_dev_path)
|
||||||
|
|
||||||
|
part_mod.partuuid = lsblk_info.partuuid
|
||||||
|
part_mod.uuid = lsblk_info.uuid
|
||||||
|
|
||||||
def _perform_partitioning(
|
def _perform_partitioning(
|
||||||
self,
|
self,
|
||||||
part_mod: PartitionModification,
|
part_mod: PartitionModification,
|
||||||
|
|
@ -354,15 +359,10 @@ class DeviceHandler(object):
|
||||||
|
|
||||||
# the partition has a real path now as it was created
|
# the partition has a real path now as it was created
|
||||||
part_mod.dev_path = Path(partition.path)
|
part_mod.dev_path = Path(partition.path)
|
||||||
|
|
||||||
lsblk_info = self._fetch_partuuid(part_mod.dev_path)
|
|
||||||
|
|
||||||
part_mod.partuuid = lsblk_info.partuuid
|
|
||||||
part_mod.uuid = lsblk_info.uuid
|
|
||||||
except PartitionException as ex:
|
except PartitionException as ex:
|
||||||
raise DiskError(f'Unable to add partition, most likely due to overlapping sectors: {ex}') from ex
|
raise DiskError(f'Unable to add partition, most likely due to overlapping sectors: {ex}') from ex
|
||||||
|
|
||||||
def _fetch_partuuid(self, path: Path) -> LsblkInfo:
|
def _fetch_part_info(self, path: Path) -> LsblkInfo:
|
||||||
attempts = 3
|
attempts = 3
|
||||||
lsblk_info: Optional[LsblkInfo] = None
|
lsblk_info: Optional[LsblkInfo] = None
|
||||||
|
|
||||||
|
|
@ -371,16 +371,24 @@ class DeviceHandler(object):
|
||||||
time.sleep(attempt_nr + 1)
|
time.sleep(attempt_nr + 1)
|
||||||
lsblk_info = get_lsblk_info(path)
|
lsblk_info = get_lsblk_info(path)
|
||||||
|
|
||||||
if lsblk_info.partuuid:
|
if lsblk_info.partuuid and lsblk_info.uuid:
|
||||||
break
|
break
|
||||||
|
|
||||||
self.partprobe(path)
|
self.partprobe(path)
|
||||||
|
|
||||||
if not lsblk_info or not lsblk_info.partuuid:
|
if not lsblk_info:
|
||||||
|
debug(f'Unable to get partition information: {path}')
|
||||||
|
raise DiskError(f'Unable to get partition information: {path}')
|
||||||
|
|
||||||
|
if not lsblk_info.partuuid:
|
||||||
debug(f'Unable to determine new partition uuid: {path}\n{lsblk_info}')
|
debug(f'Unable to determine new partition uuid: {path}\n{lsblk_info}')
|
||||||
raise DiskError(f'Unable to determine new partition uuid: {path}')
|
raise DiskError(f'Unable to determine new partition uuid: {path}')
|
||||||
|
|
||||||
debug(f'partuuid found: {lsblk_info.json()}')
|
if not lsblk_info.uuid:
|
||||||
|
debug(f'Unable to determine new uuid: {path}\n{lsblk_info}')
|
||||||
|
raise DiskError(f'Unable to determine new uuid: {path}')
|
||||||
|
|
||||||
|
debug(f'partition information found: {lsblk_info.json()}')
|
||||||
|
|
||||||
return lsblk_info
|
return lsblk_info
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,6 @@ import time
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, List, Optional, TYPE_CHECKING, Union, Dict, Callable
|
from typing import Any, List, Optional, TYPE_CHECKING, Union, Dict, Callable
|
||||||
|
|
||||||
from ..lib.disk.device_model import get_lsblk_info
|
|
||||||
|
|
||||||
from . import disk
|
from . import disk
|
||||||
from .exceptions import DiskError, ServiceException, RequirementError, HardwareIncompatibilityError, SysCallError
|
from .exceptions import DiskError, ServiceException, RequirementError, HardwareIncompatibilityError, SysCallError
|
||||||
from .general import SysCommand
|
from .general import SysCommand
|
||||||
|
|
@ -937,9 +935,7 @@ class Installer:
|
||||||
self.pacman.strap('limine')
|
self.pacman.strap('limine')
|
||||||
info(f"Limine boot partition: {boot_partition.dev_path}")
|
info(f"Limine boot partition: {boot_partition.dev_path}")
|
||||||
|
|
||||||
# XXX: We cannot use `root_partition.uuid` since corresponds to the UUID of the root
|
root_uuid = root_partition.uuid
|
||||||
# partition before the format.
|
|
||||||
root_uuid = get_lsblk_info(root_partition.safe_dev_path).uuid
|
|
||||||
|
|
||||||
def create_pacman_hook(contents: str):
|
def create_pacman_hook(contents: str):
|
||||||
HOOK_DIR = "/etc/pacman.d/hooks"
|
HOOK_DIR = "/etc/pacman.d/hooks"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue