Title: [271938] trunk/Tools
Revision
271938
Author
[email protected]
Date
2021-01-27 01:05:59 -0800 (Wed, 27 Jan 2021)

Log Message

[Flatpak SDK] Flatpak 1.10 environment variable issues
https://bugs.webkit.org/show_bug.cgi?id=220781

Patch by Philippe Normand  <[email protected]> and Lauro Moura <[email protected]> on 2021-01-27
Reviewed by Adrian Perez de Castro.

Flatpak no longer passes its env variables to bwrap, so the workaround is now to serialize
it on-disk in a JSON file and load it from our webkit-bwrap script.

* flatpak/flatpakutils.py:
(WebkitFlatpak.run_in_sandbox):
* flatpak/webkit-bwrap:

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (271937 => 271938)


--- trunk/Tools/ChangeLog	2021-01-27 08:41:41 UTC (rev 271937)
+++ trunk/Tools/ChangeLog	2021-01-27 09:05:59 UTC (rev 271938)
@@ -1,3 +1,17 @@
+2021-01-27  Philippe Normand  <[email protected]> and Lauro Moura  <[email protected]>
+
+        [Flatpak SDK] Flatpak 1.10 environment variable issues
+        https://bugs.webkit.org/show_bug.cgi?id=220781
+
+        Reviewed by Adrian Perez de Castro.
+
+        Flatpak no longer passes its env variables to bwrap, so the workaround is now to serialize
+        it on-disk in a JSON file and load it from our webkit-bwrap script.
+
+        * flatpak/flatpakutils.py:
+        (WebkitFlatpak.run_in_sandbox):
+        * flatpak/webkit-bwrap:
+
 2021-01-26  Sihui Liu  <[email protected]>
 
         Mute audio capture for speech recognition based on shouldInterruptAudioOnPageVisibilityChange when page is invisible

Modified: trunk/Tools/flatpak/flatpakutils.py (271937 => 271938)


--- trunk/Tools/flatpak/flatpakutils.py	2021-01-27 08:41:41 UTC (rev 271937)
+++ trunk/Tools/flatpak/flatpakutils.py	2021-01-27 09:05:59 UTC (rev 271938)
@@ -37,6 +37,7 @@
 
 from webkitpy.common.system.logutils import configure_logging
 import toml
+import json
 
 try:
     from urllib.parse import urlparse  # pylint: disable=E0611
@@ -48,12 +49,8 @@
 except ImportError:
     from urllib2 import urlopen
 
-FLATPAK_REQ = [
-    ("flatpak", "1.4.4"),
-]
+FLATPAK_REQUIRED_VERSION = "1.4.4"
 
-FLATPAK_VERSION = {}
-
 scriptdir = os.path.abspath(os.path.dirname(__file__))
 _log = logging.getLogger(__name__)
 
@@ -146,33 +143,32 @@
 def check_flatpak(verbose=True):
     # Flatpak is only supported on Linux.
     if not sys.platform.startswith("linux"):
-        return False
+        return ()
 
-    for app, required_version in FLATPAK_REQ:
-        try:
-            output = run_sanitized([app, "--version"], gather_output=True)
-        except (subprocess.CalledProcessError, OSError):
-            if verbose:
-                Console.error_message("You need to install %s >= %s"
-                                      " to be able to use the '%s' script.\n\n"
-                                      "You can find some informations about"
-                                      " how to install it for your distribution at:\n"
-                                      "    * https://flatpak.org/\n", app, required_version,
-                                      sys.argv[0])
-            return False
+    required_version = FLATPAK_REQUIRED_VERSION
+    try:
+        output = run_sanitized(["flatpak", "--version"], gather_output=True)
+    except (subprocess.CalledProcessError, OSError):
+        if verbose:
+            Console.error_message("You need to install flatpak >= %s"
+                                  " to be able to use the '%s' script.\n\n"
+                                  "You can find some informations about"
+                                  " how to install it for your distribution at:\n"
+                                  "    * https://flatpak.org/\n", required_version,
+                                  sys.argv[0])
+            return ()
 
-        def comparable_version(version):
-            return tuple(map(int, (version.split("."))))
+    def comparable_version(version):
+        return tuple(map(int, (version.split("."))))
 
-        version = output.split(" ")[1].strip("\n")
-        current = comparable_version(version)
-        FLATPAK_VERSION[app] = current
-        if current < comparable_version(required_version):
-            Console.error_message("%s %s required but %s found. Please update and try again\n",
-                                  app, required_version, version)
-            return False
+    version = output.split(" ")[1].strip("\n")
+    current_version = comparable_version(version)
+    if current_version < comparable_version(required_version):
+        Console.error_message("flatpak %s required but %s found. Please update and try again\n",
+                              required_version, version)
+        return ()
 
-    return True
+    return current_version
 
 
 class FlatpakObject:
@@ -559,7 +555,8 @@
         self.sccache_config_file = os.path.join(self.flatpak_build_path, 'sccache.toml')
 
         Console.quiet = self.quiet
-        if not check_flatpak():
+        self.flatpak_version = check_flatpak()
+        if not self.flatpak_version:
             return False
 
         self._reset_repository()
@@ -852,9 +849,16 @@
         if not building_gst and args[0] != "sccache":
             extra_flatpak_args.extend(self.setup_gstbuild(building))
 
+        flatpak_env = os.environ
+        for envvar in flatpak_env.keys():
+            if envvar.startswith("LC_") or envvar.startswith("LANG"):
+                del flatpak_env[envvar]
+                if self.flatpak_version >= (1, 10, 0):
+                    flatpak_command.append("--unset-env=%s" % envvar)
+
         flatpak_command += extra_flatpak_args + ['--command=%s' % args[0], "org.webkit.Sdk"] + args[1:]
 
-        flatpak_env = os.environ
+
         flatpak_env.update({
             "FLATPAK_BWRAP": os.path.join(scriptdir, "webkit-bwrap"),
             "WEBKIT_BUILD_DIR_BIND_MOUNT": "%s:%s" % (sandbox_build_path, self.build_path),
@@ -861,10 +865,16 @@
             "WEBKIT_FLATPAK_USER_DIR": os.environ["FLATPAK_USER_DIR"],
         })
 
+        env_file = os.path.join(self.build_root, 'flatpak-env.json')
+        with open(env_file, 'w') as f:
+            json.dump(dict(flatpak_env), f, indent=2)
+
         try:
             return self.execute_command(flatpak_command, stdout=stdout, env=flatpak_env)
         except KeyboardInterrupt:
             return 0
+        finally:
+            os.remove(env_file)
 
         return 0
 

Modified: trunk/Tools/flatpak/webkit-bwrap (271937 => 271938)


--- trunk/Tools/flatpak/webkit-bwrap	2021-01-27 08:41:41 UTC (rev 271937)
+++ trunk/Tools/flatpak/webkit-bwrap	2021-01-27 09:05:59 UTC (rev 271938)
@@ -22,6 +22,7 @@
 import shlex
 import sys
 import tempfile
+import json
 
 scriptdir = os.path.abspath(os.path.dirname(__file__))
 
@@ -28,6 +29,7 @@
 def main(args: list) -> int:
     tmpdir = tempfile.gettempdir()
     source_root = os.path.normpath(os.path.abspath(os.path.join(scriptdir, '../../')))
+    build_root = os.path.join(source_root, 'WebKitBuild')
     bind_mounts = {
         "/app/webkit":  source_root,
         # Access to /run/host is required by the crash log reporter.
@@ -35,7 +37,11 @@
         "/run/shm": "/dev/shm",
     }
 
-    flatpak_user_dir = os.environ.get("WEBKIT_FLATPAK_USER_DIR")
+    environ = {}
+    with open(os.path.join(build_root, 'flatpak-env.json')) as f:
+        environ = json.load(f)
+
+    flatpak_user_dir = environ.get("WEBKIT_FLATPAK_USER_DIR")
     if flatpak_user_dir:
         bind_mounts["/var/tmp"] = os.path.join(flatpak_user_dir, "var", "tmp")
 
@@ -43,16 +49,16 @@
         "/run/icecc": "/var/run/icecc"
     }
 
-    build_path = os.environ.get("WEBKIT_BUILD_DIR_BIND_MOUNT")
+    build_path = environ.get("WEBKIT_BUILD_DIR_BIND_MOUNT")
     if build_path:
         dest, src = ""
         try_bind_mounts[dest] = src
 
-    coredumps_dir = os.environ.get("WEBKIT_CORE_DUMPS_DIRECTORY")
+    coredumps_dir = environ.get("WEBKIT_CORE_DUMPS_DIRECTORY")
     if coredumps_dir:
         try_bind_mounts[coredumps_dir] = coredumps_dir
 
-    xdg_runtime_dir = os.environ.get("XDG_RUNTIME_DIR")
+    xdg_runtime_dir = environ.get("XDG_RUNTIME_DIR")
     if xdg_runtime_dir:
         pw_socket = os.path.join(xdg_runtime_dir, "pipewire-0")
         try_bind_mounts[pw_socket] = pw_socket
@@ -64,7 +70,7 @@
     for dst, src in try_bind_mounts.items():
         bwrap_args.extend(("--bind-try", src, dst))
 
-    for env in os.environ.keys():
+    for env in environ.keys():
         if env.startswith("LC_") or env == "LANGUAGE":
             bwrap_args.extend(("--unsetenv", env))
     bwrap_args.extend(("--setenv", "LANG", "en_US.UTF-8"))
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to