Skip to content
Snippets Groups Projects
Commit 26b3be64 authored by Simon McVittie's avatar Simon McVittie
Browse files

wrap: Skip architecture setup for architectures the runtime can't run


This opens up the possibility of amd64-only or i386-only runtimes,
and in particular a SteamRT chroot created by setup_chroot.sh is
either amd64-only or i386-only.

Signed-off-by: default avatarSimon McVittie <smcv@collabora.com>
parent ee226382
No related branches found
No related tags found
No related merge requests found
......@@ -263,10 +263,6 @@ Instructions for testing
$ ln -s /var/chroots/steamrt_scout_amd64 \
~/.steam/root/common/SteamLinuxRuntime/scout-chroot/files
Note that to use a `chroot` in this way, it must have at least
`libc6:amd64` and `libc6:i386` installed. `pressure-vessel` does not
currently support containers that do not have both word-sizes.
* Launch a game once without pressure-vessel
* Configure the launch options for the chosen game. Either use the Steam
......
......@@ -1172,7 +1172,7 @@ bind_runtime (FlatpakBwrap *bwrap,
argv[0] = tool_path;
/* This has the side-effect of testing whether we can run binaries
* for this architecture */
* for this architecture on the host system. */
ld_so = capture_output (argv, NULL);
if (ld_so != NULL)
......@@ -1192,8 +1192,36 @@ bind_runtime (FlatpakBwrap *bwrap,
g_autofree gchar *this_dri_path_in_container = g_build_filename (libdir_in_container,
"dri", NULL);
g_autofree gchar *libc = NULL;
g_autofree gchar *ld_so_in_runtime = NULL;
const gchar *libqual = NULL;
temp_bwrap = flatpak_bwrap_new (NULL);
flatpak_bwrap_add_args (temp_bwrap,
bwrap->argv->pdata[0],
NULL);
if (!bind_usr (temp_bwrap, runtime, "/", error))
return FALSE;
flatpak_bwrap_add_args (temp_bwrap,
"readlink", "-e", ld_so,
NULL);
flatpak_bwrap_finish (temp_bwrap);
ld_so_in_runtime = capture_output ((const char * const *) temp_bwrap->argv->pdata,
NULL);
g_clear_pointer (&temp_bwrap, flatpak_bwrap_free);
if (ld_so_in_runtime == NULL)
{
g_debug ("Container does not have %s so it cannot run "
"%s binaries", ld_so, multiarch_tuples[i]);
continue;
}
g_debug ("Container path: %s -> %s", ld_so, ld_so_in_runtime);
search_path_append (dri_path, this_dri_path_in_container);
g_mkdir_with_parents (libdir_on_host, 0755);
......@@ -1225,19 +1253,20 @@ bind_runtime (FlatpakBwrap *bwrap,
if (!run_bwrap (temp_bwrap, error))
return FALSE;
g_clear_pointer (&temp_bwrap, flatpak_bwrap_free);
libc = g_build_filename (libdir_on_host, "libc.so.6", NULL);
/* If we are going to use the host system's libc6 (likely)
* then we have to use its ld.so too. */
if (g_file_test (libc, G_FILE_TEST_IS_SYMLINK))
{
g_autofree gchar *real_path_in_host = NULL;
g_autofree gchar *real_path_in_runtime = NULL;
g_autofree gchar *ld_so_in_host = NULL;
g_debug ("Making host ld.so visible in container");
real_path_in_host = flatpak_canonicalize_filename (ld_so);
g_debug ("Host path: %s -> %s", ld_so, real_path_in_host);
ld_so_in_host = flatpak_canonicalize_filename (ld_so);
g_debug ("Host path: %s -> %s", ld_so, ld_so_in_host);
g_clear_pointer (&temp_bwrap, flatpak_bwrap_free);
......@@ -1254,16 +1283,10 @@ bind_runtime (FlatpakBwrap *bwrap,
NULL);
flatpak_bwrap_finish (temp_bwrap);
real_path_in_runtime = capture_output ((const char * const *) temp_bwrap->argv->pdata,
error);
if (real_path_in_runtime == NULL)
return FALSE;
g_debug ("Container path: %s -> %s", ld_so, real_path_in_runtime);
g_debug ("Container path: %s -> %s", ld_so, ld_so_in_runtime);
flatpak_bwrap_add_args (bwrap,
"--ro-bind", real_path_in_host,
real_path_in_runtime,
"--ro-bind", ld_so_in_host,
ld_so_in_runtime,
NULL);
g_debug ("Making host locale data visible in container");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment