Comment 10 for bug 1863642

Revision history for this message
scx (the-scx) wrote : Re: Snap package of cantor doesn't work on RHEL 7

> Is that something that KDE can address internally by detecting ENOSYS and falling back to another option?
Yes, it should be possible for them to force disable renameat2 (requires Linux 3.16), getentropy (requires Linux 3.17), and statx (requires Linux 4.11).
https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/minimum-linux_p.h?id=7148dfc67ff20c1c625d203aa47b574b3aaa5db1#n77
https://phabricator.kde.org/R257:a029f2957e947f6e32fe8a595edb0ac553654e90

Then it would require Linux 2.6.28 [1] or rather Linux 3.2 [2a][2b][2c], since you use glibc 2.27, which is still fine, because both EL7 and Ubuntu 14.04 LTS have newer kernels:
- RHEL 7: Linux 3.10
- Ubuntu 14.04 LTS: Linux 3.13
Snaps support RHEL since version 7.6, Ubuntu since version 14.04, and Debian since version 9.

[1]
https://github.com/flathub/flathub/issues/805#issuecomment-453004369
https://bugs.kde.org/show_bug.cgi?id=403042#c2

[2a]
https://www.sourceware.org/ml/libc-alpha/2016-08/msg00212.html
Originally posted by Adhemerval Zanella:
> The GNU C Library version 2.24 is now available
> (...)
> The minimum Linux kernel version that this version of the GNU C Library can be used with is 3.2, except on i[4567]86 and x86_64, where Linux kernel version 2.6.32 or later suffices (on architectures that already required kernel versions more recent than 3.2, those requirements remain unchanged).

[2b]
https://sourceware.org/ml/libc-alpha/2017-08/msg00010.html
Originally posted by Siddhesh Poyarekar:
> The GNU C Library version 2.26 is now available
> (...)
> Linux kernel 3.2 or later is required at runtime, on all architectures supported by that kernel. (This is a change from version 2.25 only for x86-32 and x86-64.)

[2c]
https://paste.ubuntu.com/p/mYn78gPGGf/

Fortunately, glibc 2.30 from Ubuntu 19.10 still requires Linux 3.2.
http://mirrors.kernel.org/ubuntu/pool/main/g/glibc/libc6_2.30-0ubuntu3_amd64.deb
```
$ find lib/x86_64-linux-gnu/ -print0 2>/dev/null | xargs -0 -I{} file '{}' | grep -Z 'for GNU/Linux ' | sort -z -fuV
lib/x86_64-linux-gnu/libnss_nisplus-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=d559cd4fecb3e9ec6034929433232fe9cf9bf2df, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libcrypt-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=74cd3b111e7f7dccd596228a37b5ae1d3e6a794a, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libresolv-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=ff5d93702a4017d41249ce54a6c14f813a8db423, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libpcprofile.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=ed69d66144b257737a64127896e95180f6815e72, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libmemusage.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=23d60bb0613a7cb0563f64807166a54c554de0b6, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libc-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), BuildID[sha1]=75e3e2d9596aae251330ae7ef3f91a847fc62641, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libSegFault.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=3bf8ae72550e3c53e3d9116562fc56979a5a4081, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/librt-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=d0f294e039c6e5de8a1e6ea04dba789ff95ae218, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libBrokenLocale-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=f4991f571357cf4afb3b6ef9b6d54d72445f0991, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libnsl-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=83e1504c4089fd82229005d650e55b934a93c0ec, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libnss_files-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=8633f0eda56e18c053586bb832b9277eb22a00da, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libutil-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=d1827de3df144706cee2ca4ef03c74faf50061bc, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libm-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=52276261b9ecfdbda554a1986593638de377966a, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libanl-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=d45ab76d941abcf989069496a17633619a477b76, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libmvec-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID[sha1]=47f7af5db1f6ed23d19a9d11d1d4240c63fecf4b, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libpthread-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), BuildID[sha1]=7c74e0d0efaacdcf08ab6c3c171534c89d9f637d, for GNU/Linux 3.2.0, not stripped
lib/x86_64-linux-gnu/libnss_hesiod-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=38f57f4d2d8e56540901c6fe6b989d07af9756d7, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libnss_dns-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=8f23a6e00ef8cfcbfe09270b19fc118c5e124fd0, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libthread_db-1.0.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0f96c3f70a8a92c99c035592a8c499daddebff8e, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libnss_nis-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=199d51b3cea58e6d8555a464cb6c42de9e8ae1da, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libdl-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=570a2ae18adb1b696a7097f9fc3049c5d56c4f73, for GNU/Linux 3.2.0, stripped
lib/x86_64-linux-gnu/libnss_compat-2.30.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=fcbe255db86c7acbef90fcdde675a67d80adf432, for GNU/Linux 3.2.0, stripped
```
Let's hope this won't change in Ubuntu 20.04 LTS.

> Is there something we can improve on the snapd side?
When we hit a similar problem last year in flatpak, I proposed to add an option to determine kernel requirements.
https://github.com/flatpak/flatpak/issues/2551#issue-397366787

The flatpak creator pointed out that we should check rather for symbols/features, because some kernels may be highly modified, as it is in EL.
https://github.com/flatpak/flatpak/issues/2551#issuecomment-456002791
> Kernel requirements are tricky things. Generally the dependency is not on a specific version but on some feature/behaviour, and those are often backported to enterprise kernel without bumping the kernel version.

You can also perform some additional verification for runtimes and apps, to make sure that they won't require Linux > 3.2. Maybe CI that runs apps (and runtimes) on old kernels would help us to prevent problems like this in the future. This was originally proposed by Matthias Clasen from Fedora Silverblue.

Anyway, without additional checks, we can hit this problem again in the future (e.g. core20, core22, core24, etc).