Closed tunix closed 9 months ago
I think this all looks good, the only question I have is __EGL_VENDOR_LIBRARY_DIRS. This might not be ideal for a classic snap, but it could be harmless, just something to think about.
I think this all looks good, the only question I have is __EGL_VENDOR_LIBRARY_DIRS. This might not be ideal for a classic snap, but it could be harmless, just something to think about.
I think I need this as I remember having issues on a computer with NVIDIA GPU. (intel+nvidia -- prime?)
Also, Sergio Schvezov says that changing LD_LIBRARY_PATH is the main cause of the problems. I never heard of RPATH nor RUNPATH. Reading stuff that explains it.
I've had a look through the rust issue tracker after some googling when I saw this PR. It looks like cargo and rust can't be configured to set an appropriate rpath just yet, but there's an issue over there to get it implemented. The alternative, in the meantime until that is sorted upstream, is to look into setting the rpath on the executable after it's been built. There's a utility in the archive called patchelf that can be added to build-packages
so that we can use it in an override-build
or an override-stage
block.
@diddledan - I replaced LD_LIBRARY_PATH modifications with your suggestion but I'm not exactly sure if I did it right. Unfortunetely it cannot find included libraries.
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libGL: using driver i915 for 7
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libGL: using driver i915 for 7
libGL: pci id for fd 7: 8086:9a49, driver iris
libGL: MESA-LOADER: failed to open /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri/iris_dri.so: libffi.so.7: cannot open shared object file: No such file or directory
libGL error: MESA-LOADER: failed to open iris (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
libGL error: failed to load driver: iris
libGL: using driver i915 for 7
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libGL: using driver i915 for 7
libGL: pci id for fd 7: 8086:9a49, driver iris
libGL: MESA-LOADER: failed to open /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri/iris_dri.so: libffi.so.7: cannot open shared object file: No such file or directory
libGL error: MESA-LOADER: failed to open iris (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
libGL error: failed to load driver: iris
libGL: MESA-LOADER: failed to open /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri/swrast_dri.so: libffi.so.7: cannot open shared object file: No such file or directory
libGL error: MESA-LOADER: failed to open swrast (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
libGL error: failed to load driver: swrast
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libEGL warning: MESA-LOADER: failed to open iris (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libEGL warning: MESA-LOADER: failed to open iris (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
libEGL warning: MESA-LOADER: failed to open swrast (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
libEGL warning: MESA-LOADER: failed to open swrast (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libEGL warning: MESA-LOADER: failed to open iris (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libEGL warning: MESA-LOADER: failed to open iris (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
libEGL warning: MESA-LOADER: failed to open swrast (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
libEGL warning: MESA-LOADER: failed to open swrast (search paths /snap/alacritty/x2/usr/lib/x86_64-linux-gnu/dri)
Created log file at "/tmp/Alacritty-102179.log"
[2021-07-17 15:44:24.820005643] [ERROR] [alacritty] Alacritty encountered an unrecoverable error:
Error creating GL context; Received multiple errors. Errors: `[OsError("eglInitialize failed"), OsError("GL context creation failed")]`
Sorry for a drive-by comment, but this looks like a job for https://github.com/wmww/snap-out
Sorry for a drive-by comment, but this looks like a job for https://github.com/wmww/snap-out
Thanks for the suggestion. I added snap-out as a part to the snap and tried adding it into the command chain and into the custom-wrapper script but unfortunetely neither worked. I always got:
libGL error: MESA-LOADER: failed to open iris (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open iris (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open swrast (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
libGL error: failed to load driver: swrast
libEGL warning: MESA-LOADER: failed to open iris (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
libEGL warning: MESA-LOADER: failed to open iris (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
libEGL warning: MESA-LOADER: failed to open swrast (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
libEGL warning: MESA-LOADER: failed to open swrast (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
libEGL warning: MESA-LOADER: failed to open iris (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
libEGL warning: MESA-LOADER: failed to open iris (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
libEGL warning: MESA-LOADER: failed to open swrast (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
libEGL warning: MESA-LOADER: failed to open swrast (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri)
Created log file at "/tmp/Alacritty-27172.log"
[2021-07-19 15:43:03.957869182] [ERROR] [alacritty] Alacritty encountered an unrecoverable error:
Error creating GL context; Received multiple errors. Errors: `[OsError("eglInitialize failed"), OsError("GL context creation failed")]`
Pretty much every export that isn't restricted to alacritty itself is going to cause issues. The wrapper scripts are setting environment variables that will cause breakage seen above.
I'd suggest narrowing down the variables to the minimum required (I think I had decent luck with just the two GL vars https://github.com/cjp256/alacritty/blob/snap-core20/extra/linux/snap/snapcraft.yaml#L83), and then perhaps add a tiny patch to alacritty to unset the remainder once initialized.
I need to update my intel graphics system to hirsuite, but this works fine for my nvidia hirsuite (shorted out desktop-launch and custom wrapper, no patching of alacritty).
@cjp256 - i tried a lot of different things but none of them have worked. i looked at your snapcraft.yml, removed custom-wrapper, left just the env vars you defined, removed some dependencies etc. And now I get this:
LIBGL_DEBUG=verbose alacritty ⏎ [ gui_fix ✖ ] ✹ ]
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libGL: using driver i915 for 7
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libGL: using driver i915 for 7
libGL: pci id for fd 7: 8086:9a49, driver iris
libGL: MESA-LOADER: failed to open /snap/alacritty/x1/usr/lib/x86_64-linux-gnu/dri/iris_dri.so: libffi.so.7: cannot open shared object file: No such file or directory
libGL error: MESA-LOADER: failed to open iris (search paths /snap/alacritty/x1/usr/lib/x86_64-linux-gnu/dri)
libGL error: failed to load driver: iris
libGL: using driver i915 for 7
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /home/tunix/.drirc: No such file or directory.
libGL: using driver i915 for 7
libGL: pci id for fd 7: 8086:9a49, driver iris
libGL: MESA-LOADER: failed to open /snap/alacritty/x1/usr/lib/x86_64-linux-gnu/dri/iris_dri.so: libffi.so.7: cannot open shared object file: No such file or directory
libGL error: MESA-LOADER: failed to open iris (search paths /snap/alacritty/x1/usr/lib/x86_64-linux-gnu/dri)
libGL error: failed to load driver: iris
libGL: MESA-LOADER: failed to open /snap/alacritty/x1/usr/lib/x86_64-linux-gnu/dri/swrast_dri.so: libffi.so.7: cannot open shared object file: No such file or directory
libGL error: MESA-LOADER: failed to open swrast (search paths /snap/alacritty/x1/usr/lib/x86_64-linux-gnu/dri)
libGL error: failed to load driver: swrast
Created log file at "/tmp/Alacritty-106114.log"
[2021-08-03 11:05:18.878101158] [ERROR] [alacritty] Alacritty encountered an unrecoverable error:
Error creating GL context; Received multiple errors. Errors: `[OsError("Could not create EGL display object"), OsError("GL context creation failed")]`
libffi is included within the snap as it seems to be required for transparency but it cannot find it unless I pass some other env vars to specify where to look for it.
Also I probably will need to add back the custom wrapper because alacritty supports multiple archs and I couldn't find a proper way of constructing the triplet w/o it.
Btw, I found out that if I patchelf alacritty binary during staging, it somehow reverts back all modifications during priming. (checking via readelf at both staging and priming stages: readelf /path/to/part/and/alacritty | grep RPATH
) So I applied patchelf at the priming stage. (you can check the code that is currently commited into the branch) but it segfaults right away. :(
(This is just another thing I tried aside from the things I tried in above comment)
So I applied patchelf at the priming stage. (you can check the code that is currently commited into the branch) but it segfaults right away
I'm not entirely clear which binaries you experimented with patching, but some lead directly to problems. E.g. mesa's dri
directory content breaks because stuff gets stripped in the process (C.f. https://github.com/MirServer/egmde-snap/blob/78f0dbcc02a56c6a656ca496a6165cf8a527a8e2/snap/snapcraft.yaml#L108)
@AlanGriffiths - please check this line. Within that block, I tried to change certain parts of the binary to look for libraries within the snap itself and not to the host system. And this is only done for alacritty binary. For GL libraries, I added no-patchelf
at line 30.
please check this line
If I read that correctly, you should drop :/snap/alacritty/current/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/dri
- mesa will crash if you mess with those binaries.
please check this line
If I read that correctly, you should drop
:/snap/alacritty/current/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/dri
- mesa will crash if you mess with those binaries.
As far as I understand, that line replaces RPATH within the binary so that it'll search for GL libraries inside the snap. To my understanding, it should have nothing to do with patching GL libraries in that path. Am I wrong?
Am I wrong?
No I am. Sorry. But it still shouldn't be needed. These libs should be found via __EGL_VENDOR_LIBRARY_DIRS
, not rpath
I pushed latest changes but still can't make it work. Removed most of the libraries I added and removed most of the env vars. Removed wrapper as well to simplify. The GL drivers are looking for libffi (probably for transparency).
Unfortunetely I don't know how to patch alacritty. I tried snap-out before but don't know if I've done it properly because it didn't work as well. I don't know what else to try.
Unfortunetely I don't know how to patch alacritty. I tried snap-out before but don't know if I've done it properly because it didn't work as well. I don't know what else to try.
Alacritty links to the mesa version from the snap and that needs different environment variables than the native mesa version used by the applications it launches. So at the point where it executes applications alacritty needs to restore the session environment.
Unless it already has that capability, this cannot work without patching alacritty.
Hi there, I just read the whole thread but still don't understand how to fix the issue. Is the current release simply not usable? I am on Ubuntu 22.04 using alacritty 0.8.0 from 2021-06-17, but https://github.com/alacritty/alacritty/issues/5064 indicates that the issue with the snap release already existed in earlier releases. Thanks for this app and for your help!
when launching applications any environment variables set must be restored to what the host environment needs
I think it's more fundamental than that. When launching a third-party application that is not part of Alacritty, the entire execution environment should be restored to what that third-party application needs. Environment variables are just the most immediately-visible thing, but there are many other aspects of the execution environment, and each new version of Linux adds more, such as AppArmor context, resource limits, the capability bounding set, and various inheritable process properties like the ones set by PR_SET_CHILD_SUBREAPER
and PR_SET_NO_NEW_PRIVS
.
In practice, restoring the execution environment is not actually possible, because many of these process properties are one-way: for example after PR_SET_NO_NEW_PRIVS
has been set, it is intentionally not possible to unset it again.
The other way to get a similar result is to launch applications via an IPC request, so that the terminal emulator itself is running inside the sandbox, but the interactive shell and any third-party applications that it launches are unconfined. This is how terminal emulators packaged as Flatpak apps usually work: they are given the necessary permissions flags to be able to send a request to org.freedesktop.Flatpak.SessionHelper.HostCommand()
and ask it to run an unconfined shell for them, forwarding input and output to/from the terminal.
Obviously, that's a big sandbox hole: it's arbitrary code execution on the host. However, for terminal emulators, I don't really see any alternative: the whole point of a terminal emulator is to use it to run arbitrary third-party commands, and if a terminal emulator packaged with Snap or Flatpak can't do that, then it can't do its job.
This appears to have caused at least https://github.com/ValveSoftware/steam-for-linux/issues/9195 and one of several of the reports in https://github.com/flatpak/flatpak/issues/1207. I'm confident that it will also be causing similar issue reports in other random applications that I'm not aware of. Sorry, but expecting the maintainers of all third-party projects to diagnose and support end-user issue reports from a Snap-packaged version of Alacritty that gives them an incomplete or broken execution environment is just not reasonable.
If launching apps via an IPC request is not possible in the Snap ecosystem, then something like https://github.com/wmww/snap-out seems like the least-bad alternative.
Is the current release simply not usable?
As a maintainer of third-party software, I would have to say: yes.
Wondering if this is still an issue with release v0.13.1 via #10?
I'm not seeing anything come up in the verbose logs:
Created log file at "/tmp/Alacritty-371654.log"
[0.000000949s] [INFO ] [alacritty] Welcome to Alacritty
[0.000976414s] [INFO ] [alacritty] Version 0.13.1 (fe2a3c56)
[0.001001692s] [INFO ] [alacritty] Running on Wayland
[0.001103342s] [INFO ] [alacritty_config_derive] No config file found; using default
[0.087327165s] [INFO ] [alacritty] Using EGL 1.5
[0.087411676s] [DEBUG] [alacritty] Picked GL Config:
buffer_type: Some(Rgb { r_size: 8, g_size: 8, b_size: 8 })
alpha_size: 8
num_samples: 0
hardware_accelerated: true
supports_transparency: Some(true)
config_api: Api(OPENGL | GLES1 | GLES2 | GLES3)
srgb_capable: true
[0.278319726s] [DEBUG] [crossfont] Loaded Face Face { ft_face: Font Face: Medium, load_flags: TARGET_LIGHT, render_mode: "Normal", lcd_filter: 1 }
[0.365647976s] [INFO ] [alacritty] Window scale factor: 1
[0.375554178s] [DEBUG] [alacritty] Loading "monospace" font
[0.377207949s] [DEBUG] [crossfont] Loaded Face Face { ft_face: Font Face: Book, load_flags: TARGET_LIGHT, render_mode: "Normal", lcd_filter: 1 }
[0.379486800s] [DEBUG] [crossfont] Loaded Face Face { ft_face: Font Face: Bold, load_flags: TARGET_LIGHT, render_mode: "Normal", lcd_filter: 1 }
[0.381681705s] [DEBUG] [crossfont] Loaded Face Face { ft_face: Font Face: Book, load_flags: NO_BITMAP | TARGET_LIGHT, render_mode: "Normal", lcd_filter: 1 }
[0.383901483s] [DEBUG] [crossfont] Loaded Face Face { ft_face: Font Face: Bold, load_flags: NO_BITMAP | TARGET_LIGHT, render_mode: "Normal", lcd_filter: 1 }
[0.440237603s] [INFO ] [alacritty] Running on AMD Radeon RX 560 Series (polaris11, LLVM 15.0.7, DRM 3.56, 6.5.0-18-generic)
[0.440283506s] [INFO ] [alacritty] OpenGL version 4.6 (Core Profile) Mesa 23.2.1-1ubuntu3.1~22.04.2, shader_version 4.60
[0.440298941s] [INFO ] [alacritty] Using OpenGL 3.3 renderer
[0.448080636s] [DEBUG] [alacritty] Enabled debug logging for OpenGL
[0.463776665s] [DEBUG] [alacritty] Filling glyph cache with common glyphs
[0.476854823s] [INFO ] [alacritty] Cell size: 9 x 18
[0.476904524s] [INFO ] [alacritty] Padding: 0 x 0
[0.476914908s] [INFO ] [alacritty] Width: 800, Height: 600
[0.476957635s] [INFO ] [alacritty] PTY dimensions: 33 x 88
[0.487868528s] [INFO ] [alacritty] Initialisation complete
[33.541744778s] [INFO ] [alacritty] Goodbye
Deleted log file at "/tmp/Alacritty-371654.log"
Indeed, I can't repro this issue at all using the latest revision. I just spent ~15mins or so launching as many different things as I could on a couple of different versions of Ubuntu. I'll close this for now, we can reopen if needed. Thanks for the prompt!
Fixes #19
Fixes
Issues (WIP)
I'm still working on this to understand why X applications don't work. They work with
sudo
btw.