Skip to content

docker build fails during pip rrdtool build #207

@b-schliessmann

Description

@b-schliessmann

Hello everyone

I'd like to run a vaping docker image on my Raspberry Pi. As the only prebuilt image is for linux/amd64 and the raspi is linux/arm/v7, I tried to build my own docker image, which fails during the pip build of rrdtool due to pointer conversions (see oetiker/rrdtool-1.x#1242).

The root of the problem stems from certain pointer conversions which gcc<14 only warns about, but gcc>=14 will fail on. The issue in rrdtool was fixed more than one year ago, but it seems it hasn't yet propagated downstream.

What I tried to solve the problem:

  • Use a python alpine base image that includes gcc 13 -- doesn't exist. The python base images start at alpine 3.21, which includes only gcc 14. (Near miss, Alpine 3.20 has gcc 13.)
  • Force pip to use a package which includes the fixes -- impossibru, the latest rrdtool on PyPI is from mid-2022.

I'd be grateful for any suggestions. (In the old tarball world, I'd long have fixed this manually, but I don't know how to tamper with the docker image build process -- maybe for the better ;) )

Please find the full error messages for reference below.

Best regards

Björn

Building wheels for collected packages: rrdtool, whisper, graphyte, MarkupSafe, pyyaml, pyzmq
  DEPRECATION: Building 'rrdtool' 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 replace
ment 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 o
f 'rrdtool'. Discussion can be found at https://github.com/pypa/pip/issues/6334
  Building wheel for rrdtool (setup.py): started
  Building wheel for rrdtool (setup.py): finished with status 'error'
  error: subprocess-exited-with-error
  
  × python setup.py bdist_wheel did not run successfully.
  │ exit code: 1
  ╰─> [153 lines of output]
      /venv/lib/python3.11/site-packages/setuptools/config/setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_files instead.
        warnings.warn(msg, warning_class)
      running bdist_wheel
      running build
      running build_ext
      building 'rrdtool' extension
      creating build
      creating build/temp.linux-armv7l-cpython-311
      gcc -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DPACKAGE_VERSION=\"0.1.16\" -DWITH_FETCH_CB=1 -I/tmp/pip-install-4u5710av/rrdtool_afff24f21a5f446db1f204352a76f7ef -I/usr/local
/include -I/venv/include -I/usr/local/include/python3.11 -c rrdtoolmodule.c -o build/temp.linux-armv7l-cpython-311/rrdtoolmodule.o
      rrdtoolmodule.c: In function '_rrdtool_create':
      rrdtoolmodule.c:282:39: error: passing argument 2 of 'rrd_create' from incompatible pointer type [-Wincompatible-pointer-types]
        282 |     status = rrd_create(rrdtool_argc, rrdtool_argv);
            |                                       ^~~~~~~~~~~~
            |                                       |
            |                                       char **
      In file included from rrdtoolmodule.h:4,
                       from rrdtoolmodule.c:27:
      /usr/include/rrd.h:158:5: note: expected 'const char **' but argument is of type 'char **'
        158 |     const char **);
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_dump':
      rrdtoolmodule.c:321:37: error: passing argument 2 of 'rrd_dump' from incompatible pointer type [-Wincompatible-pointer-types]
        321 |     status = rrd_dump(rrdtool_argc, rrdtool_argv);
            |                                     ^~~~~~~~~~~~
            |                                     |
            |                                     char **
      /usr/include/rrd.h:210:5: note: expected 'const char **' but argument is of type 'char **'
        210 |     const char **);
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_update':
     rrdtoolmodule.c:360:39: error: passing argument 2 of 'rrd_update' from incompatible pointer type [-Wincompatible-pointer-types]
        360 |     status = rrd_update(rrdtool_argc, rrdtool_argv);
            |                                       ^~~~~~~~~~~~
            |                                       |
            |                                       char **
      /usr/include/rrd.h:179:5: note: expected 'const char **' but argument is of type 'char **'
        179 |     const char **);
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_updatev':
      rrdtoolmodule.c:393:39: error: passing argument 2 of 'rrd_update_v' from incompatible pointer type [-Wincompatible-pointer-types]
        393 |     data = rrd_update_v(rrdtool_argc, rrdtool_argv);
            |                                       ^~~~~~~~~~~~
            |                                       |
            |                                       char **
      /usr/include/rrd.h:182:5: note: expected 'const char **' but argument is of type 'char **'
        182 |     const char **);
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_fetch':
      rrdtoolmodule.c:438:38: error: passing argument 2 of 'rrd_fetch' from incompatible pointer type [-Wincompatible-pointer-types]
        438 |     status = rrd_fetch(rrdtool_argc, rrdtool_argv, &start, &end, &step,
            |                                      ^~~~~~~~~~~~
            |                                      |
            |                                      char **
      /usr/include/rrd.h:198:5: note: expected 'const char **' but argument is of type 'char **'
        198 |     const char **,
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_flushcached':
      rrdtoolmodule.c:512:44: error: passing argument 2 of 'rrd_flushcached' from incompatible pointer type [-Wincompatible-pointer-types]
        512 |     status = rrd_flushcached(rrdtool_argc, rrdtool_argv);
            |                                            ^~~~~~~~~~~~
            |                                            |
            |                                            char **
      /usr/include/rrd.h:242:18: note: expected 'const char **' but argument is of type 'char **'
        242 |     const char **argv);
            |     ~~~~~~~~~~~~~^~~~
      rrdtoolmodule.c: In function '_rrdtool_graph':
      rrdtoolmodule.c:606:38: error: passing argument 2 of 'rrd_graph' from incompatible pointer type [-Wincompatible-pointer-types]
        606 |     status = rrd_graph(rrdtool_argc, rrdtool_argv, &calcpr, &xsize, &ysize,
            |                                      ^~~~~~~~~~~~
            |                                      |
            |                                      char **
      /usr/include/rrd.h:185:5: note: expected 'const char **' but argument is of type 'char **'
        185 |     const char **,
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_graphv':
      rrdtoolmodule.c:661:38: error: passing argument 2 of 'rrd_graph_v' from incompatible pointer type [-Wincompatible-pointer-types]
        661 |     data = rrd_graph_v(rrdtool_argc, rrdtool_argv);
            |                                      ^~~~~~~~~~~~
            |                                      |
            |                                      char **
      /usr/include/rrd.h:194:5: note: expected 'const char **' but argument is of type 'char **'
        194 |     const char **);
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_xport':
      rrdtoolmodule.c:710:38: error: passing argument 2 of 'rrd_xport' from incompatible pointer type [-Wincompatible-pointer-types]
        710 |     status = rrd_xport(rrdtool_argc, rrdtool_argv, &xsize, &start, &end, &step,
            |                                      ^~~~~~~~~~~~
            |                                      |
            |                                      char **
      /usr/include/rrd.h:232:5: note: expected 'const char **' but argument is of type 'char **'
        232 |     const char **,
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_tune':
      rrdtoolmodule.c:808:37: error: passing argument 2 of 'rrd_tune' from incompatible pointer type [-Wincompatible-pointer-types]
        808 |     status = rrd_tune(rrdtool_argc, rrdtool_argv);
            |                                     ^~~~~~~~~~~~
            |                                     |
            |                                     char **
      /usr/include/rrd.h:213:5: note: expected 'const char **' but argument is of type 'char **'
        213 |     const char **);
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_first':
      rrdtoolmodule.c:846:34: error: passing argument 2 of 'rrd_first' from incompatible pointer type [-Wincompatible-pointer-types]
        846 |     ts = rrd_first(rrdtool_argc, rrdtool_argv);
            |                                  ^~~~~~~~~~~~
            |                                  |
            |                                  char **
      /usr/include/rrd.h:222:5: note: expected 'const char **' but argument is of type 'char **'
        222 |     const char **);
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_last':
      rrdtoolmodule.c:881:33: error: passing argument 2 of 'rrd_last' from incompatible pointer type [-Wincompatible-pointer-types]
        881 |     ts = rrd_last(rrdtool_argc, rrdtool_argv);
            |                                 ^~~~~~~~~~~~
            |                                 |
            |                                 char **
      /usr/include/rrd.h:216:5: note: expected 'const char **' but argument is of type 'char **'
        216 |     const char **);
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_resize':
      rrdtoolmodule.c:918:39: error: passing argument 2 of 'rrd_resize' from incompatible pointer type [-Wincompatible-pointer-types]
        918 |     status = rrd_resize(rrdtool_argc, rrdtool_argv);
            |                                       ^~~~~~~~~~~~
            |                                       |
            |                                       char **
      /usr/include/rrd.h:225:5: note: expected 'const char **' but argument is of type 'char **'
        225 |     const char **);
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function '_rrdtool_info':
      rrdtoolmodule.c:956:35: error: passing argument 2 of 'rrd_info' from incompatible pointer type [-Wincompatible-pointer-types]
        956 |     data = rrd_info(rrdtool_argc, rrdtool_argv);
            |                                   ^~~~~~~~~~~~
            |                                   |
            |                                   char **
      /usr/include/rrd.h:161:5: note: expected 'const char **' but argument is of type 'char **'
        161 |     const char **);
            |     ^~~~~~~~~~~~~
      rrdtoolmodule.c: In function 'PyInit_rrdtool':
      rrdtoolmodule.c:1403:5: warning: 'PyEval_ThreadsInitialized' is deprecated [-Wdeprecated-declarations]
       1403 |     if (!PyEval_ThreadsInitialized())
            |     ^~
      In file included from /usr/local/include/python3.11/Python.h:95,
                       from rrdtoolmodule.c:25:
      /usr/local/include/python3.11/ceval.h:131:36: note: declared here
        131 | Py_DEPRECATED(3.9) PyAPI_FUNC(int) PyEval_ThreadsInitialized(void);
            |                                    ^~~~~~~~~~~~~~~~~~~~~~~~~
      rrdtoolmodule.c:1404:9: warning: 'PyEval_InitThreads' is deprecated [-Wdeprecated-declarations]
       1404 |         PyEval_InitThreads();
            |         ^~~~~~~~~~~~~~~~~~
      /usr/local/include/python3.11/ceval.h:132:37: note: declared here
        132 | Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void);
            |                                     ^~~~~~~~~~~~~~~~~~
      error: command '/usr/bin/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 rrdtool
  Running setup.py clean for rrdtool
[...]
Successfully built whisper graphyte MarkupSafe pyyaml pyzmq
Failed to build rrdtool
error: failed-wheel-build-for-install

× Failed to build installable wheels for some pyproject.toml based projects
╰─> rrdtool
The command '/bin/sh -c pip install "$(ls dist/vaping-*.whl)[${vaping_extras}]"' returned a non-zero code: 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions