From 3e2999bc2752c76e666d916bdb80608ad74528bf Mon Sep 17 00:00:00 2001 From: codefiles <11915375+codefiles@users.noreply.github.com> Date: Wed, 20 Sep 2023 14:49:29 -0400 Subject: Fix acquisition of UUID (#2077) * Fix acquisition of UUID * Fix inadequate solution * Add check for UUID --- archinstall/lib/disk/device_handler.py | 26 +++++++++++++++++--------- archinstall/lib/installer.py | 6 +----- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/archinstall/lib/disk/device_handler.py b/archinstall/lib/disk/device_handler.py index 7cd79784..a95e21e3 100644 --- a/archinstall/lib/disk/device_handler.py +++ b/archinstall/lib/disk/device_handler.py @@ -291,6 +291,11 @@ class DeviceHandler(object): else: 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( self, part_mod: PartitionModification, @@ -354,15 +359,10 @@ class DeviceHandler(object): # the partition has a real path now as it was created 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: 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 lsblk_info: Optional[LsblkInfo] = None @@ -371,16 +371,24 @@ class DeviceHandler(object): time.sleep(attempt_nr + 1) lsblk_info = get_lsblk_info(path) - if lsblk_info.partuuid: + if lsblk_info.partuuid and lsblk_info.uuid: break 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}') 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 diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 2eb63279..cd6f651d 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -8,8 +8,6 @@ import time from pathlib import Path from typing import Any, List, Optional, TYPE_CHECKING, Union, Dict, Callable -from ..lib.disk.device_model import get_lsblk_info - from . import disk from .exceptions import DiskError, ServiceException, RequirementError, HardwareIncompatibilityError, SysCallError from .general import SysCommand @@ -937,9 +935,7 @@ class Installer: self.pacman.strap('limine') info(f"Limine boot partition: {boot_partition.dev_path}") - # XXX: We cannot use `root_partition.uuid` since corresponds to the UUID of the root - # partition before the format. - root_uuid = get_lsblk_info(root_partition.safe_dev_path).uuid + root_uuid = root_partition.uuid def create_pacman_hook(contents: str): HOOK_DIR = "/etc/pacman.d/hooks" -- cgit v1.2.3-54-g00ecf