Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

/bin/sh: 1: ./configure: not found - dockerfile

I need to install Cosign filter for Apacher server.

I need to use this cosign-filter from Confluence, but when my installation hits ./configure it trow as error:

ERROR: Unknown instruction: --ENABLE-APACHE2=/PATH/TO/APACHE2/BIN/APXS

Then i found out this installation for cosign filter with github repository, and because I use ubuntu16.04 in my Docker container I found it more useful, but in this installation I have a problem with autoconf so when he hits RUN autoconf it trows this error:

autoconf: error: no input file
ERROR: Service 'web' failed to build: The command '/bin/sh -c autoconf' returned a non-zero code: 1

Second error will happen when he hits RUN ./configure --enable-apache2= which apx it will trow this error:

Step 19/35 : RUN ./configure --enable-apache2=`which apxs`
 ---> Running in 1e9f870df22f
/bin/sh: 1: ./configure: not found
ERROR: Service 'web' failed to build: The command '/bin/sh -c ./configure --enable-apache2=`which apxs`' returned a non-zero code: 127

Dockerfile configuration:

FROM ubuntu:16.04
FROM python:3.5
ENV PYTHONUNBUFFERED 1

RUN cat /etc/passwd
RUN cat /etc/group

RUN apt-get update && apt-get install -y \
    apache2 \
    apache2-dev \
    libapache2-mod-wsgi-py3 \
    autoconf \
    libssl-dev
RUN apt-get install -y openssl
RUN mkdir /var/run/sshd

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid

# The Umich IAM copy of Cosign includes Apache 2.4 support
RUN wget https://github.com/umich-iam/cosign/archive/master.tar.gz
RUN tar xfz master.tar.gz
RUN cd cosign-master
RUN autoconf
RUN ./configure --enable-apache2=`which apxs`
RUN make
RUN make isntall
RUN mkdir -p /var/cosign/filter
RUN chown www-data:www-data /var/cosign/filter

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code

EXPOSE 80


# Update the default apache site with the config we created.
COPY 000-default.conf /etc/apache2/sites-enabled/000-default.conf

RUN chown -R root:www-data /var/www
RUN chmod u+rwx,g+rx,o+rx /var/www
RUN find /var/www -type d -exec chmod u+rwx,g+rx,o+rx {} +
RUN find /var/www -type f -exec chmod u+rw,g+rw,o+r {} +

#essentially: CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]
CMD ["/tmp/start.sh"]

So is there a way I can fix this so I can install and configure this filter, thanks.

like image 302
copser Avatar asked Jun 09 '17 07:06

copser


1 Answers

Dockerd will run a new container for every instruction except FROM in Dockerfile, so

RUN cd cosign-master
RUN autoconf
RUN ./configure --enable-apache2=`which apxs`

three commands will be executed in three standalone containers, so cd cosign-master command can NOT change the PWD environment for next containers. You can use the absolute path or execute the associated commands in ONE container, which means in ONE instruction.

RUN cd cosign-master \
    && autoconf \
    && ./configure --enable-apache2=`which apxs` \
    && make \
    && make install

PS:

  1. should use one instruction to execute more commands to reduce the number of layers, because each instruction will generate a new layer.
  2. should clean up the intermediate files or softwares to reduce the size of final image.

For examples:

FROM ubuntu:16.04
FROM python:3.5

ENV PYTHONUNBUFFERED=1 \
    APACHE_RUN_USER=www-data \
    APACHE_RUN_GROUP=www-data \
    APACHE_LOG_DIR=/var/log/apache2 \
    APACHE_LOCK_DIR=/var/lock/apache2 \
    APACHE_PID_FILE=/var/run/apache2.pid

RUN set -ex \
    && cat /etc/passwd \
    && cat /etc/group \
    && apt-get update \
    && export COMPILE_TOOLS="autoconf libssl-dev openssl" \
    && apt-get install -y \
               apache2 \
               apache2-dev \
               libapache2-mod-wsgi-py3 \
               ${COMPILE_TOOLS} \
    && wget https://github.com/umich-iam/cosign/archive/master.tar.gz -O /tmp/cosign-master.tar.gz \
    && tar xfz /tmp/cosign-master.tar.gz -C=/tmp \
    && cd /tmp/cosign-master \
    && autoconf \
    && ./configure --enable-apache2=$(which apxs) \
    && make \
    && make install \
    && mkdir -p /var/cosign/filter \
    && chown www-data:www-data /var/cosign/filter \
    && apt-get purge -y ${COMPILE_TOOLS} \
    && rm -rf /var/lib/apt/lists/* \
              /tmp/cosign-master.tar.gz \
              /tmp/cosign-master/*

WORKDIR /code

# The Umich IAM copy of Cosign includes Apache 2.4 support
COPY requirements.txt /code/
COPY . /code
# Update the default apache site with the config we created.
COPY 000-default.conf /etc/apache2/sites-enabled/000-default.conf

RUN mkdir /var/run/sshd \
    && pip install -r requirements.txt \
    && chown -R root:www-data /var/www \
    && chmod u+rwx,g+rx,o+rx /var/www \
    && find /var/www -type d -exec chmod u+rwx,g+rx,o+rx {} + \
    && find /var/www -type f -exec chmod u+rw,g+rw,o+r {} +

EXPOSE 80

#essentially: CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]
CMD ["/tmp/start.sh"]

This will:

  1. reduce layers of your image from about 35 to just 9!
  2. reduce the size of your image immensely, maybe only one third of your origin image.
  3. maybe a little difficult to read :)

Hope this helps!

like image 137
Weike Avatar answered Oct 24 '22 09:10

Weike