build: Always set personality to linux32 when cross-building

This means that autodetection during builds works much better.
Fixes https://github.com/flatpak/flatpak/issues/712
tingping/wmclass
Alexander Larsson 2017-04-19 19:36:55 +02:00
parent 63978c299a
commit fe56c08203
5 changed files with 27 additions and 1 deletions

View File

@ -269,7 +269,7 @@ flatpak_builtin_build (int argc, char **argv, GCancellable *cancellable, GError
argv_array = g_ptr_array_new_with_free_func (g_free);
g_ptr_array_add (argv_array, g_strdup (flatpak_get_bwrap ()));
run_flags = FLATPAK_RUN_FLAG_DEVEL | FLATPAK_RUN_FLAG_NO_SESSION_HELPER;
run_flags = FLATPAK_RUN_FLAG_DEVEL | FLATPAK_RUN_FLAG_NO_SESSION_HELPER | FLATPAK_RUN_FLAG_SET_PERSONALITY;
if (custom_usr)
run_flags |= FLATPAK_RUN_FLAG_WRITABLE_ETC;

View File

@ -27,6 +27,7 @@
#include <sys/utsname.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/personality.h>
#include <grp.h>
#ifdef ENABLE_SECCOMP
@ -4133,6 +4134,13 @@ flatpak_run_setup_base_argv (GPtrArray *argv_array,
if ((flags & FLATPAK_RUN_FLAG_WRITABLE_ETC) == 0)
add_monitor_path_args ((flags & FLATPAK_RUN_FLAG_NO_SESSION_HELPER) == 0, argv_array);
if ((flags & FLATPAK_RUN_FLAG_SET_PERSONALITY) &&
flatpak_is_linux32_arch (arch))
{
g_debug ("Setting personality linux32");
personality (PER_LINUX32);
}
return TRUE;
}

View File

@ -84,6 +84,7 @@ typedef enum {
FLATPAK_RUN_FLAG_WRITABLE_ETC = (1 << 6),
FLATPAK_RUN_FLAG_NO_SESSION_BUS_PROXY = (1 << 7),
FLATPAK_RUN_FLAG_NO_SYSTEM_BUS_PROXY = (1 << 8),
FLATPAK_RUN_FLAG_SET_PERSONALITY = (1 << 9),
} FlatpakRunFlags;
gboolean flatpak_run_add_extension_args (GPtrArray *argv_array,

View File

@ -368,6 +368,22 @@ flatpak_get_arch (void)
#endif
}
gboolean
flatpak_is_linux32_arch (const char *arch)
{
const char *kernel_arch = flatpak_get_kernel_arch ();
if (strcmp (kernel_arch, "x86_64") == 0 &&
strcmp (arch, "i386") == 0)
return TRUE;
if (strcmp (kernel_arch, "aarch64") == 0 &&
strcmp (arch, "arm") == 0)
return TRUE;
return FALSE;
}
/* Get all compatible arches for this host in order of priority */
const char **
flatpak_get_arches (void)

View File

@ -65,6 +65,7 @@ gboolean flatpak_is_in_sandbox (void);
const char * flatpak_get_arch (void);
const char ** flatpak_get_arches (void);
gboolean flatpak_is_linux32_arch (const char *arch);
const char ** flatpak_get_gl_drivers (void);
gboolean flatpak_extension_matches_reason (const char *extension_id,