Merge pull request #93771 from jtojnar/flatpak-1.8

Changed files
+71 -30
nixos
modules
services
desktops
tests
installed-tests
pkgs
development
libraries
+1
nixos/modules/services/desktops/flatpak.nix
···
# It has been possible since https://github.com/flatpak/flatpak/releases/tag/1.3.2
# to build a SELinux policy module.
+
# TODO: use sysusers.d
users.users.flatpak = {
description = "Flatpak system helper";
group = "flatpak";
+6
nixos/tests/installed-tests/default.nix
···
environment.systemPackages = with pkgs; [ gnome-desktop-testing ];
+
# The installed tests need to be added to the test VM’s closure.
+
# Otherwise, their dependencies might not actually be registered
+
# as valid paths in the VM’s Nix store database,
+
# and `nix-store --query` commands run as part of the tests
+
# (for example when building Flatpak runtimes) will fail.
+
environment.variables.TESTED_PACKAGE_INSTALLED_TESTS = "${tested.installedTests}/share";
};
testScript =
+3 -6
nixos/tests/installed-tests/flatpak.nix
···
withX11 = true;
testConfig = {
-
services.xserver.desktopManager.gnome3.enable = true; # TODO: figure out minimal environment where the tests work
-
# common/x11.nix enables the auto display manager (lightdm)
-
services.xserver.displayManager.gdm.enable = false;
-
services.gnome3.core-utilities.enable = false;
+
xdg.portal.enable = true;
services.flatpak.enable = true;
-
environment.systemPackages = with pkgs; [ gnupg ostree python2 ];
+
environment.systemPackages = with pkgs; [ gnupg ostree python3 ];
virtualisation.memorySize = 2047;
-
virtualisation.diskSize = 1024;
+
virtualisation.diskSize = 3072;
};
testRunnerFlags = "--timeout 3600";
+42 -12
pkgs/development/libraries/flatpak/default.nix
···
{ stdenv
, fetchurl
-
, autoreconfHook
+
, fetchpatch
+
, autoconf
+
, automake
+
, libtool
, docbook_xml_dtd_412
, docbook_xml_dtd_42
, docbook_xml_dtd_43
-
, docbook_xsl
+
, docbook-xsl-nons
, which
, libxml2
, gobject-introspection
, gtk-doc
, intltool
, libxslt
-
, pkgconfig
+
, pkg-config
, xmlto
, appstream-glib
, substituteAll
-
, glibcLocales
, yacc
, xdg-dbus-proxy
, p11-kit
···
, nixosTests
, libsoup
, lzma
+
, zstd
, ostree
, polkit
, python3
···
stdenv.mkDerivation rec {
pname = "flatpak";
-
version = "1.6.3";
+
version = "1.8.1";
# TODO: split out lib once we figure out what to do with triggerdir
-
outputs = [ "out" "dev" "man" "doc" "installedTests" ];
+
outputs = [ "out" "dev" "man" "doc" "devdoc" "installedTests" ];
src = fetchurl {
url = "https://github.com/flatpak/flatpak/releases/download/${version}/${pname}-${version}.tar.xz";
-
sha256 = "17s8nqdxd4xdy7ag9bw06adxccha78jmlsa3zpqnl3qh92pg0hji";
+
sha256 = "ZpFLZvmmQHk4bMCXpAoZ+oQZVo33+0VvLkB/D3asnq0=";
};
patches = [
···
# https://github.com/flatpak/flatpak/issues/1460
(substituteAll {
src = ./fix-test-paths.patch;
-
inherit coreutils gettext glibcLocales socat gtk3;
+
inherit coreutils gettext socat gtk3;
smi = shared-mime-info;
dfu = desktop-file-utils;
hicolorIconTheme = hicolor-icon-theme;
···
# But we want the GDK_PIXBUF_MODULE_FILE from the wrapper affect the icon validator.
./validate-icon-pixbuf.patch
+
+
# Fix `flatpak/test-oci-registry@{user,system}.wrap.test` installed tests.
+
# https://github.com/flatpak/flatpak/pull/3762
+
(fetchpatch {
+
url = "https://github.com/flatpak/flatpak/commit/c1447dadecd50f384b6d11dac18b014245267d00.patch";
+
sha256 = "UAA/wGr8/aMbx5MV+8Ilro2kgKkx2QOn88lDUjCgeDA=";
+
})
];
nativeBuildInputs = [
-
autoreconfHook
+
autoconf
+
automake
+
libtool
libxml2
+
# TODO: replace with docbook_xml_dtd_45 https://github.com/flatpak/flatpak/pull/3760
docbook_xml_dtd_412
docbook_xml_dtd_42
docbook_xml_dtd_43
-
docbook_xsl
+
docbook-xsl-nons
which
gobject-introspection
gtk-doc
intltool
libxslt
-
pkgconfig
+
pkg-config
xmlto
appstream-glib
yacc
···
libseccomp
libsoup
lzma
+
# zstd # TODO: broken paths in .pc file
polkit
python3
systemd
···
"--with-system-dbus-proxy=${xdg-dbus-proxy}/bin/xdg-dbus-proxy"
"--with-dbus-config-dir=${placeholder "out"}/share/dbus-1/system.d"
"--localstatedir=/var"
+
"--enable-gtk-doc"
"--enable-installed-tests"
];
···
"installed_test_metadir=${placeholder "installedTests"}/share/installed-tests/flatpak"
];
-
postPatch = ''
+
postPatch = let
+
vsc-py = python3.withPackages (pp: [
+
pp.pyparsing
+
]);
+
in ''
patchShebangs buildutil
patchShebangs tests
+
PATH=${stdenv.lib.makeBinPath [vsc-py]}:$PATH patchShebangs --build variant-schema-compiler/variant-schema-compiler
+
'';
+
+
preConfigure = ''
+
# TODO: remove the condition once autogen.sh is shipped in the tarball
+
# https://github.com/flatpak/flatpak/pull/3761
+
if [[ -f autogen.sh ]]; then
+
NOCONFIGURE=1 ./autogen.sh
+
else
+
autoreconf --install --force --verbose
+
fi
'';
passthru = {
+19 -12
pkgs/development/libraries/flatpak/fix-test-paths.patch
···
diff --git a/app/flatpak-builtins-build-export.c b/app/flatpak-builtins-build-export.c
-
index 5de89d62..bf6bdb52 100644
+
index 43fd0563..4067bd36 100644
--- a/app/flatpak-builtins-build-export.c
+++ b/app/flatpak-builtins-build-export.c
@@ -458,7 +458,7 @@ validate_desktop_file (GFile *desktop_file,
···
{
if (!g_error_matches (local_error, G_SPAWN_ERROR, G_SPAWN_ERROR_NOENT))
diff --git a/tests/libtest.sh b/tests/libtest.sh
-
index e64be49f..a9a53e12 100644
+
index acb2095b..b361da16 100644
--- a/tests/libtest.sh
+++ b/tests/libtest.sh
-
@@ -367,7 +367,7 @@ if [ -z "${FLATPAK_BWRAP:-}" ]; then
+
@@ -431,7 +431,7 @@ if [ -z "${FLATPAK_BWRAP:-}" ]; then
# running installed-tests: assume we know what we're doing
_flatpak_bwrap_works=true
elif ! "$FLATPAK_BWRAP" --unshare-ipc --unshare-net --unshare-pid \
···
_flatpak_bwrap_works=false
else
_flatpak_bwrap_works=true
-
@@ -440,7 +440,7 @@ dbus-daemon --fork --config-file=session.conf --print-address=3 --print-pid=4 \
+
@@ -504,7 +504,7 @@ dbus-daemon --fork --config-file=session.conf --print-address=3 --print-pid=4 \
export DBUS_SESSION_BUS_ADDRESS="$(cat dbus-session-bus-address)"
DBUS_SESSION_BUS_PID="$(cat dbus-session-bus-pid)"
···
assert_not_reached "Failed to start dbus-daemon"
fi
-
@@ -449,7 +449,7 @@ gdb_bt () {
+
@@ -519,7 +519,7 @@ commit_to_path () {
}
cleanup () {
···
fusermount -u $XDG_RUNTIME_DIR/doc || :
kill $(jobs -p) &> /dev/null || true
diff --git a/tests/make-test-app.sh b/tests/make-test-app.sh
-
index e51e21a6..7d39efb5 100755
+
index 612f914f..4b890da2 100755
--- a/tests/make-test-app.sh
+++ b/tests/make-test-app.sh
-
@@ -149,13 +149,13 @@ msgid "Hello world"
+
@@ -151,13 +151,13 @@ msgid "Hello world"
msgstr "Hallo Welt"
EOF
mkdir -p ${DIR}/files/de/share/de/LC_MESSAGES
···
flatpak build-finish ${DIR}
mkdir -p repos
diff --git a/tests/make-test-runtime.sh b/tests/make-test-runtime.sh
-
index 5d2c309b..cf61a3cf 100755
+
index af289625..7db51c17 100755
--- a/tests/make-test-runtime.sh
+++ b/tests/make-test-runtime.sh
-
@@ -25,9 +25,10 @@ EOF
+
@@ -28,9 +28,10 @@ EOF
# On Debian derivatives, /usr/sbin and /sbin aren't in ordinary users'
# PATHs, but ldconfig is kept in /sbin
···
mkdir -p ${DIR}/usr/bin
mkdir -p ${DIR}/usr/lib
ln -s ../lib ${DIR}/usr/lib64
-
@@ -37,48 +38,24 @@ if test -f /sbin/ldconfig.real; then
+
@@ -40,40 +41,17 @@ if test -f /sbin/ldconfig.real; then
else
cp `which ldconfig` ${DIR}/usr/bin
fi
···
done
ln -s bash ${DIR}/usr/bin/sh
+
@@ -84,11 +62,13 @@ echo "Hello world, from a runtime$EXTRA"
+
EOF
+
chmod a+x ${DIR}/usr/bin/runtime_hello.sh
+
-# We copy the C.UTF8 locale and call it en_US. Its a bit of a lie, but
-# the real en_US locale is often not available, because its in the
-# local archive.
-mkdir -p ${DIR}/usr/lib/locale/
-cp -r /usr/lib/locale/C.* ${DIR}/usr/lib/locale/en_US
+
+# We do not copy C.UTF8 locale because it is in locale archive and
+
+# that is already copied with glibc.
+
+
+mv ${DIR}/nix/store ${DIR}/usr/store # files outside /usr are not permitted, we will have to replace /nix/store with /usr/store
+chmod -R u+w ${DIR} # nix store has read-only directories which would cause problems during clean-up, files need to be writable for sed
+find ${DIR} -type f -print0 | xargs -0 sed -i 's~/nix/store/~/usr/store/~g' # replace hardcoded paths
···
if [ x$COLLECTION_ID != x ]; then
collection_args=--collection-id=${COLLECTION_ID}
diff --git a/tests/testlibrary.c b/tests/testlibrary.c
-
index 44ae28e3..76bf619f 100644
+
index 509ce6cc..6a333c9c 100644
--- a/tests/testlibrary.c
+++ b/tests/testlibrary.c
-
@@ -1343,7 +1343,7 @@ check_bwrap_support (void)
+
@@ -1399,7 +1399,7 @@ check_bwrap_support (void)
{
gint exit_code = 0;
char *argv[] = { (char *) bwrap, "--unshare-ipc", "--unshare-net",