From ea4394262f1c88966efb9977ea0cf5e8d2da2b1f Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Tue, 13 Apr 2021 12:39:12 +0200 Subject: Closing forked process PID in order to close any ramining open file handles. --- archinstall/lib/general.py | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'archinstall/lib/general.py') diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index f2a714e7..65a9610c 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -262,6 +262,11 @@ class sys_command():#Thread): with open(f'{self.cwd}/trace.log', 'wb') as fh: fh.write(self.trace_log) + try: + os.close(child_fd) + except: + pass + def prerequisite_check(): if not os.path.isdir("/sys/firmware/efi"): -- cgit v1.2.3-70-g09d2 From fad9f40a83877701163988ab20029aec93cfdb7b Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Tue, 13 Apr 2021 13:36:40 +0200 Subject: Modifying to enable piping in custom environment variables. This is required to disable systemd coloring and paging when querying for service states. Otherwise it returns unreliable data that can cause hanging. --- archinstall/lib/general.py | 5 +++-- archinstall/lib/services.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'archinstall/lib/general.py') diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index 65a9610c..6e3b66f1 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -76,7 +76,7 @@ class sys_command():#Thread): """ Stolen from archinstall_gui """ - def __init__(self, cmd, callback=None, start_callback=None, *args, **kwargs): + def __init__(self, cmd, callback=None, start_callback=None, environment_vars={}, *args, **kwargs): kwargs.setdefault("worker_id", gen_uid()) kwargs.setdefault("emulate", False) kwargs.setdefault("suppress_errors", False) @@ -93,6 +93,7 @@ class sys_command():#Thread): raise ValueError(f'Incorrect string to split: {cmd}\n{e}') self.args = args self.kwargs = kwargs + self.environment_vars = environment_vars self.kwargs.setdefault("worker", None) self.callback = callback @@ -159,7 +160,7 @@ class sys_command():#Thread): # Replace child process with our main process if not self.kwargs['emulate']: try: - os.execv(self.cmd[0], self.cmd) + os.execve(self.cmd[0], self.cmd, {**os.environ, **self.environment_vars}) except FileNotFoundError: self.status = 'done' self.log(f"{self.cmd[0]} does not exist.", level=LOG_LEVELS.Debug) diff --git a/archinstall/lib/services.py b/archinstall/lib/services.py index 8fcdd296..bb6f64f2 100644 --- a/archinstall/lib/services.py +++ b/archinstall/lib/services.py @@ -7,6 +7,6 @@ def service_state(service_name: str): if os.path.splitext(service_name)[1] != '.service': service_name += '.service' # Just to be safe - state = b''.join(sys_command(f'systemctl show -p SubState --value {service_name}')) + state = b''.join(sys_command(f'systemctl show --no-pager -p SubState --value {service_name}', environment_vars={'SYSTEMD_COLORS' : '0'})) return state.strip().decode('UTF-8') -- cgit v1.2.3-70-g09d2