Я запускаю официальный 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
, но я не уверен, возможно ли это или разумный запрос вообще.