qemush/qemu/launchers/kvm

45 lines
1.3 KiB
Text
Raw Normal View History

2023-12-13 12:41:28 +01:00
#!/usr/bin/env python3
# Retrieve the name of the monitor socket
from subprocess import CalledProcessError
try:
from subprocess import check_output
socket = 'unix:%s,server,nowait' % (check_output(["sockpath"], text=True))
except CalledProcessError as e:
exit(e.returncode)
# Set number of vCPUs to use to the environment variable QEMUSH_NPROC or
# half of total vCPUs installed if it fails
try:
from os import environ
nproc = environ['QEMUSH_NPROC']
except KeyError:
from multiprocessing import cpu_count
nproc = str(cpu_count() // 2)
2023-12-13 12:41:28 +01:00
# Set amount of RAM to use to the environment variable QEMUSH_RAM or half
# of total RAM installed if it fails
try:
ram = environ['QEMUSH_RAM']
except KeyError:
from psutil import virtual_memory
ram = str(virtual_memory().available // 2 // (1024 ** 2))
2023-12-13 12:41:28 +01:00
# Set the command to initialize; all required parameters to make a sane KVM
# are included and optional arguments are appended from argv
from sys import argv
2023-12-13 12:41:28 +01:00
command = [
'qemu-system-x86_64',
2024-01-21 01:52:04 +01:00
'-enable-kvm', '-daemonize',
'-monitor', socket,
2023-12-13 12:41:28 +01:00
'-M', 'q35',
'-cpu', 'host', '-smp', nproc,
'-m', ram,
2023-12-13 12:41:28 +01:00
'-net', 'nic'
] + argv[1:]
# Print the final command and replace the main process with it
2023-12-13 12:41:28 +01:00
print(command)
from os import execvp
2023-12-13 12:41:28 +01:00
execvp(command[0], command)