From 7f01747efcb15375b8e8601edafa2d9b89e38061 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Wed, 2 Feb 2022 08:18:12 +0100 Subject: Torxed fix sys command calls (#932) * Fixed exceptions in is_vm() and virtualization() * Added exception handling for parted in BlockDevice.free_space --- archinstall/lib/disk/blockdevice.py | 13 ++++++++----- archinstall/lib/hardware.py | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) (limited to 'archinstall') diff --git a/archinstall/lib/disk/blockdevice.py b/archinstall/lib/disk/blockdevice.py index 5ffa06a8..fac258ef 100644 --- a/archinstall/lib/disk/blockdevice.py +++ b/archinstall/lib/disk/blockdevice.py @@ -8,7 +8,7 @@ from typing import Optional, Dict, Any, Iterator, Tuple, List, TYPE_CHECKING if TYPE_CHECKING: from .partition import Partition -from ..exceptions import DiskError +from ..exceptions import DiskError, SysCallError from ..output import log from ..general import SysCommand from ..storage import storage @@ -189,10 +189,13 @@ class BlockDevice: # that is "outside" the disk. in /dev/sr0 this is usually the case with Archiso, # so the free will ignore the ESP partition and just give the "free" space. # Doesn't harm us, but worth noting in case something weird happens. - for line in SysCommand(f"parted -s --machine {self.path} print free"): - if 'free' in (free_space := line.decode('UTF-8')): - _, start, end, size, *_ = free_space.strip('\r\n;').split(':') - yield (start, end, size) + try: + for line in SysCommand(f"parted -s --machine {self.path} print free"): + if 'free' in (free_space := line.decode('UTF-8')): + _, start, end, size, *_ = free_space.strip('\r\n;').split(':') + yield (start, end, size) + except SysCallError as error: + log(f"Could not get free space on {self.path}: {error}", level=logging.INFO) @property def largest_free_space(self) -> List[str]: diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 83323261..ea570707 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -6,6 +6,7 @@ from typing import Iterator, Optional, Union from .general import SysCommand from .networking import list_interfaces, enrich_iface_types +from .exceptions import SysCallError from .output import log __packages__ = [ @@ -170,10 +171,19 @@ def mem_total() -> Optional[int]: def virtualization() -> Optional[str]: - return str(SysCommand("systemd-detect-virt")).strip('\r\n') + try: + return str(SysCommand("systemd-detect-virt")).strip('\r\n') + except SysCallError as error: + log(f"Could not detect virtual system: {error}", level=logging.DEBUG) + + return None def is_vm() -> bool: - return b"none" not in b"".join(SysCommand("systemd-detect-virt")).lower() + try: + return b"none" not in b"".join(SysCommand("systemd-detect-virt")).lower() + except SysCallError as error: + log(f"System is not running in a VM: {error}", level=logging.DEBUG) + return None # TODO: Add more identifiers -- cgit v1.2.3-70-g09d2