sgerrand / alpine-pkg-glibc

A glibc compatibility layer package for Alpine Linux
2.05k stars 280 forks source link

__snprintf_chk: symbol not found #111

Closed inf3cti0n95 closed 2 months ago

inf3cti0n95 commented 5 years ago

I am trying out a python library which depends on glibc and it throws error on alpine.

/code # ldd /usr/local/lib/python3.7/site-packages/pyarmor/platforms/linux64/_pytransform.so
    ldd (0x7fa1693c4000)
    libdl.so.2 => ldd (0x7fa1693c4000)
    libc.so.6 => ldd (0x7fa1693c4000)
Error relocating /usr/local/lib/python3.7/site-packages/pyarmor/platforms/linux64/_pytransform.so: __snprintf_chk: symbol not found
Error relocating /usr/local/lib/python3.7/site-packages/pyarmor/platforms/linux64/_pytransform.so: __memcpy_chk: symbol not found
Error relocating /usr/local/lib/python3.7/site-packages/pyarmor/platforms/linux64/_pytransform.so: __fgets_chk: symbol not found
Error relocating /usr/local/lib/python3.7/site-packages/pyarmor/platforms/linux64/_pytransform.so: __strcpy_chk: symbol not found
Error relocating /usr/local/lib/python3.7/site-packages/pyarmor/platforms/linux64/_pytransform.so: __fprintf_chk: symbol not found
Error relocating /usr/local/lib/python3.7/site-packages/pyarmor/platforms/linux64/_pytransform.so: __sprintf_chk: symbol not found
frol commented 5 years ago

@inf3cti0n95 Do you use Python built against glibc or official Alpine package? You should not mix libraries/binaries compiled against different libc. I can only suggest you try frolvlad/alpine-miniconda3 image, which bundles Miniconda Python distribution on top of Alpine + glibc.

inf3cti0n95 commented 5 years ago

The miniconda library works fine thanks!

inf3cti0n95 commented 5 years ago

@frol Is there a simple python3 version of this image. conda wont work for my entire project.

frol commented 5 years ago

@inf3cti0n95 I am not aware of such an image, but you can try building your own by using Arch Linux packages following my mono image as an example.

I wonder what exactly is broken in miniconda so your project doesn’t work with it.

inf3cti0n95 commented 5 years ago

@frol I tried, But somehow that on throws me the same error.

kilianc commented 5 years ago

I am experiencing the same behavior with docker-compose:

ERROR: gcloud failed to load: Error relocating /tmp/_MEI7p4C7w/libz.so.1: __snprintf_chk: symbol not found
    gcloud_main = _import_gcloud_main()
    import googlecloudsdk.gcloud_main
    from googlecloudsdk.api_lib.iamcredentials import util as iamcred_util
    from googlecloudsdk.api_lib.util import apis_internal
    from googlecloudsdk.api_lib.util import apis_util
    from googlecloudsdk.core import exceptions
    from googlecloudsdk.core.util import platforms
    import subprocess
    import pickle
    import binascii as _binascii

This usually indicates corruption in your gcloud installation or problems with your Python interpreter.

Please verify that the following is the path to a working Python 2.7 executable:
    /usr/bin/python2

If it is not, please set the CLOUDSDK_PYTHON environment variable to point to a working Python 2.7 executable.

If you are still experiencing problems, please reinstall the Cloud SDK using the instructions here:
    https://cloud.google.com/sdk/
[223] Failed to execute script docker-compose
Traceback (most recent call last):
  File "site-packages/dockerpycreds/store.py", line 74, in _execute
  File "subprocess.py", line 336, in check_output
  File "subprocess.py", line 418, in run
subprocess.CalledProcessError: Command '['/google-cloud-sdk/bin/docker-credential-gcloud', 'get']' returned non-zero exit status 1.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "site-packages/docker/auth.py", line 129, in _resolve_authconfig_credstore
  File "site-packages/dockerpycreds/store.py", line 35, in get
  File "site-packages/dockerpycreds/store.py", line 87, in _execute
dockerpycreds.errors.StoreError: Credentials store docker-credential-gcloud exited with "".

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "bin/docker-compose", line 6, in <module>
  File "compose/cli/main.py", line 71, in main
  File "compose/cli/main.py", line 127, in perform_command
  File "compose/cli/main.py", line 287, in build
  File "compose/project.py", line 384, in build
  File "compose/project.py", line 366, in build_service
  File "compose/service.py", line 1082, in build
  File "site-packages/docker/api/build.py", line 251, in build
  File "site-packages/docker/api/build.py", line 313, in _set_auth_headers
  File "site-packages/docker/auth.py", line 96, in resolve_authconfig
  File "site-packages/docker/auth.py", line 146, in _resolve_authconfig_credstore
docker.errors.DockerException: Credentials store error: StoreError('Credentials store docker-credential-gcloud exited with "".',)

With the following image:

FROM node:11.10.0-alpine

RUN \
  apk add --no-cache --update \
    bash==4.4.19-r1 \
    ca-certificates==20190108-r0 \
    curl==7.64.0-r1 \
    git==2.20.1-r0 \
    libgcc==8.2.0-r2 \
    libressl2.7-libcrypto==2.7.5-r0 \
    openssl==1.1.1a-r1 \
    python==2.7.15-r3

RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf

RUN \
  export DOCKER_CHANNEL=stable && \
  export DOCKER_VERSION=18.06.3-ce && \
  curl -sfL -o docker.tgz https://download.docker.com/linux/static/${DOCKER_CHANNEL}/x86_64/docker-${DOCKER_VERSION}.tgz && \
  tar xzf docker.tgz --strip-components 1 -C /usr/local/bin && \
  rm docker.tgz

RUN \
  export GLIBC=2.29-r0 && \
  curl -sfL https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub -o /etc/apk/keys/sgerrand.rsa.pub&& \
  curl -sfLO https://github.com/sgerrand/alpine-pkg-glibc/releases/download/$GLIBC/glibc-$GLIBC.apk && \
  apk add --no-cache glibc-$GLIBC.apk && \
  rm glibc-$GLIBC.apk && \
  ln -s /lib/libz.so.1 /usr/glibc-compat/lib/ && \
  ln -s /lib/libc.musl-x86_64.so.1 /usr/glibc-compat/lib && \
  ln -s /usr/lib/libgcc_s.so.1 /usr/glibc-compat/lib

RUN \
  export DOCKER_COMPOSE_VERSION=1.23.2 && \
  curl -sfL https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose && \
  chmod +x /usr/local/bin/docker-compose

ENV PATH /google-cloud-sdk/bin:$PATH
RUN \
  export CLOUD_SDK_VERSION=237.0.0 && \
  curl -sfLO https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
  tar xzf google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
  rm google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \
  gcloud config set core/disable_usage_reporting true && \
  gcloud config set component_manager/disable_update_check true && \
  gcloud components install beta
kilianc commented 4 years ago

After my investigation I realized that docker-compose stops working if gcloud auth configure-docker is called before docker-compose build.

Looks like there are some incompatibilities between gcloud sdk and docker-compose, as mention in other places as well seems related to python. Any idea how to get around this?

StudyForZX commented 4 years ago

@inf3cti0n95 Do you use Python built against glibc or official Alpine package? You should not mix libraries/binaries compiled against different libc. I can only suggest you try frolvlad/alpine-miniconda3 image, which bundles Miniconda Python distribution on top of Alpine + glibc.

It works, thanks

sgerrand commented 2 months ago

I'm so sorry for not responding to this bug report sooner. Without an example Dockerfile it's hard to know what's causing these segmentation faults. If you're still experiencing this problem then would you please reply with an example Dockerfile which reproduces the error.

I suggest that if you have chosen to run non-musl based software inside Alpine Linux because of the size of Alpine's Docker images then you and any other future readers in a situation like this should consider running containers based on Docker images that are based on a GNU C library, rather than trying to run binaries which weren't compiled for musl inside Alpine Linux. As an example, Debian currently provide "slim" Docker images for each of their releases which are ~ 30 MB compressed.