Установите Saxon- C PHP ext на Alpine Linux - PullRequest
0 голосов
/ 19 апреля 2020

Я запускаю официальный php:7.4.5-fpm-alpine docker образ и хотел бы установить расширение Saxon / C PHP. В настоящее время предоставленный Saxon / C двоичный файл Linux компилируется с glibc, тогда как Alpine использует musl.

/tmp # ldd libsaxon-HEC-setup64-v1.2.1
        /lib64/ld-linux-x86-64.so.2 (0x7f3a05c6e000)
        libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f3a05c6e000)
        libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f3a05c6e000)
        libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f3a05c6e000)

, чтобы иметь возможность запустить двоичный файл и попытаться установить Расширение Saxon / C PHP, я попытался установить glibc в качестве виртуальных сборок и продолжил обычный процесс установки оттуда:

FROM php:7.4.5-fpm-alpine

ARG saxon='libsaxon-HEC-setup64-v1.2.1'
RUN set -eux; \
    wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub; \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.31-r0/glibc-2.31-r0.apk; \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.31-r0/glibc-bin-2.31-r0.apk; \
    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.31-r0/glibc-i18n-2.31-r0.apk; \
    apk add --update --no-cache --virtual .build-deps \
        glibc-2.31-r0.apk glibc-bin-2.31-r0.apk glibc-i18n-2.31-r0.apk \
        g++ \
        gcc \
        make \
        autoconf \
        libc-dev \
        libgcc \
        libstdc++ \
        libstdc++6 \
        pkgconfig \
        unzip \
    ; \
    ## fetch Saxon
    wget --quiet https://www.saxonica.com/saxon-c/${saxon}.zip; \
    mkdir saxon; \
    unzip -qq ${saxon}.zip -d saxon; \
    rm ${saxon}.zip; \
    ## install Saxon
    ./saxon/${saxon} -batch -dest /opt/saxon; \
    rm -r saxon; \
    ## prepare Saxon
    ln -s /opt/saxon/libsaxonhec.so /usr/lib/; \
    ln -s /opt/saxon/rt /usr/lib/; \
    ldconfig /etc/ld.so.conf.d; \
    ## Install PHP extension
    cd /opt/saxon/Saxon.C.API; \
    phpize; \
    ./configure --enable-saxon; \
    make; \
    make install; \
    docker-php-ext-enable saxon;
    apk del .build-deps; \

Образ docker создается успешно, однако каждый PHP процесс возвращает Segmentation fault. В конце этапа я снова удаляю .build-deps, включая glibc, но при удалении этой строки нет никаких изменений в результате.

Возможно (только предположение), потому что libsaxonhec.so все еще скомпилировано с glibc?

/opt/saxon # ldd libsaxonhec.so
        /lib64/ld-linux-x86-64.so.2 (0x7f7ee3952000)
        libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f7ee3952000)
        libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f7ee3952000)
        libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f7ee3952000)
Error relocating libsaxonhec.so: pthread_yield: symbol not found
Error relocating libsaxonhec.so: gnu_get_libc_version: symbol not found
Error relocating libsaxonhec.so: gnu_get_libc_release: symbol not found
Error relocating libsaxonhec.so: getcontext: symbol not found

Мой вопрос: возможно ли использовать / собрать / установить Saxon / C в дистрибутив Alpine Linux? Возможно я делаю что-то не так в шагах выше или мне не хватает зависимости. Я предпочел бы вообще не устанавливать glibc и компилировать из источника с musl, но я не уверен, возможно ли это или разумный запрос вообще.

...