index : archinstall32 | |
Archlinux32 installer | gitolite user |
summaryrefslogtreecommitdiff |
-rw-r--r-- | archinstall/lib/hardware.py | 51 | ||||
-rw-r--r-- | archinstall/lib/profiles.py | 12 | ||||
-rw-r--r-- | archinstall/lib/user_interaction.py | 4 | ||||
-rw-r--r-- | examples/guided.py | 9 |
diff --git a/archinstall/lib/hardware.py b/archinstall/lib/hardware.py index 6a3b166d..45e042db 100644 --- a/archinstall/lib/hardware.py +++ b/archinstall/lib/hardware.py @@ -79,22 +79,22 @@ def has_uefi() -> bool: def graphics_devices() -> dict: cards = {} for line in SysCommand("lspci"): - if b' VGA ' in line: + if b' VGA ' in line or b' 3D ' in line: _, identifier = line.split(b': ', 1) - cards[identifier.strip().lower().decode('UTF-8')] = line + cards[identifier.strip().decode('UTF-8')] = line return cards def has_nvidia_graphics() -> bool: - return any('nvidia' in x for x in graphics_devices()) + return any('nvidia' in x.lower() for x in graphics_devices()) def has_amd_graphics() -> bool: - return any('amd' in x for x in graphics_devices()) + return any('amd' in x.lower() for x in graphics_devices()) def has_intel_graphics() -> bool: - return any('intel' in x for x in graphics_devices()) + return any('intel' in x.lower() for x in graphics_devices()) def cpu_vendor() -> Optional[str]: @@ -107,6 +107,47 @@ def cpu_vendor() -> Optional[str]: return None +def cpu_model() -> Optional[str]: + cpu_info_raw = SysCommand("lscpu -J") + cpu_info = json.loads(b"".join(cpu_info_raw).decode('UTF-8'))['lscpu'] + + for info in cpu_info: + if info.get('field', None) == "Model name:": + return info.get('data', None) + return None + + +def sys_vendor() -> Optional[str]: + with open(f"/sys/devices/virtual/dmi/id/sys_vendor") as vendor: + return vendor.read().strip() + + +def product_name() -> Optional[str]: + with open(f"/sys/devices/virtual/dmi/id/product_name") as product: + return product.read().strip() + + +def mem_info(): + # This implementation is from https://stackoverflow.com/a/28161352 + return dict((i.split()[0].rstrip(':'), int(i.split()[1])) for i in open('/proc/meminfo').readlines()) + + +def mem_available() -> Optional[str]: + return mem_info()['MemAvailable'] + + +def mem_free() -> Optional[str]: + return mem_info()['MemFree'] + + +def mem_total() -> Optional[str]: + return mem_info()['MemTotal'] + + +def virtualization() -> Optional[str]: + return str(SysCommand("systemd-detect-virt")).strip('\r\n') + + def is_vm() -> bool: try: # systemd-detect-virt issues a non-zero exit code if it is not on a virtual machine diff --git a/archinstall/lib/profiles.py b/archinstall/lib/profiles.py index d4913e7e..8434a0ab 100644 --- a/archinstall/lib/profiles.py +++ b/archinstall/lib/profiles.py @@ -228,6 +228,18 @@ class Profile(Script): # since developers like less code - omitting it should assume they want to present it. return True + def get_profile_description(self): + with open(self.path, 'r') as source: + source_data = source.read() + + if '__description__' in source_data: + with self.load_instructions(namespace=f"{self.namespace}.py") as imported: + if hasattr(imported, '__description__'): + return imported.__description__ + + # Default to this string if the profile does not have a description. + return "This profile does not have the __description__ attribute set." + @property def packages(self) -> Optional[list]: """ diff --git a/archinstall/lib/user_interaction.py b/archinstall/lib/user_interaction.py index 79919658..b52267d9 100644 --- a/archinstall/lib/user_interaction.py +++ b/archinstall/lib/user_interaction.py @@ -575,11 +575,11 @@ def select_profile(): if len(shown_profiles) >= 1: for index, profile in enumerate(shown_profiles): - print(f"{index}: {profile}") + description = Profile(None, profile).get_profile_description() + print(f"{index}: {profile}: {description}") print(' -- The above list is a set of pre-programmed profiles. --') print(' -- They might make it easier to install things like desktop environments. --') - print(' -- The desktop profile will let you select a DE/WM profile, e.g gnome, kde, sway --') print(' -- (Leave blank and hit enter to skip this step and continue) --') selected_profile = generic_select(actual_profiles_raw, 'Enter a pre-programmed profile name if you want to install one: ', options_output=False) diff --git a/examples/guided.py b/examples/guided.py index 42429370..56c054fc 100644 --- a/examples/guided.py +++ b/examples/guided.py @@ -5,7 +5,7 @@ import time import archinstall from archinstall.lib.general import run_custom_user_commands -from archinstall.lib.hardware import has_uefi, AVAILABLE_GFX_DRIVERS +from archinstall.lib.hardware import * from archinstall.lib.networking import check_mirror_reachable from archinstall.lib.profiles import Profile @@ -16,6 +16,13 @@ if os.getuid() != 0: print("Archinstall requires root privileges to run. See --help for more.") exit(1) +# Log various information about hardware before starting the installation. This might assist in troubleshooting +archinstall.log(f"Hardware model detected: {archinstall.sys_vendor()} {archinstall.product_name()}; UEFI mode: {archinstall.has_uefi()}", level=logging.DEBUG) +archinstall.log(f"Processor model detected: {archinstall.cpu_model()}", level=logging.DEBUG) +archinstall.log(f"Memory statistics: {archinstall.mem_available()} available out of {archinstall.mem_total()} total installed", level=logging.DEBUG) +archinstall.log(f"Virtualization detected: {archinstall.virtualization()}; is VM: {archinstall.is_vm()}", level=logging.DEBUG) +archinstall.log(f"Graphics devices detected: {archinstall.graphics_devices().keys()}", level=logging.DEBUG) + # For support reasons, we'll log the disk layout pre installation to match against post-installation layout archinstall.log(f"Disk states before installing: {archinstall.disk_layouts()}", level=logging.DEBUG) |