Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall
diff options
context:
space:
mode:
authorAnton Hvornum <anton@hvornum.se>2021-11-07 11:23:29 +0000
committerGitHub <noreply@github.com>2021-11-07 12:23:29 +0100
commit565464c72df713db7df94809a75b313aed3a7621 (patch)
tree10a16b3791ea7858cbc467ef384b3aee1bbdc52b /archinstall
parentc62cef3cfd876d4f6e4fbff2f92abc58d1dd045b (diff)
Fixes #690 by Clearing storage['active_boot'] if shutdown was successful (#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.
Diffstat (limited to 'archinstall')
-rw-r--r--archinstall/lib/installer.py2
-rw-r--r--archinstall/lib/systemd.py17
2 files changed, 16 insertions, 3 deletions
diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py
index c2c30f7c..1318cb16 100644
--- a/archinstall/lib/installer.py
+++ b/archinstall/lib/installer.py
@@ -691,6 +691,7 @@ class Installer:
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)
@@ -712,6 +713,7 @@ class Installer:
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.
diff --git a/archinstall/lib/systemd.py b/archinstall/lib/systemd.py
index a7e35839..7f732c99 100644
--- a/archinstall/lib/systemd.py
+++ b/archinstall/lib/systemd.py
@@ -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
@@ -65,8 +67,10 @@ class Boot:
'-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():
@@ -85,7 +89,14 @@ class Boot:
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:
@@ -112,10 +123,10 @@ class Boot:
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)