salt icon indicating copy to clipboard operation
salt copied to clipboard

[BUG] Regression in 3006.11 vs. 3006.10 - 'augeas.change' was not found in SLS

Open doc75 opened this issue 7 months ago • 5 comments

Description When running a state augeas.change with salt-minion 3006.11 it fails with this message:

ID: <redacted>
Function: augeas.change
Result: False
Comment: State 'augeas.change' was not found in SLS '<redacted>'
Reason: 'augeas.change' is not available.

The exact same configuration in working fine with 3006.10 (salt master is still in 3006.11 in this case) I noticed also that the latest version of 3007 is also having the issue (the first versions of 3007 are working fine).

Setup

  • [x] on-prem machine
  • [ ] VM (Virtualbox, KVM, etc. please specify)
  • [ ] VM running on a cloud service, please be explicit and add details
  • [ ] container (Kubernetes, Docker, containerd, etc. please specify)
  • [ ] or a combination, please be explicit
  • [ ] jails if it is FreeBSD
  • [ ] classic packaging
  • [x] onedir packaging
  • [ ] used bootstrap to install

Steps to Reproduce the behavior

Be sure to install the python augeas module with this command line: salt-pip install python-augeas (with sudo in front of it in my case)

Example of state to reproduce the issue (any augeas.change would reproduce the issue):

<redacted>:
  augeas.change:
    - lens: Hosts.lns
    - context: /files/etc/hosts
    - changes: 
      - set 100/ipaddr '192.168.0.44'
      - set 100/canonical 'printer'
    - unless: grep '192.168.0.44' /etc/hosts

Expected behavior augeas.change should be found and outpout something like: Name: <redacted> - Function: augeas.change - Result: Clean - Started: 12:20:54.014861 - Duration: 16.048 ms

Screenshots N/A

Versions Report

salt --versions-report

Version 3006.11 (failing)

Salt Version:
          Salt: 3006.11
 
Python Version:
        Python: 3.10.17 (main, May 11 2025, 04:07:13) [GCC 11.2.0]
 
Dependency Versions:
          cffi: 1.14.6
      cherrypy: 18.6.1
  cryptography: 42.0.5
      dateutil: 2.8.1
     docker-py: Not Installed
         gitdb: Not Installed
     gitpython: Not Installed
        Jinja2: 3.1.6
       libgit2: Not Installed
  looseversion: 1.0.2
      M2Crypto: Not Installed
          Mako: Not Installed
       msgpack: 1.0.2
  msgpack-pure: Not Installed
  mysql-python: Not Installed
     packaging: 22.0
     pycparser: 2.21
      pycrypto: Not Installed
  pycryptodome: 3.19.1
        pygit2: Not Installed
  python-gnupg: 0.4.8
        PyYAML: 6.0.1
         PyZMQ: 23.2.0
        relenv: 0.19.2
         smmap: Not Installed
       timelib: 0.2.4
       Tornado: 4.5.3
           ZMQ: 4.3.4
 
System Versions:
          dist: debian 12 bookworm
        locale: utf-8
       machine: x86_64
       release: 6.1.0-37-amd64
        system: Linux
       version: Debian GNU/Linux 12 bookworm

Version 3006.10 (working fine)

Salt Version:
          Salt: 3006.10
 
Python Version:
        Python: 3.10.16 (main, Mar  6 2025, 02:23:15) [GCC 11.2.0]
 
Dependency Versions:
          cffi: 1.14.6
      cherrypy: 18.6.1
  cryptography: 42.0.5
      dateutil: 2.8.1
     docker-py: Not Installed
         gitdb: Not Installed
     gitpython: Not Installed
        Jinja2: 3.1.6
       libgit2: Not Installed
  looseversion: 1.0.2
      M2Crypto: Not Installed
          Mako: Not Installed
       msgpack: 1.0.2
  msgpack-pure: Not Installed
  mysql-python: Not Installed
     packaging: 22.0
     pycparser: 2.21
      pycrypto: Not Installed
  pycryptodome: 3.19.1
        pygit2: Not Installed
  python-gnupg: 0.4.8
        PyYAML: 6.0.1
         PyZMQ: 23.2.0
        relenv: 0.18.1
         smmap: Not Installed
       timelib: 0.2.4
       Tornado: 4.5.3
           ZMQ: 4.3.4
 
System Versions:
          dist: debian 12 bookworm
        locale: utf-8
       machine: x86_64
       release: 6.1.0-37-amd64
        system: Linux
       version: Debian GNU/Linux 12 bookworm

Additional context Add any other context about the problem here.

doc75 avatar Jun 08 '25 13:06 doc75

The actual error is this:

# /opt/saltstack/salt/bin/python3 -c "from augeas import Augeas"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/saltstack/salt/extras-3.10/augeas/__init__.py", line 35, in <module>
    from _augeas import ffi, lib
ImportError: /opt/saltstack/salt/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libicuuc.so.74)

Looks like with the 3006.11 packages, also relenv was updated from 0.18.1 to 0.19.2. @dwoz Maybe this issue is about the changes around libstdc++ in relenv 0.19.0 ?: https://github.com/saltstack/relenv/blob/8bbacbe90525bdbe66d0d9c5f1548d9efec3de60/CHANGELOG.md?plain=1#L29-L32

hurzhurz avatar Jun 12 '25 10:06 hurzhurz

Result of /opt/saltstack/salt/bin/python3 -c "from augeas import Augeas"

on 3006.10

<no output produced>

on 3006.12


Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/saltstack/salt/extras-3.10/augeas/__init__.py", line 35, in <module>
    from augeas.ffi import ffi, lib
  File "/opt/saltstack/salt/extras-3.10/augeas/ffi.py", line 47, in <module>
    lib = ffi.dlopen("augeas")
  File "/opt/saltstack/salt/lib/python3.10/site-packages/cffi/api.py", line 150, in dlopen
    lib, function_cache = _make_ffi_library(self, name, flags)
  File "/opt/saltstack/salt/lib/python3.10/site-packages/cffi/api.py", line 832, in _make_ffi_library
    backendlib = _load_backend_lib(backend, libname, flags)
  File "/opt/saltstack/salt/lib/python3.10/site-packages/cffi/api.py", line 828, in _load_backend_lib
    return backend.load_library(path, flags)
OSError: cannot load library 'libaugeas.so.0': /opt/saltstack/salt/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libicuuc.so.74)

doc75 avatar Jun 13 '25 20:06 doc75

How is python-augeas being installed?

dwoz avatar Jun 14 '25 08:06 dwoz

How is python-augeas being installed?

with the command salt-pip install python-augeas

doc75 avatar Jun 14 '25 08:06 doc75

@doc75

Does installing with this command RELENV_BUILDENV=1 salt-pip install python-augeas resolve the issue?

dwoz avatar Jun 16 '25 20:06 dwoz

I first uninstalled it with salt-pip uninstall python-augeas

Then reinstall it with RELENV_BUILDENV=1 salt-pip install python-augeas

I have the exact same message reported by @hurzhurz :

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/saltstack/salt/extras-3.10/augeas/__init__.py", line 35, in <module>
    from _augeas import ffi, lib
ImportError: /opt/saltstack/salt/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libicuuc.so.74)

doc75 avatar Jun 16 '25 21:06 doc75

@doc75 The reinstall worked (and had the same result) because you already head a built wheel in the cache, RELENV_BUILDENV had no effect.

@dwoz installing/building with RELENV_BUILDENV=1 doesn't work because python-augeas requires some system libs (libaugeas, libicu, ...?) that it doesn't find this way:

# RELENV_BUILDENV=1 salt-pip install --no-cache-dir python-augeas

Collecting python-augeas
  Downloading python-augeas-1.2.0.tar.gz (99 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 99.4/99.4 kB 3.6 MB/s eta 0:00:00
  Preparing metadata (setup.py) ... done
Requirement already satisfied: cffi>=1.0.0 in /opt/saltstack/salt/lib/python3.10/site-packages (from python-augeas) (1.14.6)
Requirement already satisfied: pycparser in /opt/saltstack/salt/lib/python3.10/site-packages (from cffi>=1.0.0->python-augeas) (2.21)
Building wheels for collected packages: python-augeas
  Building wheel for python-augeas (setup.py) ... error
  error: subprocess-exited-with-error

  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [30 lines of output]
      /opt/saltstack/salt/lib/python3.10/site-packages/setuptools/__init__.py:80: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated.
      !!

              ********************************************************************************
              Requirements should be satisfied by a PEP 517 installer.
              If you are using pip, you can try `pip install --use-pep517`.
              ********************************************************************************

      !!
        dist.fetch_build_eggs(dist.setup_requires)
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-cpython-310
      creating build/lib.linux-x86_64-cpython-310/augeas
      copying augeas/ffi.py -> build/lib.linux-x86_64-cpython-310/augeas
      copying augeas/__init__.py -> build/lib.linux-x86_64-cpython-310/augeas
      running build_ext
      generating cffi module 'build/temp.linux-x86_64-cpython-310/_augeas.c'
      creating build/temp.linux-x86_64-cpython-310
      building '_augeas' extension
      creating build/temp.linux-x86_64-cpython-310/build
      creating build/temp.linux-x86_64-cpython-310/build/temp.linux-x86_64-cpython-310
      /root/.local/relenv/toolchain/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wno-coverage-mismatch -g -I/opt/saltstack/salt/include -I/opt/saltstack/salt/include/readline -I/opt/saltstack/salt/include/ncursesw -I/root/.local/relenv/toolchain/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/include -fPIC -I/usr/include/libxml2 -I/opt/saltstack/salt/include/python3.10 -I/opt/saltstack/salt/include -c build/temp.linux-x86_64-cpython-310/_augeas.c -o build/temp.linux-x86_64-cpython-310/build/temp.linux-x86_64-cpython-310/_augeas.o
      build/temp.linux-x86_64-cpython-310/_augeas.c:570:25: fatal error: augeas.h: No such file or directory
        570 |                #include <augeas.h>
            |                         ^~~~~~~~~~
      compilation terminated.
      error: command '/root/.local/relenv/toolchain/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc' failed with exit code 1
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for python-augeas
  Running setup.py clean for python-augeas
Failed to build python-augeas
ERROR: Could not build wheels for python-augeas, which is required to install pyproject.toml-based projects

[notice] A new release of pip is available: 23.3.2 -> 25.1.1
[notice] To update, run: /opt/saltstack/salt/bin/python3.10 -m pip install --upgrade pip

hurzhurz avatar Jun 17 '25 10:06 hurzhurz

@hurzhurz it seems that you are seeing my answer before I edited it 😢 Indeed I realized that I was missing gcc and libaugeas-dev. I added them and the install went fine, but then the error is still there (the same as the one you reported earlier by just doing the import.

Anything else I could test ?

doc75 avatar Jun 17 '25 11:06 doc75

@doc75 well, I got your unedited comment via email notification, but I was not referring to it.

I see when you first tried it with RELENV_BUILDENV=1 salt-pip install python-augeas, you got this error, correct?: error: command '/root/.local/relenv/toolchain/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc' failed: No such file or directory

That can be solved by: /opt/saltstack/salt/bin/relenv toolchain fetch But the error from my last comment, where it doesn't find augeas.h, will probably remain.

Important for testing: after salt-pip uninstall python-augeas also do salt-pip cache purge befor installing again

Without RELENV_BUILDENV=1, you need gcc and libaugeas-dev in your system for installation. And with it, they need to be in the relenv build environment. While gcc can be gathered by the mention fetch toolchain command, I don't know how to get libaugeas-dev in there.

@dwoz I noticed it works without RELENV_BUILDENV=1 under Ubuntu 25.04. But under Ubuntu 24.04, importing the installed modul fails with the error about libstdc++.so.6.

hurzhurz avatar Jun 17 '25 13:06 hurzhurz

Here is what I just did:

root@host ~ # /opt/saltstack/salt/bin/relenv toolchain fetch                                                                                                                                                                                                                                                              
Toolchain directory: /root/.local/relenv/toolchain                                                                                                            
Downloading https://packages.broadcom.com/artifactory/saltproject-generic/relenv/0.17.4/toolchain/x86_64/x86_64-linux-gnu.tar.xz -> /root/.local/relenv/toolchain/x86_64-linux-gnu.tar.xz

root@host ~ # salt-pip uninstall python-augeas                                                                                                                                                                                                                                                                            Found existing installation: python-augeas 1.2.0                                                                                                              
Uninstalling python-augeas-1.2.0:                                                                                                                             
  Would remove:                                                                                                                                               
    /opt/saltstack/salt/extras-3.10/_augeas.abi3.so                                                                                                           
    /opt/saltstack/salt/extras-3.10/augeas/*                                                                                                                  
    /opt/saltstack/salt/extras-3.10/python_augeas-1.2.0.dist-info/*
Proceed (Y/n)? y                                            
  Successfully uninstalled python-augeas-1.2.0                                                                                                                                                                                                                                                                              
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what y
ou are doing and want to suppress this warning.         

root@host ~ # salt-pip cache purge                                                                                                                          
Files removed: 16 (2.1 MB)                                                     

# RELENV_BUILDENV=1 salt-pip install python-augeas           
Collecting python-augeas                                                                                                                                      
  Downloading python-augeas-1.2.0.tar.gz (99 kB)                             
  Preparing metadata (setup.py) ... done             
Requirement already satisfied: cffi>=1.0.0 in /opt/saltstack/salt/lib/python3.10/site-packages (from python-augeas) (1.14.6)
Requirement already satisfied: pycparser in /opt/saltstack/salt/lib/python3.10/site-packages (from cffi>=1.0.0->python-augeas) (2.21)
Building wheels for collected packages: python-augeas                                                                                                                                                                                                                                                                       
  DEPRECATION: Building 'python-augeas' using the legacy setup.py bdist_wheel mechanism, which will be removed in a future version. pip 25.3 will enforce this behaviour change. A possible replacement is to use the standardized build interface by setting the `--use-pep517` option, (possibly combined with `--no-build
-isolation`), or adding a `pyproject.toml` file to the source tree of 'python-augeas'. Discussion can be found at https://github.com/pypa/pip/issues/6334
  Building wheel for python-augeas (setup.py) ... error        
  error: subprocess-exited-with-error                          
                                                                                                                                                              
  × python setup.py bdist_wheel did not run successfully.                                                                                                     
  │ exit code: 1                                                               
  ╰─> [30 lines of output]                                                     
      /opt/saltstack/salt/lib/python3.10/site-packages/setuptools/__init__.py:80: _DeprecatedInstaller: setuptools.installer and fetch_build_eggs are deprecated.
      !!                                                                       
                                                                                                                                                              
              ********************************************************************************                                                                
              Requirements should be satisfied by a PEP 517 installer.                                                                                                                                                                                                                                                                    If you are using pip, you can try `pip install --use-pep517`.                                                                                                                                                                                                                                                 
              ********************************************************************************                                                                
                                                                               
      !!                                                                                                                                                      
        dist.fetch_build_eggs(dist.setup_requires)                             
      running bdist_wheel                                                                                                                                                                                                                                                                                                   
      running build                                                                                                                                           
      running build_py                                                         
      creating build                                                                                                                                          
      creating build/lib.linux-x86_64-cpython-310                                                                                                                                                                                                                                                                           
      creating build/lib.linux-x86_64-cpython-310/augeas                 
      copying augeas/__init__.py -> build/lib.linux-x86_64-cpython-310/augeas
      copying augeas/ffi.py -> build/lib.linux-x86_64-cpython-310/augeas                                                                                      
      running build_ext                                                        
      generating cffi module 'build/temp.linux-x86_64-cpython-310/_augeas.c'                                                                                  
      creating build/temp.linux-x86_64-cpython-310                                                                                                            
      building '_augeas' extension                                                                                                                            
      creating build/temp.linux-x86_64-cpython-310/build                                                                                                                                                                                                                                                                    
      creating build/temp.linux-x86_64-cpython-310/build/temp.linux-x86_64-cpython-310
      /root/.local/relenv/toolchain/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wno-coverage-mismatch -g -I/opt/saltstack/salt/include -I/opt/saltstack/salt/include/readline -I/opt/saltstack/salt/include/ncursesw -I/root/.local/relenv/toolchain
/x86_64-linux-gnu/x86_64-linux-gnu/sysroot/usr/include -fPIC -I/opt/saltstack/salt/include/python3.10 -I/opt/saltstack/salt/include -c build/temp.linux-x86_64-cpython-310/_augeas.c -o build/temp.linux-x86_64-cpython-310/build/temp.linux-x86_64-cpython-310/_augeas.o
      build/temp.linux-x86_64-cpython-310/_augeas.c:570:25: fatal error: augeas.h: No such file or directory
        570 |                #include <augeas.h>
            |                         ^~~~~~~~~~
      compilation terminated.
      error: command '/root/.local/relenv/toolchain/x86_64-linux-gnu/bin/x86_64-linux-gnu-gcc' failed with exit code 1
      [end of output]
   
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for python-augeas
  Running setup.py clean for python-augeas
Failed to build python-augeas
ERROR: Failed to build installable wheels for some pyproject.toml based projects (python-augeas)

I don't know how to get libaugeas-dev in there

I don't know either :-(

doc75 avatar Jun 21 '25 15:06 doc75

I tried with salt 3006.14 and Ubuntu 24.04 but I still get the libstdc++.so.6 error.

amato-gianluca avatar Jul 11 '25 10:07 amato-gianluca

I have the same problem starting with Saltstack 3007.2 under Debian 12 (3007.1 is good).

Without libaugeas-dev salt-pip install python-augeas complains about the missing augeas.h.

With libaugeas-dev I get the GLIBCXX_3.4.30 error.

It seems that Debian 12 libicuuc.so.72 is not compatible with libstdc++.so.6 shipped by saltstack.

Cybso avatar Jul 21 '25 10:07 Cybso

I have fixed this error by removing salt's libstdc++.so.6 so that the system's version is used:

sudo rm /opt/saltstack/salt/lib/libstdc++.so.6

This might have other side effects since I guess it has a reason that saltstack ships its own version, but at least on my systems this seems to solve the issue.

Cybso avatar Jul 21 '25 10:07 Cybso

I had this issue as well on Debian 12 with 3006.14.

[ERROR   ] State 'augeas.change' was not found in SLS 'baseserver'
Reason: 'augeas.change' is not available.

Resolved it with the information from this issue, thanks 🙏

sudo apt install build-essential
sudo apt install libaugeas-dev

sudo rm /opt/saltstack/salt/lib/libstdc++.so.6

sudo salt-pip uninstall python-augeas
sudo salt-pip cache purge
sudo salt-pip install python-augeas

sudo systemctl restart salt-minion.service

As @Cybso said in the previous post. No idea if the removal of libstdc++.so.6 has any side effects or issues. Everything seems to work okay.

donnex avatar Aug 15 '25 05:08 donnex