Commit Graph

8057 Commits

Author SHA1 Message Date
Owen W. Taylor
35995290f5 Add a FLATPAK_DOWNLOAD_TMPDIR variable
Instead of hardcoding /var/tmp when temporarily downloading layer
tarballs, support overriding with a FLATPAK_DOWNLOAD_TMPDIR
environment variable.

We don't use TMPDIR because the layer tarballs can be very big
(in extreme cases like an SDK > 1GB), and TMPDIR is more
likely to point to a in-memory tmpfs.
2024-12-18 16:35:46 +00:00
Owen W. Taylor
73dd78f775 Add FLATPAK_DATA_DIR environment variable
Now that we read remotes from $datadir/flatpaks/remotes.d as well as
/etc/flatpaks/remotes.d, we should have a mechanism to redirect this, as
we do for almost all other filesystem path locations.

To avoid an explosion of new variables, we introduce FLATPAK_DATA_DIR to
represent configuration that ships with the operating system.

This is useful:
 - To fix sandboxing of tests
 - When installing using flatpak into a chroot, so that we read
   the chroot's configuration rather than the host.

It also is used when reading triggers, but the current
FLATPAK_TRIGGERSDIR is left for compatibility.

Co-authored-by: Sebastian Wick <sebastian.wick@redhat.com>
2024-12-18 16:32:02 +00:00
Christian Hergert
a1bfc19d49 flatpak: emit progress escape sequence
Following on systemd adopting the progress OSC that ConEmu and Windows
Terminal use, this exports the progress percentage to the terminal
emulator.

VTE also has support for this in the upcoming 0.80 release and is used
by Ptyxis to display progress in the tab widget.
2024-12-15 02:39:23 +01:00
Simon McVittie
6b1b2cc804 wayland: Handle WAYLAND_SOCKET, even when using security-context-v1
As described in #5614, `WAYLAND_SOCKET` provides a single-use socket
as a file descriptor, which some Wayland compositors use to track
special-purpose Wayland clients like input methods and panels.
Since #5615, there are two cases for how it works:

1. With `--nosocket=inherit-wayland-socket` (default): the file
   descriptor is marked close-on-exec so that the sandboxed app does
   not inherit it, and the `WAYLAND_SOCKET` environment variable
   becomes unset. Every time the sandboxed app connects to Wayland,
   because `WAYLAND_SOCKET` is unset, it will fall back to the ordinary,
   public `WAYLAND_DISPLAY`.

2. With `--socket=inherit-wayland-socket`: the file descriptor is
   allowed to be inherited, and the environment variable continues
   to be set. The first time the sandboxed app connects to Wayland,
   it will connect to the `WAYLAND_SOCKET`. The second and subsequent
   connection attempts will be to the ordinary `WAYLAND_DISPLAY`.

However, when #4920 added a code path for the Wayland security-context-v1
interface, it was implemented as a completely separate code path which
early-returned from flatpak_run_add_wayland_args() before the point
where #5615 subsequently added the implementation for (1.). The practical
result of this is that if the compositor sets `WAYLAND_SOCKET` for
a Flatpak app, and it also happens to implement security-context-v1,
then the application will always inherit the `WAYLAND_SOCKET` as though
`--socket=inherit-wayland-socket` had been used. In this case, the app's
first connection to Wayland will use the `WAYLAND_SOCKET` (bypassing
the security context mechanism), the same as in compositors that do not
implement security-context-v1 at all, and only the second and subsequent
connections will use the special per-app `WAYLAND_DISPLAY` created by the
security context mechanism. This seems likely to be unexpected.

To give maintainers and users a choice between behaviours (1.) and (2.),
we can put the security-context-v1 code path through the same code to
handle `WAYLAND_SOCKET` that is used for Wayland compositors that do not
implement that interface. This means that
`--nosocket=inherit-wayland-socket` disables `WAYLAND_SOCKET` in all
cases: if the compositor supports security-context-v1 and the feature
was also available when Flatpak was compiled, then all of the sandboxed
app's Wayland connections will be to the per-app `WAYLAND_DISPLAY`
created by security-context-v1, and otherwise all of the sandboxed app's
Wayland connections will be to the ordinary, public `WAYLAND_DISPLAY`.

With `--socket=inherit-wayland-socket`, the sandboxed app's
first connection to Wayland will continue to be to the inherited
`WAYLAND_SOCKET` fd, and the second and subsequent connections will
be to the `WAYLAND_DISPLAY`, which might either be the special per-app
version created by security-context-v1, or the ordinary public version.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-12-15 02:14:22 +01:00
Simon McVittie
5d235764c0 wayland: Only have one code path to bind-mount WAYLAND_DISPLAY into sandbox
In the older code path where we were not using Wayland security contexts,
we would try to preserve the name of the Wayland display socket
(`$WAYLAND_DISPLAY`), only falling back to `wayland-0` if the name was
something unconventional (contains `/` or does not start with `wayland-`).
This means that in practice, apps could often successfully use a value
of `$WAYLAND_DISPLAY` from the wrong "world" - for example reading the
value used outside the sandbox from a file in code that runs inside the
sandbox, or conversely, passing the value used inside the sandbox via
IPC to a service like gpg-agent outside the sandbox.

However, the implementation in
flatpak_run_add_wayland_security_context_args() did not do this, and
instead would unconditionally use `wayland-0`. There's no real need to
enforce use of that name.

Apps should not really be passing the string value of `WAYLAND_DISPLAY`
across a sandbox boundary, but in practice some do, and we will get
better interoperability if we try to keep that working in at least the
simple cases. This is similar in spirit to how we have handled X11
since 2022 (flatpak/flatpak#5034).

For now, we skip the last few lines of flatpak_run_add_wayland_args() if
we are using Wayland security contexts, to preserve existing
functionality. A subsequent commit will revisit that.

Resolves: https://github.com/flatpak/flatpak/issues/5863
Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-12-15 02:14:22 +01:00
Simon McVittie
0edc8c4159 wayland: Avoid some duplication when getting the Wayland display name
There's no need to have the logic for falling back to `wayland-0` in more
than one place.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-12-15 02:14:22 +01:00
Simon McVittie
51d01f810e Belatedly add more release notes for 1.15.11
Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-11-28 19:14:52 +00:00
Anders Jonsson
deea87f056 context: Use plural form in string 2024-11-28 17:16:41 +00:00
Simon McVittie
4025a96213 tests: Install missing test data
Without this, "as-installed" tests via `ginsttest-runner` will fail,
for example in Debian's autopkgtest framework.

Fixes: 1d56bd37 "context: Implement device lists for usb"
Signed-off-by: Simon McVittie <smcv@debian.org>
2024-11-28 16:52:36 +00:00
Simon McVittie
99a8b88a1a Post-release version bump
Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-11-28 16:24:14 +00:00
Simon McVittie
c7ae1cc18c release-checklist: Match the last few releases
The release checklist claimed we used titles like `Release 1.15.12`,
but in practice they've all been like `1.15.12` for a long time.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-11-28 16:23:25 +00:00
Simon McVittie
3081395d5b Update po/ for release
Signed-off-by: Simon McVittie <smcv@collabora.com>
1.15.12
2024-11-28 15:03:31 +00:00
Simon McVittie
686a89b6fe Prepare v1.15.12
Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-11-28 15:00:25 +00:00
Simon McVittie
31cb8d72a9 Revert "run: Use the instance id in the cgroup name"
apply_extra_data() passes a null instance ID to
flatpak_run_add_environment_args(), causing a segfault in
flatpak_run_in_transient_unit() which assumes the instance ID is non-null.
Revert this for now: flatpak#5962 was non-essential, and we can redo it
in a less crashy way later.

This reverts commit 7d6f3e8b6b.

Resolves: https://github.com/flatpak/flatpak/issues/6009
Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-11-28 14:49:51 +00:00
Georges Basile Stavracas Neto
a625aaa006 doc: Use post-release bumps in the checklist
As per suggestion in the Flatpak channel. This makes such
that the version built is always the version that will be
released.
2024-11-27 13:51:55 +01:00
Georges Basile Stavracas Neto
79b3372806 Post-release version bump to 1.15.12 2024-11-27 13:51:55 +01:00
Georges Basile Stavracas Neto
ae1c525311 Update translation files for 1.15.11 1.15.11 2024-11-26 16:09:08 +01:00
Georges Basile Stavracas Neto
9169a42ce1 NEWS, meson: Update for version 1.15.11 2024-11-26 16:09:08 +01:00
Georges Basile Stavracas Neto
51fec95f7d Update NEWS 2024-11-26 16:09:08 +01:00
Simon McVittie
b730771bd7 subprojects: Update bubblewrap to v0.11.0
<https://github.com/containers/bubblewrap/releases/tag/v0.11.0>

We don't use any of the new features yet, so the minimum required
version in the build system is still 0.10.0.

Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-10-31 10:03:52 -05:00
lumingzh
6bc8b6ade7 fix a translate string 2024-10-30 09:20:24 -03:00
lumingzh
61207666e8 update Chinese translation 2024-10-30 09:20:24 -03:00
Hubert Figuière
fd1b7e4440 po: Update POTFILES.in for usb
Signed-off-by: Hubert Figuière <hub@figuiere.net>
2024-10-25 10:36:50 -05:00
Maximiliano Sandoval
dc2ce2cb0b app: Check for component name when searching
We add the component name as part of the fallback search.

Before this patch, queries as

    flatpak search Element

or

    flatpak search d-spy

return no results even though the search term coincides with the
application name.
2024-10-17 18:20:07 -05:00
lumingzh
bb5c419290 update Chinese translation 2024-10-17 08:18:07 -03:00
Hubert Figuière
1beff8e577 flatpak-cli-transaction: show the USB portal permissions
Signed-off-by: Hubert Figuière <hub@figuiere.net>
2024-10-16 14:11:56 -03:00
Hubert Figuière
cced00fdb0 usb: Added tool examples to generate device lists
Signed-off-by: Hubert Figuière <hub@figuiere.net>
2024-10-16 14:11:56 -03:00
Hubert Figuière
1d56bd377e context: Implement device lists for usb
Signed-off-by: Hubert Figuière <hub@figuiere.net>
2024-10-16 14:11:56 -03:00
Hubert Figuière
19b447f49a flatpak: Add USB enumerables / hidden lists
Add '--usb' and '--nousb' to the FlatpakContext option group.

Map these parameters to either the enumarable list, or the hidden
list, of a new "USB Devices" group in the metadata key file. It looks
like this:

```
[USB Devices]
hidden-devices=cls:01:*;
enumerable-devices=vnd:0fd9+dev:0080;vnd:0fd9+dev:0080;
```

Flatpak itself does not use these values, they're meant to be used
by e.g. XDG Desktop Portal to filter which devices the app can see
through the USB portal.

Hidden devices must always take precedence over enumerable devices.

This is heavily inspired by https://github.com/flatpak/flatpak/pull/4083

Co-Authored-By: Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
Co-Authored-By: Ryan Gonzalez <rymg19@gmail.com>
Signed-off-by: Hubert Figuière <hub@figuiere.net>
2024-10-16 14:11:56 -03:00
Sebastian Wick
7d6f3e8b6b run: Use the instance id in the cgroup name
The systemd Desktop Environments conventions for cgroup names is

  app[-<launcher>]-<ApplicationID>[@<RANDOM>].service

where RANDOM should ensure that multiple instances of the application
can be launched. Currently flatpak uses the PID of itself but the
instance fullfills this convention and is a bit more useful for matching
the cgroup to a flatpak instance.
2024-10-15 13:54:04 +01:00
Simon McVittie
3498ecf9ab app, common, tests: Avoid deprecated g_qsort_with_data()
For historical reasons g_qsort_with_data() "only" works with up to 2**31
items, so it won't necessarily work for pathologically large arrays
and therefore is deprecated.

One advantage of g_qsort_with_data() and its replacement g_sort_array()
is that GLib guarantees that they are a stable sort (will not permute
items that already compare equal), which is not a guarantee for glibc's
qsort() and qsort_r(). However, I don't think it's actually relevant
whether we are doing a stable sort in any of these places: most of the
time we are sorting an array of unique items (often the keys of a hash
table, which are necessarily unique), therefore the compare function
will not compare equal in any case.

Another advantage of the GLib functions is that they are portable,
unlike qsort_r(). However, Flatpak is Linux-only, so we can freely use
useful functions like qsort_r().

Signed-off-by: Simon McVittie <smcv@collabora.com>
2024-10-15 13:53:07 +01:00
Hubert Figuière
b520ec5961 Fix a memory leaks
When iterating more than one group, the variable got clobbered.
Narrowing their scope helps.
This was triggered installing an Inkscape test build

Signed-off-by: Hubert Figuière <hub@figuiere.net>
2024-10-07 09:33:43 -05:00
Cajus Pollmeier
9b4f5baa95 Fix spelling in comment
Co-authored-by: Simon McVittie <smcv@collabora.com>
2024-10-07 09:31:47 -05:00
Cajus Pollmeier
e398b1a5ec Use set_boolean instead of writing strings 2024-10-07 09:31:47 -05:00
Cajus Pollmeier
fb37012475 Add support for KDE search completion
KDE krunner supports DBus plugins that allow search completion
comparable to the already supported gnome-shell searchprovider.

Exporting the contents of the runner directory enables us to enable
search results from within flatpack applications.
2024-10-07 09:31:47 -05:00
Georges Basile Stavracas Neto
117c825fb8 portal: Fix 'sandboxed' → 'sandbox'
The original intention was to add 'sandbox-a11y-own-names', which would
match the prefix of other arguments, and it's what was documented in the
D-Bus XML and in flatpak-spawn too.

Fixes 8ec21a28f2
2024-10-03 07:58:25 -03:00
Georges Basile Stavracas Neto
3d04db0734 context: Consider a11y policies too
When merging, marking a context as sandboxed, etc, also propagate and
apply the a11y policies stored.

Fixes 915bbfb294
2024-10-03 07:58:25 -03:00
Georges Basile Stavracas Neto
0785f890af context: Remove duplicated hash table loop
It loops twice and adds the same values, which is unnecessary.
2024-10-03 07:58:25 -03:00
Sebastian Wick
1561e0f39c run: Unset $TZDIR environment variable
We now resolve the zoneinfo and always make it available at
/usr/share/zoneinfo in the sandbox so we unset TZDIR to get flatpak apps
looking at the right directory.
2024-09-23 22:52:08 -03:00
Sebastian Wick
aa03174e14 run: Sync the list of unset environment variables
More variables got added but the documentation was not updated.
2024-09-23 22:52:08 -03:00
Piotr Drąg
f5564f35b8 Update Polish translation 2024-09-20 17:35:59 +01:00
AsciiWolf
ec49509006 Update Czech translation 2024-09-20 17:34:49 +01:00
Pablo Correa Gómez
2368c6d056 dir: do not pass a GError to g_file_enumerate_children if ignoring it
We seem to have no interest in the specific error, as we are using it
locally just to "return". So there's no point in having the error in
the first place. In consequence, the error is only used in the loop
and can be declared locally to it.
2024-09-20 17:30:56 +01:00
Pablo Correa Gómez
0313df972a dir: search for repositories also under FLATPAK_BASEDIR
This is more compliant with FHS specification. Most notably, /etc
is not appropriate to hold distro configuration, which is a common
use for the remotes.d feature. It is better practice to put things
under /usr/share, and let the system administrator modify /etc to
their will, of course giving them priority.

Update documentation to reflect this change.

In the process, move to use g_build_filename
2024-09-20 17:30:56 +01:00
Pablo Correa Gómez
943690dba7 dir: split flatpakrepos dir scanning logic into a different function
This a preparatory commit for the follow-up changes, where we will be
looking at more directories.
2024-09-20 17:30:56 +01:00
Pablo Correa Gómez
076780c625 dir: remove unused variable passed to g_file_enumerator_iterate 2024-09-20 17:30:56 +01:00
Pablo Correa Gómez
9c0c9cb4fb dir: use a more clear distinction between some local variables
conf_dir vs. config_dir tell us nothing. conf_dir vs. conf_dir_str is
certainly more clear.
2024-09-20 17:30:56 +01:00
lumingzh
79abc960a6 update Chinese translation 2024-09-09 10:29:30 -03:00
Hubert Figuière
843a0eeec2 context: Fix a memory leak
Because flatpak_get_real_xdg_runtime_dir() return an allocated string
we have to return strduped.

Close flatpak/flatpak#5920

Signed-off-by: Hubert Figuière <hub@figuiere.net>
2024-09-07 18:11:31 -05:00
Kalev Lember
dce9ccb3d7 builtin-utils: Remove dead code branch and simplify
Commit f268f4a870 that changed
flatpak_resolve_matching_remotes() to automatically pick the remote if
it's the only matching one, missed an opportunity to clean up the rest
of the function.

Now that `remote_dir_pairs->len == 1` is handled as a first case, we can
drop the old, dead code that handled it differently, and simplify the
nested conditionals.
2024-09-05 16:54:49 -03:00