Apache2.4.20 Ошибка компиляции: / usr / bin / ld: не удается найти -lssl и -lcrypto - PullRequest
0 голосов
/ 01 мая 2019

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

Любая помощь или советы высоко ценятся!

1 Ответ

0 голосов
/ 02 мая 2019

Вы создаете свою собственную версию OpenSSL, но не добавляете путь, по которому вы устанавливаете openssl (скорее всего, / usr / local) в свои LDFLAGS. Я думаю --with-ssl=/usr/local должен исправить ваши проблемы

...