]> glassweightruler.freedombox.rocks Git - waydroid.git/commitdiff
lxc: Workaround against lxc changing logfile permissions
authorAlessandro Astone <ales.astone@gmail.com>
Wed, 4 Jan 2023 14:03:09 +0000 (15:03 +0100)
committerAlessandro Astone <ales.astone@gmail.com>
Wed, 4 Jan 2023 14:03:11 +0000 (15:03 +0100)
Running lxc-start changes the permissions of stdout/stderr to 700.

The previous workaround of changing the permissions back after lxc-status
only worked because of the lxc-status loop in container_manager.start

Make it more generic by applying it to every caller of helpers.lxc.start

See: https://github.com/lxc/lxc/blob/6564e6ccb22e6e3c6cf36e6ae3cb5d5f73122486/src/lxc/utils.c#L1859

tools/actions/container_manager.py
tools/helpers/lxc.py

index e36cfbfcb503e16e5173d2bf1f30f74f0bb0210e..29ba55268b64a1c6b3397828927dc71906150282 100644 (file)
@@ -165,17 +165,6 @@ def do_start(args, session):
     set_permissions(args)
 
     helpers.lxc.start(args)
-    lxc_status = helpers.lxc.status(args)
-    timeout = 10
-    while lxc_status != "RUNNING" and timeout > 0:
-        lxc_status = helpers.lxc.status(args)
-        logging.info(
-            "waiting {} seconds for container to start...".format(timeout))
-        timeout = timeout - 1
-        time.sleep(1)
-    if lxc_status != "RUNNING":
-        raise OSError("container failed to start")
-
     services.hardware_manager.start(args)
 
 def stop(args):
index cac4bb5dbc6551147275c9f13582029b51517fa7..0808d984a4ae63a3970c7b3292cadb363eda48c7 100644 (file)
@@ -6,6 +6,7 @@ import re
 import logging
 import glob
 import shutil
+import time
 import platform
 import gbinder
 import tools.config
@@ -344,13 +345,27 @@ def setup_host_perms(args):
 def status(args):
     command = ["lxc-info", "-P", tools.config.defaults["lxc"], "-n", "waydroid", "-sH"]
     out = subprocess.run(command, stdout=subprocess.PIPE).stdout.decode('utf-8').strip()
-    os.chmod(args.log, 0o666)
     return out
 
+def wait_for_running(args):
+    lxc_status = status(args)
+    timeout = 10
+    while lxc_status != "RUNNING" and timeout > 0:
+        lxc_status = status(args)
+        logging.info(
+            "waiting {} seconds for container to start...".format(timeout))
+        timeout = timeout - 1
+        time.sleep(1)
+    if lxc_status != "RUNNING":
+        raise OSError("container failed to start")
+
 def start(args):
     command = ["lxc-start", "-P", tools.config.defaults["lxc"],
                "-F", "-n", "waydroid", "--", "/init"]
     tools.helpers.run.user(args, command, output="background")
+    wait_for_running(args)
+    # Workaround lxc-start changing stdout/stderr permissions to 700
+    os.chmod(args.log, 0o666)
 
 def stop(args):
     command = ["lxc-stop", "-P",