sgerrand / alpine-pkg-glibc

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

doesn't seem to be working #97

Closed luisdavim closed 2 months ago

luisdavim commented 5 years ago

this is how my setup looks like:

FROM keymetrics/pm2:8-alpine

ENV LANG=C.UTF-8 \
    LD_LIBRARY_PATH=/usr/local/lib:/usr/glibc-compat/lib:/opt/libs/lib:/usr/lib:/lib

RUN ALPINE_GLIBC_BASE_URL="https://github.com/sgerrand/alpine-pkg-glibc/releases/download" && \
    ALPINE_GLIBC_PACKAGE_VERSION="2.28-r0" && \
    ALPINE_GLIBC_BASE_PACKAGE_FILENAME="glibc-$ALPINE_GLIBC_PACKAGE_VERSION.apk" && \
    ALPINE_GLIBC_BIN_PACKAGE_FILENAME="glibc-bin-$ALPINE_GLIBC_PACKAGE_VERSION.apk" && \
    ALPINE_GLIBC_I18N_PACKAGE_FILENAME="glibc-i18n-$ALPINE_GLIBC_PACKAGE_VERSION.apk" && \
    apk add --no-cache --virtual=.build-dependencies wget ca-certificates && \
    wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
    wget \
        "$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
        "$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
        "$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_I18N_PACKAGE_FILENAME" && \
    apk add --no-cache \
        "$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
        "$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
        "$ALPINE_GLIBC_I18N_PACKAGE_FILENAME" \
        libuuid && \
    \
    rm "/etc/apk/keys/sgerrand.rsa.pub" && \
    /usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 "$LANG" || true && \
    echo "export LANG=$LANG" > /etc/profile.d/locale.sh && \
    \
    apk del glibc-i18n && \
    \
    rm "/root/.wget-hsts" && \
    apk del .build-dependencies && \
    rm \
        "$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
        "$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
        "$ALPINE_GLIBC_I18N_PACKAGE_FILENAME"

#....

but if I try:

$ ldd /usr/glibc-compat/lib/libdl.so.2
        ldd (0x7fdd15b9d000)
        libc.so.6 => ldd (0x7fdd15b9d000)
        ld-linux-x86-64.so.2 => /usr/glibc-compat/lib/ld-linux-x86-64.so.2 (0x7fdd15770000)
Error relocating /usr/glibc-compat/lib/libdl.so.2: __asprintf: symbol not found
Error relocating /usr/glibc-compat/lib/libdl.so.2: __dcgettext: symbol not found
Error relocating /usr/glibc-compat/lib/libdl.so.2: _dl_vsym: symbol not found
Error relocating /usr/glibc-compat/lib/libdl.so.2: _dl_addr: symbol not found
Error relocating /usr/glibc-compat/lib/libdl.so.2: _dl_sym: symbol not found
Error relocating /usr/glibc-compat/lib/libdl.so.2: _libc_intl_domainname: symbol not found

or:

$ ldd /usr/glibc-compat/lib/libutil.so
        ldd (0x7f2136c97000)
        libc.so.6 => ldd (0x7f2136c97000)
Error relocating /usr/glibc-compat/lib/libutil.so: __gettimeofday: symbol not found
Error relocating /usr/glibc-compat/lib/libutil.so: getpt: symbol not found
Error relocating /usr/glibc-compat/lib/libutil.so: getutline_r: symbol not found
Error relocating /usr/glibc-compat/lib/libutil.so: errno: symbol not found

Also:

$ ldconfig -p
Illegal option -p

$ /usr/glibc-compat/sbin/ldconfig -p
49 libs found in cache `/usr/glibc-compat/etc/ld.so.cache'
        libz.so.1 (libc6,x86-64) => /lib/libz.so.1
        libuuid.so.1 (libc6,x86-64) => /lib/libuuid.so.1
        libutil.so.1 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libutil.so.1
        libutil.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libutil.so
        libtls.so.17 (libc6,x86-64) => /usr/lib/libtls.so.17
        libtls.so.17 (libc6,x86-64) => /lib/libtls.so.17
        libthread_db.so.1 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libthread_db.so.1
        libthread_db.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libthread_db.so
        libstdc++.so.6 (libc6,x86-64) => /usr/lib/libstdc++.so.6
        libssl.so.45 (libc6,x86-64) => /usr/lib/libssl.so.45
        libssl.so.45 (libc6,x86-64) => /lib/libssl.so.45
        librt.so.1 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/librt.so.1
        librt.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/librt.so
        libresolv.so.2 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libresolv.so.2
        libresolv.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libresolv.so
        libpthread.so.0 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libpthread.so.0
        libpthread.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libpthread.so
        libpcprofile.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libpcprofile.so
        libnss_hesiod.so.2 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnss_hesiod.so.2
        libnss_hesiod.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnss_hesiod.so
        libnss_files.so.2 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnss_files.so.2
        libnss_files.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnss_files.so
        libnss_dns.so.2 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnss_dns.so.2
        libnss_dns.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnss_dns.so
        libnss_db.so.2 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnss_db.so.2
        libnss_db.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnss_db.so
        libnss_compat.so.2 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnss_compat.so.2
        libnss_compat.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnss_compat.so
        libnsl.so.1 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libnsl.so.1
        libmvec.so.1 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libmvec.so.1
        libmvec.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libmvec.so
        libmemusage.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libmemusage.so
        libm.so.6 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libm.so.6
        libgcc_s.so.1 (libc6,x86-64) => /usr/lib/libgcc_s.so.1
        libdl.so.2 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libdl.so.2
        libdl.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libdl.so
        libcrypto.so.43 (libc6,x86-64) => /usr/lib/libcrypto.so.43
        libcrypto.so.43 (libc6,x86-64) => /lib/libcrypto.so.43
        libcrypt.so.1 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libcrypt.so.1
        libcrypt.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libcrypt.so
        libc.so.6 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libc.so.6
        libc.musl-x86_64.so.1 (libc6,x86-64) => /lib/libc.musl-x86_64.so.1
        libanl.so.1 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libanl.so.1
        libanl.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libanl.so
        libSegFault.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libSegFault.so
        libBrokenLocale.so.1 (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libBrokenLocale.so.1
        libBrokenLocale.so (libc6,x86-64, OS ABI: Linux 3.2.0) => /usr/glibc-compat/lib/libBrokenLocale.so
        ld-linux-x86-64.so.2 (libc6,x86-64) => /usr/glibc-compat/lib/ld-linux-x86-64.so.2
        ld-linux-x86-64.so.2 (libc6,x86-64) => /lib/ld-linux-x86-64.so.2

Am I missing something?

luisdavim commented 5 years ago

should I set?

PATH=/usr/glibc-compat/sbin:/usr/glibc-compat/bin:$PATH
Denusdv commented 5 years ago

The same issue when try to run ./java

./java: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

plo- commented 5 years ago

What about this workaround: https://github.com/sgerrand/alpine-pkg-glibc/issues/75#issuecomment-423855554?

sgerrand commented 2 months ago

I'm so sorry for not responding to this bug report sooner.

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.