Merge pull request #543 from dylanmtaylor/hardware-detection
Add additional hardware debugging functions
This commit is contained in:
commit
f85f99dd40
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue