this weekend our docker image broke because it cannot be build anymore. While looking into the stats, I saw this line:
crypt_blowfish-1.2/crypt.h:17:23: fatal error: gnu-crypt.h: No such file or directory
In more detail:
Running setup.py bdist_wheel for cryptacular: started
Running setup.py bdist_wheel for cryptacular: finished with status 'error'
Complete output from command /usr/local/bin/python -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-sayd65k0/cryptacular/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/tmp5734bf55pip-wheel- --python-tag cp36:
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-x86_64-3.6
creating build/lib.linux-x86_64-3.6/cryptacular
copying cryptacular/__init__.py -> build/lib.linux-x86_64-3.6/cryptacular
creating build/lib.linux-x86_64-3.6/cryptacular/crypt
copying cryptacular/crypt/test_crypt.py -> build/lib.linux-x86_64-3.6/cryptacular/crypt
copying cryptacular/crypt/__init__.py -> build/lib.linux-x86_64-3.6/cryptacular/crypt
creating build/lib.linux-x86_64-3.6/cryptacular/bcrypt
copying cryptacular/bcrypt/test_bcrypt.py -> build/lib.linux-x86_64-3.6/cryptacular/bcrypt
copying cryptacular/bcrypt/__init__.py -> build/lib.linux-x86_64-3.6/cryptacular/bcrypt
creating build/lib.linux-x86_64-3.6/cryptacular/core
copying cryptacular/core/test_core.py -> build/lib.linux-x86_64-3.6/cryptacular/core
copying cryptacular/core/__init__.py -> build/lib.linux-x86_64-3.6/cryptacular/core
creating build/lib.linux-x86_64-3.6/cryptacular/pbkdf2
copying cryptacular/pbkdf2/test_pbkdf2.py -> build/lib.linux-x86_64-3.6/cryptacular/pbkdf2
copying cryptacular/pbkdf2/__init__.py -> build/lib.linux-x86_64-3.6/cryptacular/pbkdf2
running egg_info
writing cryptacular.egg-info/PKG-INFO
writing dependency_links to cryptacular.egg-info/dependency_links.txt
writing namespace_packages to cryptacular.egg-info/namespace_packages.txt
writing requirements to cryptacular.egg-info/requires.txt
writing top-level names to cryptacular.egg-info/top_level.txt
reading manifest file 'cryptacular.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'cryptacular.egg-info/SOURCES.txt'
copying cryptacular/bcrypt/_bcrypt.c -> build/lib.linux-x86_64-3.6/cryptacular/bcrypt
running build_ext
building 'cryptacular.bcrypt._bcrypt' extension
creating build/temp.linux-x86_64-3.6
creating build/temp.linux-x86_64-3.6/crypt_blowfish-1.2
creating build/temp.linux-x86_64-3.6/cryptacular
creating build/temp.linux-x86_64-3.6/cryptacular/bcrypt
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DNO_BF_ASM -Icrypt_blowfish-1.2/ -I/usr/local/include/python3.6m -c crypt_blowfish-1.2/crypt_blowfish.c -o build/temp.linux-x86_64-3.6/crypt_blowfish-1.2/crypt_blowfish.o
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DNO_BF_ASM -Icrypt_blowfish-1.2/ -I/usr/local/include/python3.6m -c crypt_blowfish-1.2/crypt_gensalt.c -o build/temp.linux-x86_64-3.6/crypt_blowfish-1.2/crypt_gensalt.o
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DNO_BF_ASM -Icrypt_blowfish-1.2/ -I/usr/local/include/python3.6m -c crypt_blowfish-1.2/wrapper.c -o build/temp.linux-x86_64-3.6/crypt_blowfish-1.2/wrapper.o
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DNO_BF_ASM -Icrypt_blowfish-1.2/ -I/usr/local/include/python3.6m -c cryptacular/bcrypt/_bcrypt.c -o build/temp.linux-x86_64-3.6/cryptacular/bcrypt/_bcrypt.o
In file included from /usr/local/include/python3.6m/Python.h:39:0,
from cryptacular/bcrypt/_bcrypt.c:26:
crypt_blowfish-1.2/crypt.h:17:23: fatal error: gnu-crypt.h: No such file or directory
#include <gnu-crypt.h>
^
compilation terminated.
error: command 'gcc' failed with exit status 1
----------------------------------------
Failed building wheel for cryptacular
Running setup.py clean for cryptacular
Our implementation works with the package cryptacular which uses bcrypt. None of the packages were updated last week and I dont know where to start.
As additional information, the error occurs in this block of our Dockerfile
RUN apt-get install -y build-essential libfontconfig && \
pip install -q -U pip && \
pip install -q -r requirements.txt && \
apt-get remove -y --purge build-essential && \
apt-get autoremove -y && \
apt-get clean -y
where the requirements.txt
uses cryptacular==1.4.1
Edit: We are working with the python:3.6-slim
image
I was able to install using a virtualenv with python 2.7.14, installed via venv
My problem solved by install cryptacular before install apex
Reference: https://github.com/NVIDIA/apex/issues/170#issuecomment-477321199
I had the same issue running python 3.6.6. With this one liner I was able to install cryptacular from the latest commit.
You will need to have mercurial installed
More info on this thread
We don't know the error exactly, but last weekend there was an security update in the base image. Therefore we pinned our python image to 3.6.4.