Repository: spack/spack

Issue:
"No satisfying compiler available is compatible with a satisfying os", OpenSuse Tumbleweed
### Steps to reproduce

Although I've tried to setup Spack before with the advised instructions, I just did again with a fresh checkout so see if anything had changed.
```
git clone -c feature.manyFiles=true https://github.com/spack/spack.git
cd spack/bin
./spack install libelf
```

### Error message

The output of `./spack install libelf` is:
```
==> Bootstrapping clingo from pre-built binaries
==> Bootstrapping clingo from sources
[+] /usr (external bison-3.8.2-56ovsszgkcpnuzwzgntdmohdi3366vhd)
[+] /usr (external cmake-3.22.2-eu4vcnjbksf2bvlizbavl2cw423au5u2)
[+] /home/brent/venv (external python-3.10-nxlxbijy2d757frxkekjc2tvaojogamz)
[+] /home/brent/.spack/bootstrap/store/linux-opensuse_tumbleweed20220207-x86_64/gcc-11.2.1/re2c-2.2-gskxehtk4hikpycwoyurcpxqiwi3f4j6
==> Installing clingo-bootstrap-spack-j7zgz22q2dhsekvddoi5x6g47qgy76bn
==> No binary for clingo-bootstrap-spack-j7zgz22q2dhsekvddoi5x6g47qgy76bn found: installing from source
==> Ran patch() for clingo-bootstrap
==> clingo-bootstrap: Executing phase: 'cmake'
==> clingo-bootstrap: Executing phase: 'build'
==> clingo-bootstrap: Executing phase: 'install'
==> clingo-bootstrap: Successfully installed clingo-bootstrap-spack-j7zgz22q2dhsekvddoi5x6g47qgy76bn
  Fetch: 7.44s.  Build: 1m 20.69s.  Total: 1m 28.13s.
[+] /home/brent/.spack/bootstrap/store/linux-opensuse_tumbleweed20220207-x86_64/gcc-11.2.1/clingo-bootstrap-spack-j7zgz22q2dhsekvddoi5x6g47qgy76bn
==> Error: libelf is unsatisfiable, errors are:
  No satisfying compiler available is compatible with a satisfying os

    To see full clingo unsat cores, re-run with `spack --show-cores=full`
    For full, subset-minimal unsat cores, re-run with `spack --show-cores=minimized
    Warning: This may take (up to) hours for some specs
```
The error, `No satisfying compiler available is compatible with a satisfying os`, does not occur in the bug tracker. I actually have current compilers available (see next point) and my system is pretty current (Opensuse Tumbleweed recently updated).

### Information on your system

`./spack debug report`:
```
* **Spack:** 0.17.1-1167-2c56cbd2bc
* **Python:** 3.10.2
* **Platform:** linux-opensuse_tumbleweed20220207-skylake
* **Concretizer:** clingo
```
`./spack compilers`:
```
==> Available compilers
-- clang opensuse_tumbleweed20220101-x86_64 ---------------------
clang@13.0.0  clang@12.0.1

-- gcc opensuse_tumbleweed20220101-x86_64 -----------------------
gcc@11.2.1  gcc@10.3.1
```
The following command fixes this problem:
`./spack compiler find`

### General information

- [X] I have run `spack debug report` and reported the version of Spack/Python/Platform
- [X] I have searched the issues of this repo and believe this is not a duplicate
- [X] I have run the failing commands in debug mode and reported the output


Discussion:

Resolving patch:
diff --git a/lib/spack/spack/operating_systems/linux_distro.py b/lib/spack/spack/operating_systems/linux_distro.py
--- a/lib/spack/spack/operating_systems/linux_distro.py
+++ b/lib/spack/spack/operating_systems/linux_distro.py
@@ -4,6 +4,7 @@
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
 import platform as py_platform
 import re
+from subprocess import check_output
 
 from spack.version import Version
 
@@ -51,6 +52,17 @@ def __init__(self):
 
         if 'ubuntu' in distname:
             version = '.'.join(version[0:2])
+        # openSUSE Tumbleweed is a rolling release which can change
+        # more than once in a week, so set version to tumbleweed$GLIBVERS
+        elif 'opensuse-tumbleweed' in distname or 'opensusetumbleweed' in distname:
+            distname = 'opensuse'
+            output = check_output(["ldd", "--version"]).decode()
+            libcvers = re.findall(r'ldd \(GNU libc\) (.*)', output)
+            if len(libcvers) == 1:
+                version = 'tumbleweed' + libcvers[0]
+            else:
+                version = 'tumbleweed' + version[0]
+
         else:
             version = version[0]
 


Test patch: