Как установить модуль mod_auth_openidc на сервер Apache, работающий на Docker

Я пытаюсь добавить модуль mod_auth_openidc на сервер Apache, работающий в Docker. После добавления LoadModule auth_openidc_module modules/mod_auth_openidc.so я создаю образ и запускаю его, получая такую ​​ошибку:

httpd: Syntax error on line 69 of /usr/local/apache2/conf/httpd.conf: Cannot load modules/mod_auth_openidc.so into server: libcjose.so.0: cannot open shared object file: No such file or directory

Итак, я загрузил эту зависимость и добавил необходимый оператор LoadModule:

LoadModule libcjose_module modules/libcjose.so.0

Теперь ошибка связана с libjansson.so.4:

httpd: Syntax error on line 68 of /usr/local/apache2/conf/httpd.conf: Cannot load modules/libcjose.so.0 into server: libjansson.so.4: cannot open shared object file: No such file or directory

Я повторил предыдущие шаги, загрузив libjansson.so.4 с https://packages.debian.org/wheezy/libjansson4, добавив его в файл Dockerfile, конфигурацию Apache LoadModule libjansson_module modules/libjansson.so.4 и:

httpd: Syntax error on line 67 of /usr/local/apache2/conf/httpd.conf: Can't locate API module structure `libjansson_module' in file /usr/local/apache2/modules/libjansson.so.4: /usr/local/apache2/modules/libjansson.so.4: undefined symbol: libjansson_module

Так как я могу загрузить модуль jansson ???

Это мой Dockerfile:

FROM httpd:2.4
RUN apt-get update && apt-get install -y \
curl
COPY ./libjansson.so.4 /usr/local/apache2/modules/libjansson.so.4
COPY ./libcjose.so.0 /usr/local/apache2/modules/libcjose.so.0
COPY ./mod_auth_openidc.so /usr/local/apache2/modules/mod_auth_openidc.so
COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf

И httpd.conf:

LoadModule libjansson_module modules/libjansson.so.4
LoadModule libcjose_module modules/libcjose.so.0
LoadModule auth_openidc_module modules/mod_auth_openidc.so

person codependent    schedule 07.03.2018    source источник


Ответы (2)


Вместо того, чтобы вручную загружать необходимые библиотеки, я переместил этот процесс в Dockerfile, теперь образ создается правильно:

FROM httpd:2.4

COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./server.crt /usr/local/apache2/conf/
COPY ./server.key /usr/local/apache2/conf/
COPY ./mod_auth_openidc.so /usr/local/apache2/modules/mod_auth_openidc.so

RUN apt-get update && apt-get install -y curl && apt-get install -y libjansson4 && apt-get install -y wget && apt-get install -y libhiredis0.10 && apt-get install -y apache2-bin
RUN wget https://github.com/zmartzone/mod_auth_openidc/releases/download/v2.3.0/libcjose0_0.5.1-1.jessie.1_amd64.deb && dpkg -i libcjose0_0.5.1-1.jessie.1_amd64.deb
RUN wget https://github.com/zmartzone/mod_auth_openidc/releases/download/v2.3.3/libapache2-mod-auth-openidc_2.3.3-1.jessie.1_amd64.deb && \
dpkg -i libapache2-mod-auth-openidc_2.3.3-1.jessie.1_amd64.deb
person codependent    schedule 07.03.2018
comment
откуда берется ./mod_auth_openidc.so? - person stowns; 29.11.2018
comment
Он входит в состав модуля, например: https://github.com/zmartzone/mod_auth_openidc/releases/download/v2.3.9/mod_auth_openidc-2.3.9-apache-2.4.x-win64.zip - person codependent; 29.11.2018
comment
да, просто запутался, потому что я думал, что последняя строка 'RUN' вашего примера устанавливает mod_auth_openidc.so RUN wget https://github.com/zmartzone/mod_auth_openidc/releases/download/v2.3.3/libapache2-mod-auth-openidc_2.3.3-1.jessie.1_amd64.deb && \ dpkg -i libapache2-mod-auth-openidc_2.3.3-1.jessie.1_amd64.deb - person stowns; 03.12.2018

Вы можете использовать https://github.com/zmartzone/mod_auth_openidc/blob/master/Dockerfile-alpine, чтобы создать образ, а затем просто настроить параметры публикации, специфичные для вашего сайта.

FROM alpine:3.10

ENV MOD_AUTH_OPENIDC_REPOSITORY https://github.com/zmartzone/mod_auth_openidc.git

ENV MOD_AUTH_OPENIDC_BRANCH master

ENV BUILD_DIR /tmp/mod_auth_openidc

ENV APACHE_LOG_DIR /var/log/apache2

ENV APACHE_DEFAULT_CONF /etc/apache2/httpd.conf

# add testing repository (for cjose library)
RUN echo "http://nl.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories

# ADD source
RUN mkdir ${BUILD_DIR}

# add dependencies, build and install mod_auth_openidc, need atomic operation for image size
RUN apk update && apk add --no-cache \
  apache2 \
  apache2-proxy \
  wget \
  jansson \
  hiredis \
  cjose \
  cjose-dev \
  git \
  autoconf \
  build-base \
  automake \
  curl \
  apache2-dev \
  curl-dev \
  pcre-dev \
  libtool \
  && \
  cd ${BUILD_DIR} && \
  git clone -b ${MOD_AUTH_OPENIDC_BRANCH} ${MOD_AUTH_OPENIDC_REPOSITORY} && \
  cd mod_auth_openidc && \
  ./autogen.sh && \
  ./configure CFLAGS="-g -O0" LDFLAGS="-lrt" && \
  make test && \
  make install && \
  cd ../.. && \
  rm -fr ${BUILD_DIR} && \
  apk del git cjose-dev apache2-dev autoconf automake build-base wget curl-dev pcre-dev libtool

# configure apache 
RUN  apk add --no-cache sed && \
  echo "LoadModule auth_openidc_module /usr/lib/apache2/mod_auth_openidc.so" >>  ${APACHE_DEFAULT_CONF} && \
  ln -sfT /dev/stderr "${APACHE_LOG_DIR}/error.log" && \
  ln -sfT /dev/stdout "${APACHE_LOG_DIR}/access.log" && \
  ln -sfT /dev/stdout "${APACHE_LOG_DIR}/other_vhosts_access.log" && \
  chown -R --no-dereference "apache:users" "${APACHE_LOG_DIR}" && \
  apk del sed

# https://httpd.apache.org/docs/2.4/stopping.html#gracefulstop
# stop gracefully when docker stops, create issue with interactive mode because it's the signal use by the docker engine on windows.
STOPSIGNAL WINCH

# port to expose, referes to the Listen 80 in the embedded httpd.conf
EXPOSE 80

# launch apache
CMD exec /usr/sbin/httpd -D FOREGROUND -f ${APACHE_DEFAULT_CONF}
person Archimedes Trajano    schedule 04.06.2020