В настоящее время я занят проектом бакалавра, касающимся различий между веб-серверами.Чтобы обнаружить их, я пытаюсь настроить коллекцию контейнеров Docker.В настоящее время у меня уже есть несколько серверов Nginx, скомпилированных из исходного кода и работающих.Тем не менее, то же самое с Apache кажется сложной задачей.У меня совсем нет опыта компиляции, кроме докер-файлов Nginx.
Я пытаюсь скомпилировать apache 2.4.20 из исходного кода, используя OpenSSL 1.0.2.
Я попробовал следующий dockerfile (который работал для Apache 2.4.39 с другой версией OpenSSL):
FROM debian
# Install build requirements (or grab from docker cache)
RUN apt-get update && apt-get install wget git subversion make \
libpcre3-dev \
libpcre++-dev \
libxml2-dev \
libexpat1-dev \
python \
autoconf \
libtool-bin \
libpcre3-dev -y && \
git clone https://github.com/apache/httpd.git
ENV OPENSSL_VERSION=1.0.2
ARG OPENSSL_VERSION
ENV APACHE_VERSION=2.4.20
ARG APACHE_VERSION
# Install APACHE
# RUN wget https://archive.apache.org/dist/httpd/httpd-${APACHE_VERSION}.tar.gz && \
# tar zxf httpd-${APACHE_VERSION}.tar.gz && \
RUN wget https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz && tar xzvf openssl-${OPENSSL_VERSION}.tar.gz && \
cd openssl-${OPENSSL_VERSION} && ./Configure linux-x86_64 shared -fpic && make && make install && \
rm -rf /*.tar.gz
RUN cd /httpd && git checkout tags/${APACHE_VERSION} && svn co http://svn.apache.org/repos/asf/apr/apr/trunk srclib/apr && ./buildconf
RUN cd httpd && ./configure \
--enable-dav \
--enable-so \
--enable-maintainer-mode \
--prefix=/usr/local/apache2 \
--with-mpm=worker \
--enable-layout=Apache \
--enable-mods-shared=most \
--with-included-apr \
--enable-static-support \
--enable-ssl=static \
--with-ssl=../openssl-${OPENSSL_VERSION} && \
make && \
make install
# Remove build dependencies
RUN apt-get remove wget git subversion make \
libpcre3-dev \
libpcre++-dev \
libxml2-dev \
python \
autoconf \
libtool-bin \
libpcre3-dev -y && \
apt-get autoremove -y && \
rm -rf /httpd
# Copy SSL certs and configs
RUN mkdir -p /usr/local/apache2/ssl && rm -f /usr/local/apache2/conf/httpd.conf && rm -f /usr/local/apache2/conf/extra/httpd-ssl.conf
COPY ./shared/apache/apache.crt /usr/local/apache2/ssl/apache.crt
COPY ./shared/apache/apache.key /usr/local/apache2/ssl/apache.key
COPY ./shared/apache/conf/httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./shared/apache/conf/extra/httpd-ssl.conf /usr/local/apache2/conf/extra/httpd-ssl.conf
EXPOSE 80
EXPOSE 443
CMD ["./usr/local/apache2/bin/httpd","-DFOREGROUND"]
Я получил следующую ошибку при выполнении команды make
в каталоге httpd.
/httpd/srclib/apr/libtool --silent --mode=link gcc -g -O2 -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -pthread -Wpointer-arith -Wdeclaration-after-statement -Werror=declaration-after-statement -Wformat -Wformat-security -Werror=format-security -L/openssl-1.0.2/lib -lssl -lcrypto -lcrypt -lrt -lpthread -ldl -lexpat \
-o ab -static ab.lo /httpd/srclib/apr/libapr-2.la -lcrypt -lrt -lcrypt -lpthread -ldl -lexpat -lm
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
collect2: error: ld returned 1 exit status
Makefile:73: recipe for target 'ab' failed
make[2]: Leaving directory '/httpd/support'
make[2]: *** [ab] Error 1
Я пробовал более старые и более новые версии openssl, но это не помоглоиметь значение.Более новые версии выдавали устаревшие предупреждения (которые были выданы в качестве ошибок компилятором) ранее в процессе компиляции.Более старые версии давали мне ту же ошибку, или когда они были действительно старыми, из-за отсутствующих методов.
Я также пытался установить libssl-dev
, как предложено в другом потоке, но это также не работало.
Любая помощь или советы высоко ценятся!