Skip to content

Commit

Permalink
Fixes #690 by Clearing storage['active_boot'] if shutdown was success…
Browse files Browse the repository at this point in the history
…ful (#691)

* Clear storage variable if shutdown was successful

* Adding shutdown monitoring and debug output.

* It seams systemd-run gets a connection reset from running 'shutdown now', but in a good way - so it doesn't raise any exceptions. Or at least that's what it looks like.
  • Loading branch information
Torxed authored Nov 7, 2021
1 parent c62cef3 commit 565464c
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
2 changes: 2 additions & 0 deletions archinstall/lib/installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,7 @@ def create_file(self, filename, owner=None):
return InstallationFile(self, filename, owner)

def set_keyboard_language(self, language: str) -> bool:
log(f"Setting keyboard language to {language}", level=logging.INFO)
if len(language.strip()):
if not verify_keyboard_layout(language):
self.log(f"Invalid keyboard language specified: {language}", fg="red", level=logging.ERROR)
Expand All @@ -712,6 +713,7 @@ def set_keyboard_language(self, language: str) -> bool:
return True

def set_x11_keyboard_language(self, language: str) -> bool:
log(f"Setting x11 keyboard language to {language}", level=logging.INFO)
"""
A fallback function to set x11 layout specifically and separately from console layout.
This isn't strictly necessary since .set_keyboard_language() does this as well.
Expand Down
17 changes: 14 additions & 3 deletions archinstall/lib/systemd.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import logging
import time
from .exceptions import SysCallError
from .general import SysCommand, SysCommandWorker, locate_binary
from .installer import Installer
from .output import log
Expand Down Expand Up @@ -65,8 +67,10 @@ def __enter__(self):
'-D', self.instance.target,
'--timezone=off',
'-b',
'--no-pager',
'--machine', self.container_name
])
# '-P' or --console=pipe could help us not having to do a bunch of os.write() calls, but instead use pipes (stdin, stdout and stderr) as usual.

if not self.ready:
while self.session.is_alive():
Expand All @@ -85,7 +89,14 @@ def __exit__(self, *args, **kwargs):
log(args[1], level=logging.ERROR, fg='red')
log(f"The error above occured in a temporary boot-up of the installation {self.instance}", level=logging.ERROR, fg="red")

SysCommand(f'machinectl shell {self.container_name} /bin/bash -c "shutdown now"')
shutdown = SysCommand(f'systemd-run --machine={self.container_name} --pty /bin/bash -c "shutdown now"')
while self.session.is_alive():
time.sleep(0.25)

if shutdown.exit_code == 0:
storage['active_boot'] = None
else:
raise SysCallError(f"Could not shut down temporary boot of {self.instance}", level=logging.ERROR, fg="red")

def __iter__(self):
if self.session:
Expand All @@ -112,10 +123,10 @@ def SysCommand(self, cmd: list, *args, **kwargs):

cmd[0] = locate_binary(cmd[0])

return SysCommand(["machinectl", "shell", self.container_name, *cmd], *args, **kwargs)
return SysCommand(["systemd-run", f"--machine={self.container_name}", "--pty", *cmd], *args, **kwargs)

def SysCommandWorker(self, cmd: list, *args, **kwargs):
if cmd[0][0] != '/' and cmd[0][:2] != './':
cmd[0] = locate_binary(cmd[0])

return SysCommandWorker(["machinectl", "shell", self.container_name, *cmd], *args, **kwargs)
return SysCommandWorker(["systemd-run", f"--machine={self.container_name}", "--pty", *cmd], *args, **kwargs)

0 comments on commit 565464c

Please sign in to comment.