- Mar 04, 2020
-
-
Simon McVittie authored
wrap.c is getting rather large, so the idea is that this will encapsulate everything related to swapping in a different /usr. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
- Feb 26, 2020
-
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
We want all the libQUAL directories, including lib32 and lib64 (and in principle also libx32, libn32 etc.), but we specifically don't care about libexec. Real systems don't usually symlink /usr/libexec into the root directory. If we create a /libexec symlink, the only effect it might have is that game developers start relying on it, which we certainly don't want. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
libdrm reads /usr/share/libdrm/amdgpu.ids to find information about AMD GPUs. So if we are using libdrm.so.2 from the host we also mount its libdrm folder. Signed-off-by:
Ludovico de Nittis <ludovico.denittis@collabora.com>
-
- Feb 17, 2020
-
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
In the case where we bind-mounted the entire root filesystem, since commit 77f3e3d7 we mounted it over the top of API filesystems like /dev, /proc, /sys. This results in /dev being mounted with the nodev option, which breaks a lot of normal functionality like /dev/null. Some games can work despite this, but only badly (Floating Point launches with indirect or software rendering and a horrible framerate), and the xterm activated by PRESSURE_VESSEL_SHELL=instead fails to launch because it can't create a pseudo-terminal. Adjust the order to get this right. Fixes: 77f3e3d7 "wrap: Make sure the intermediate bwrap object can be used as a base" Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
- Feb 10, 2020
-
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
It's a little confusing if we run p-v-wrap --test --verbose, which logs: pressure-vessel-wrap: Original argv: ... pressure-vessel-wrap: Checking for bwrap... and then exits. If we add one last line pressure-vessel-wrap: OK (/usr/bin/bwrap) then the result is clearer. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
In some places we said exit status, but meant wait status (the status from waitpid() or similar, which encodes whether the process exited normally, the exit status if yes, the fatal signal if any, and whether a core was dumped). Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
This lets us import files from Flatpak that explicitly #include "config.h" as-is, reducing avoidable delta. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
- Feb 03, 2020
-
-
Jeremy Whiting authored
When --test is used check for bubble wrap executable and return 0 if found, 1 otherwise.
-
- Jan 23, 2020
-
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Taken from Flatpak. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
This syncs us up with how Flatpak does it. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
This makes us match how Flatpak includes it, which makes our versions of Flatpak files more similar. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Taken from Flatpak. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
This keeps us more in sync with the equivalent code in Flatpak, helping us to merge fixes from there. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
- Jan 06, 2020
-
-
Simon McVittie authored
Non-OFD locks don't propagate across fork(), and bwrap needs to clone() itself (which behaves like fork() in this respect) to separate itself into a parent outside the container and a child inside the container. This change adds a weak dependency on Linux 3.15. If we run on an older version, everything should still *work*, but there will be a short period of time during which we have already decided to use the runtime, but it is not locked (and in particular not protected from deletion). Fixes: 959fd338 "wrap: Take out a lock on the container's runtime for the duration" Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
These more modern locks, introduced in Linux 3.15 and not yet included in POSIX, propagate across fork(), dup(), fd-passing etc. the way you'd expect: as long as at least one copy of the inherited or fd-passed file descriptor remains open, the lock remains held. This allows us to pass a lock fd to a child process across bwrap's fork-and-exec the way we were already trying to, and have it actually work. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
This is redundant with us passing the fd to be held by pressure-vessel-with-lock, and it causes bwrap to produce the wrong exit status (see https://github.com/containers/bubblewrap/issues/336 and https://github.com/containers/bubblewrap/pull/325 ). It should have been removed when the "pass the lock fd" code path was added. Fixes: 959fd338 "wrap: Take out a lock on the container's runtime for the duration" Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
- Dec 13, 2019
-
-
Simon McVittie authored
When we're using a non-trivial runtime, we need to make pressure-vessel-with-lock available to the container. Previously, if your pressure-vessel installation was visible via your home directory (if shared), via $(realpath ~/.steam/steam), or via the current working directory at the time of running pressure-vessel-wrap, then it would exist in the container at the same path as outside the container, so this would work. However, if you have installed it in an alternative Steam library such as /media/big/library, none of these mount points would make it visible and bwrap would fail to run it. Circumvent this by mounting the relocatable pressure-vessel prefix on /run/pressure-vessel, which lets us run it via that path. Bug: https://github.com/ValveSoftware/steam-runtime/issues/204 Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
- Nov 14, 2019
-
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
We can use this in the SteamLinuxRuntime depot to deploy and garbage-collect runtimes stored in tarballs. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
If we upgrade from runtime 0.20191024.0 to 0.20191108.0 while an app or game is still running under runtime 0.20191024.0, then deleting the app or game's shared libraries out from under it will probably break it. Flatpak solves this problem with a read/write lock on the file `files/.ref` - for runtimes this is `/usr/.ref` in the container. Each instance of `flatpak run` takes a read-lock on that file. Any number of processes can hold a read-lock at the same time. Before a package-manager-style operation like `flatpak uninstall` does anything destructive to a runtime, it takes a write-lock, which only succeeds if there are currently no read- or write-locks. Depending on the operation, the lock is either taken directly or by asking bubblewrap to do it. We'll use the same scheme. Different families of locking APIs interact unpredictably, so it's important that we use the same locking API as bubblewrap, namely POSIX byte-range (record) advisory locks via fcntl F_SETLK. In particular, this means flock(1) and flock(2) are not going to help us: they use POSIX file-level advisory locks. One difference between our locking and flatpak's is that we support runtimes that are not "merged /usr". In this case, we could either take a lock on files/.ref (/.ref in the container) or on files/usr/.ref (/usr/.ref in the container). I've chosen to do the former here, so that it's always files/.ref. It doesn't matter, as long as we're consistent. (For apps the lock file is `/app/.ref` and for extensions it's `$mountpoint/.ref`, but pressure-vessel doesn't have an equivalent of Flatpak apps or extensions yet.) This version is only a partial solution. We can't use bwrap --lock-file or bwrap --sync-fd without also using --unshare-pid, which breaks gameoverlayrenderer.so; so we do the next best thing, by leaking the lock fd to the bubblewrap process, which will leak it to the game's main process. This won't work if the game forks background processes, but it's good enough for a straightforward execve() chain. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
This is inspired by `ostree --version` and `docker version`. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Instead of {0, 0}, represent the absence of a short option with '\0' and the absence of flags with G_OPTION_FLAG_NONE. To support older GLib, provide a compatibility definition for the latter. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
- Nov 12, 2019
-
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Detected by scan-build. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
This ensures that we include it in every translation unit. Rename it to _pressure-vessel-config.h to avoid accidentally including the wrong config.h in the presence of submodules. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
- Nov 11, 2019
-
-
Simon McVittie authored
If opt_runtime is NULL, it makes no sense to look at what happens if it is dereferenced. The intention here was to treat both NULL and the empty string as no runtime. Detected by clang scan-build. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
Simon McVittie authored
This fixes failure to run with --unshare-home on systems where the Steam internal beta has never been used. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
- Sep 27, 2019
-
-
Simon McVittie authored
The NVIDIA proprietary EGL, GLES and Vulkan ICDs depend on libnvidia-eglcore and libnvidia-glvkspirv, but do not have DT_NEEDED entries for them (presumably they dlopen() them instead). capsule-capture-libs can only follow DT_NEEDED entries, so we have to special-case those hidden dependencies. Ideally we'd have a syntax for "libnvidia-*.so.* except libnvidia-gtk*", but currently we don't, so just include all the known libraries. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-
- Sep 26, 2019
-
-
Simon McVittie authored
Otherwise, we can't rely on supported GPUs working inside the container. Signed-off-by:
Simon McVittie <smcv@collabora.com>
-