Мне нужно собрать libvips с поддержкой Poppler для AWS Lambda, и я хочу, чтобы Poppler использовал пользовательские установки библиотек, таких как libtiff
, libpng
, fontconfig
, et c.
Как я могу настроить сборку Poppler для использования моих пользовательских версий установленной библиотеки из /opt
вместо предустановленной из \usr
?
Я использую Docker образ lambci/lambda:build-go1.x
для сборки Poppler и необходимых библиотек из исходников. Такие библиотеки, как libtiff
, libpng
и fontconfig
, предварительно установлены на AWS Lambda, но их версии устарели и имеют известные проблемы с безопасностью. Я хочу добавить к слою последнюю версию и использовать эту версию вместо предустановленной. Я устанавливаю /opt
, то есть использую ./configure --prefix=/opt
или cmake .. -DCMAKE_INSTALL_PREFIX=/opt
, так как слои извлекаются в /opt
во время выполнения.
При сборке Poppler Poppler берет старые версии из /usr/lib64
вместо более новых из /opt/lib
.
Вывод сборки Poppler:
-- Found Freetype: /usr/lib64/libfreetype.so (found version "2.3.11")
-- Checking for module 'fontconfig'
-- Found fontconfig, version 2.13.1
-- Found Fontconfig: /usr/lib64/libfontconfig.so <== should be /opt/lib/libfontconfig.so
-- Found JPEG: /usr/lib64/libjpeg.so (found version "62")
-- Found ZLIB: /usr/lib64/libz.so (found version "1.2.8")
-- Found PNG: /usr/lib64/libpng.so (found version "1.2.49") <== should be /opt/lib/libpng.so, "1.6.37"
-- Found TIFF: /usr/lib64/libtiff.so (found version "4.0.3")
Соответствующие части моего Dockerfile:
ENV BUILD_DIR="/tmp/build"
ENV INSTALL_DIR="/opt"
ENV PKG_CONFIG_PATH="${INSTALL_DIR}/lib64/pkgconfig:${INSTALL_DIR}/lib/pkgconfig" \
PKG_CONFIG="/usr/bin/pkg-config" \
PATH="${INSTALL_DIR}/bin:${PATH}"
ENV LD_LIBRARY_PATH="${INSTALL_DIR}/lib64:${INSTALL_DIR}/lib"
ENV LIBPNG_VERSION=1.6.37
ENV LIBPNG_BUILD_DIR=${BUILD_DIR}/libpng
RUN set -Eeuxo pipefail \
&& mkdir -p ${LIBPNG_BUILD_DIR} \
&& curl -L https://downloads.sourceforge.net/libpng/libpng-${LIBPNG_VERSION}.tar.xz \
| tar xJC ${LIBPNG_BUILD_DIR} --strip-components=1
WORKDIR ${LIBPNG_BUILD_DIR}/
RUN set -Eeuxo pipefail \
&& ./configure \
--prefix=${INSTALL_DIR} \
--disable-static \
&& make V=0 \
&& make install
ENV POPPLER_VERSION=0.89.0
ENV POPPLER_BUILD_DIR=${BUILD_DIR}/poppler
RUN set -Eeuxo pipefail \
&& mkdir -p ${POPPLER_BUILD_DIR}/build \
&& curl -L https://poppler.freedesktop.org/poppler-${POPPLER_VERSION}.tar.xz \
| tar xJC ${POPPLER_BUILD_DIR} --strip-components=1
WORKDIR ${POPPLER_BUILD_DIR}/build/
RUN set -Eeuxo pipefail \
&& LDFLAGS="-L${INSTALL_DIR}/lib64 -L${INSTALL_DIR}/lib" \
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} \
-DENABLE_UNSTABLE_API_ABI_HEADERS=ON \
-DENABLE_GLIB=ON \
-DENABLE_CPP=OFF \
-DENABLE_QT5=OFF \
-DENABLE_SPLASH=OFF \
-DPNG_INCLUDE_DIR=${INSTALL_DIR}/include \
-DPNG_LIBRARIES=${INSTALL_DIR}/lib64 \
&& make V=0 \
&& make install
Мой полный Dockerfile может быть видно здесь .