104 lines
3.3 KiB
Docker
104 lines
3.3 KiB
Docker
ARG BASE_IMAGE
|
|
FROM ${BASE_IMAGE} AS base
|
|
|
|
## ---
|
|
|
|
FROM base AS patroni
|
|
SHELL [ "/bin/sh", "-ec" ]
|
|
|
|
COPY /scripts/* /usr/local/sbin/
|
|
|
|
COPY /apt/sources.pgdg /etc/apt/sources.list.d/pgdg.sources
|
|
COPY /apt/preferences.pgdg /etc/apt/preferences.d/pgdg
|
|
|
|
COPY /requirements.txt /tmp/
|
|
|
|
ENV DEV_PACKAGES='libffi-dev libpq-dev libyaml-dev'
|
|
# psutil
|
|
ENV CIBUILDWHEEL=1
|
|
# pyyaml
|
|
ENV PYYAML_FORCE_CYTHON=1
|
|
|
|
RUN w=$(mktemp -d) ; : "${w:?}" ; \
|
|
{ apt-mark showauto ; apt-mark showmanual ; } | sort -uV > "$w/t0" ; \
|
|
printf '%s\n' ${DEV_PACKAGES} | sort -uV > "$w/t1" ; \
|
|
apt-install.sh ${DEV_PACKAGES} ; \
|
|
{ apt-mark showauto ; apt-mark showmanual ; } | sort -uV > "$w/t2" ; \
|
|
set +e ; \
|
|
grep -Fxv -f "$w/t0" "$w/t2" > "$w/t3" ; \
|
|
grep -Fxv -f "$w/t1" "$w/t3" > "$w/t4" ; \
|
|
grep -Ev -e '-(dev|doc)$' "$w/t4" > "${PYTHON_SITE_PACKAGES}/apt-deps.txt" ; \
|
|
set -e ; \
|
|
rm -rf "$w/" ; unset w ; \
|
|
apt-install.sh build-essential ; \
|
|
pip-env.sh pip install 'cython' ; \
|
|
pip-env.sh pip install \
|
|
--no-binary 'cffi,psutil,pyyaml' \
|
|
-r /tmp/requirements.txt \
|
|
; \
|
|
pip-env.sh pip uninstall -y 'cython' ; \
|
|
python-rm-cache.sh /usr/local ; \
|
|
rm -rf \
|
|
"${PYTHON_SITE_PACKAGES}/etcd/tests" \
|
|
"${PYTHON_SITE_PACKAGES}/psutil/tests" \
|
|
; \
|
|
find "${PYTHON_SITE_PACKAGES}/" -type f -name '*.so*' -exec ls -l {} + ; \
|
|
echo ; \
|
|
find "${PYTHON_SITE_PACKAGES}/" -type f -name '*.so*' -printf '%p\0' \
|
|
| sed -zE '/rust/d' \
|
|
| xargs -0r strip --verbose --strip-debug --strip-unneeded ; \
|
|
echo ; \
|
|
find "${PYTHON_SITE_PACKAGES}/" -type f -name '*.so*' -exec ls -l {} + ; \
|
|
apt-remove.sh build-essential ; \
|
|
apt-clean.sh
|
|
|
|
## avoid changing already present packages
|
|
RUN find "${PYTHON_SITE_PACKAGES}/" -mindepth 1 -maxdepth 1 -printf '%P\0' \
|
|
| sed -zEn \
|
|
-e '/^((pip|setuptools|wheel)-.+\.dist-info|distutils-precedence\.pth|_distutils_hack|pip|pkg_resources|setuptools|wheel)$/p' \
|
|
| env -C "${PYTHON_SITE_PACKAGES}" xargs -0r \
|
|
rm -rf
|
|
|
|
## ---
|
|
|
|
FROM base AS deps
|
|
SHELL [ "/bin/sh", "-ec" ]
|
|
|
|
COPY /Dockerfile.deps /usr/local/share/
|
|
|
|
COPY /scripts/* /usr/local/sbin/
|
|
|
|
COPY /apt/sources.pgdg /etc/apt/sources.list.d/pgdg.sources
|
|
COPY /apt/preferences.pgdg /etc/apt/preferences.d/pgdg
|
|
|
|
COPY --from=patroni /usr/local/bin/ /usr/local/bin/
|
|
COPY --from=patroni /${PYTHON_SITE_PACKAGES}/ /${PYTHON_SITE_PACKAGES}/
|
|
|
|
## install missing dependencies for Python site-packages
|
|
RUN f="${PYTHON_SITE_PACKAGES}/apt-deps.txt" ; \
|
|
[ -s "$f" ] || exit 0 ; \
|
|
xargs -a "$f" apt-install.sh ; \
|
|
apt-clean.sh
|
|
|
|
## set up locales!
|
|
RUN _lang=en_US.UTF8 ; \
|
|
{ \
|
|
echo "locales locales/default_environment_locale select ${LANG}" ; \
|
|
echo "locales locales/locales_to_be_generated multiselect ${LANG} UTF-8" ; \
|
|
} | debconf-set-selections ; \
|
|
f=/etc/dpkg/dpkg.cfg.d/docker ; \
|
|
if [ -f "$f" ] ; then \
|
|
sed -Ei '/\/usr\/share\/locale/d' "$f" ; \
|
|
fi ; \
|
|
echo "LANG=${_lang}" > /etc/default/locale ; \
|
|
apt-install.sh locales ; apt-clean.sh ; \
|
|
grep -Fixq "${_lang} UTF-8" /etc/locale.gen || { \
|
|
echo "${_lang} UTF-8" >> /etc/locale.gen ; \
|
|
locale-gen ; \
|
|
} ; \
|
|
locale -a | grep -Fixq "${_lang}"
|
|
ENV LANG=en_US.UTF8
|
|
|
|
RUN find /usr/local/sbin/ ! -type d -ls -delete ; \
|
|
jdupes -1LSpr /usr/
|