Synss / python-mbedtls

Cryptographic library with an mbed TLS back end
MIT License
79 stars 28 forks source link

Installation fails on Raspberry Pi 4 #38

Closed chrisrothwell1 closed 3 years ago

chrisrothwell1 commented 3 years ago

I am submitting a …

Description

When installing on Raspberry Pi 4, fails due to fatal error: mbedtls/bignum.h: No such file or directory

include "mbedtls/bignum.h"

Current behavior

Fails to install

Expected behavior

Should install

Steps to reproduce

  1. Update Raspberry Pi to latest
  2. pip3 install python-mbedtls
  3. See error in log.

Minimal demo of the problem

pi@raspberrypi:~ $ pip3 install python-mbedtls Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple Collecting python-mbedtls Using cached https://files.pythonhosted.org/packages/4e/b7/1e29337f668485c79bec77c95e2d361a5375eac8bfefba5ab8adff1fa5dd/python-mbedtls-1.4.1.tar.gz Installing build dependencies ... done Requirement already satisfied: certifi in /usr/lib/python3/dist-packages (from python-mbedtls) (2018.8.24) Building wheels for collected packages: python-mbedtls Running setup.py bdist_wheel for python-mbedtls ... error Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;file='/tmp/pip-install-zj03qrrr/python-mbedtls/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" bdist_wheel -d /tmp/pip-wheel-5psloyj4 --python-tag cp37: Library not found loading: None Traceback (most recent call last): File "", line 1, in File "/tmp/pip-install-zj03qrrr/python-mbedtls/setup.py", line 133, in version=mbedtls_version_info, url=mbedtls_url__ File "/tmp/pip-install-zj03qrrr/python-mbedtls/setup.py", line 65, in check_mbedtls_support mbedtls_version(lib), sep=os.linesep File "/tmp/pip-install-zj03qrrr/python-mbedtls/setup.py", line 45, in mbedtls_version lib.mbedtls_version_get_string_full(output_p) File "/usr/lib/python3.7/ctypes/init.py", line 369, in getattr func = self.getitem(name) File "/usr/lib/python3.7/ctypes/init.py", line 374, in getitem__ func = self._FuncPtr((name_or_ordinal, self)) AttributeError: /usr/bin/python3: undefined symbol: mbedtls_version_get_string_full


Failed building wheel for python-mbedtls Running setup.py clean for python-mbedtls Failed to build python-mbedtls Installing collected packages: python-mbedtls Running setup.py install for python-mbedtls ... error Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;file='/tmp/pip-install-zj03qrrr/python-mbedtls/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-record-cx3phpq9/install-record.txt --single-version-externally-managed --compile --user --prefix=: running install running build running build_py creating build creating build/3.7.3 creating build/3.7.3/lib.linux-armv7l-3.7 creating build/3.7.3/lib.linux-armv7l-3.7/mbedtls copying src/mbedtls/hmac.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls copying src/mbedtls/init.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls copying src/mbedtls/secrets.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls copying src/mbedtls/hashlib.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls creating build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher copying src/mbedtls/cipher/DES3dbl.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher copying src/mbedtls/cipher/ARIA.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher copying src/mbedtls/cipher/DES3.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher copying src/mbedtls/cipher/AES.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher copying src/mbedtls/cipher/Blowfish.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher copying src/mbedtls/cipher/Camellia.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher copying src/mbedtls/cipher/CHACHA20.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher copying src/mbedtls/cipher/ARC4.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher copying src/mbedtls/cipher/init.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher copying src/mbedtls/cipher/DES.py -> build/3.7.3/lib.linux-armv7l-3.7/mbedtls/cipher running build_ext cythoning src/mbedtls/mpi.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/mpi.c creating build/3.7.3/temp.linux-armv7l-3.7 creating build/3.7.3/temp.linux-armv7l-3.7/pyrex creating build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls cythoning src/mbedtls/_ringbuf.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/_ringbuf.c cythoning src/mbedtls/exceptions.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/exceptions.c cythoning src/mbedtls/x509.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/x509.c cythoning src/mbedtls/version.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/version.c cythoning src/mbedtls/_platform.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/_platform.c cythoning src/mbedtls/_random.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/_random.c cythoning src/mbedtls/tls.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/tls.c cythoning src/mbedtls/pk.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/pk.c cythoning src/mbedtls/hkdf.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/hkdf.c cythoning src/mbedtls/_md.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/_md.c cythoning src/mbedtls/cipher/_cipher.pyx to build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/cipher/_cipher.c creating build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/cipher building 'mbedtls.mpi' extension creating build/3.7.3/temp.linux-armv7l-3.7/build creating build/3.7.3/temp.linux-armv7l-3.7/build/3.7.3 creating build/3.7.3/temp.linux-armv7l-3.7/build/3.7.3/temp.linux-armv7l-3.7 creating build/3.7.3/temp.linux-armv7l-3.7/build/3.7.3/temp.linux-armv7l-3.7/pyrex creating build/3.7.3/temp.linux-armv7l-3.7/build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.7m -c build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/mpi.c -o build/3.7.3/temp.linux-armv7l-3.7/build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/mpi.o build/3.7.3/temp.linux-armv7l-3.7/pyrex/mbedtls/mpi.c:608:10: fatal error: mbedtls/bignum.h: No such file or directory

include "mbedtls/bignum.h"

          ^~~~~~~~~~~~~~~~~~
compilation terminated.
error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1

----------------------------------------

Command "/usr/bin/python3 -u -c "import setuptools, tokenize;file='/tmp/pip-install-zj03qrrr/python-mbedtls/setup.py';f=getattr(tokenize, 'open', open)(file);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, file, 'exec'))" install --record /tmp/pip-record-cx3phpq9/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-install-zj03qrrr/python-mbedtls/

Other information

None

Synss commented 3 years ago

Do you have libmbedtls installed? If so, you may need to adjust the C_LIBRARY_PATH and eventually LD_LIBRARY_PATH.

Synss commented 3 years ago

Have you had any luck after copying the headers on the Pi or with C_LIBRARY_PATH?

I do not own a RPi and will not be able to help you packaging there. You may have better luck on stack overflow, the RPi forums or mailing lists. python-mbedtls is more or less compiled like a C library.

chrisrothwell1 commented 3 years ago

I did not install libmbedtls, but I can't say that its not already there in the Pi. I didn't try to copy headers. Not sure how to do this. I decided to use the pyca/cryptography library instead, which uses openssl. This worked on both Windows and Linux (Pi). I'm not planning to pursue this issue, but it remains an issue for others that might want to use mbed tls on a Pi with Python.

Synss commented 3 years ago

Well, the C library is distributed in the wheels and that covers a vast majority of linux distros. Pip install works on MacOS. I am also trying to package for Windows. But I am not interested in packaging the library for more exotic platforms.

If you want to (or have to) install from source, you must install the C library and have the headers available. You will also need a C compiler and linker. I do not consider this a bug.

Thank you anyway.