FROM registry.yandex.net/ubuntu:trusty as base_image

FROM base_image as hosts_modified_base
RUN sed -i 's|http://archive.ubuntu.com|http://mirror.yandex.ru|g' /etc/apt/sources.list

FROM hosts_modified_base as pyflame_builder
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -qq && \
    apt-get install -y -qq autoconf automake autotools-dev g++ git pkg-config python-dev python3-dev libtool make && \
    apt-get clean -qq
RUN git clone https://github.com/uber/pyflame.git --branch 'v1.6.3'
WORKDIR pyflame
RUN ./autogen.sh
RUN ./configure
RUN make

FROM hosts_modified_base as perf_builder
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update -qq && \
    apt-get install -y -qq \
        git \
        # for perf to compile:
        binutils-dev binutils-multiarch-dev bison elfutils flex libaudit-dev \
        libdw-dev libelf1 libelf-dev libgtk2.0-dev libiberty-dev liblzma-dev \
        libnuma-dev libnuma-dev libperl-dev libslang2 libslang2-dev \
        libunwind* libunwind8 libunwind8-dev python-dev && \
    apt-get clean -qq
RUN git clone https://github.com/torvalds/linux.git --depth 1 --branch v$(uname -r | cut -d'.' -f -2)
WORKDIR /linux/tools/perf
RUN make
RUN make install

FROM hosts_modified_base
ENV DEBIAN_FRONTEND noninteractive

# troubleshooting
COPY --from=perf_builder /linux/tools/perf/perf /usr/bin/perf
COPY --from=pyflame_builder /pyflame/src/pyflame /usr/bin/pyflame

# Установка внутри круглых скобок нужна, чтобы запустить отдельный шелл.
# Из-за кривых постинстов эта установка пакетов завершится ошибкой. Следующие команды чинят их и завершают установку.
# Благодаря отдельному шеллу, в родительский отдаётся код выхода последней команды, которая должна отрабатывать успешно.
RUN ( \
    apt-get update -qq \
    && apt-get install -y -qq --force-yes \
        syslog-ng \
        syslog-ng-core \
        syslog-ng-include-tpl3 \
        syslog-ng-include; \
    sed -i '/kmsg/d' /etc/syslog-ng/syslog-ng.conf /etc/syslog-ng/syslog-ng-default.tpl; \
    echo '#!/bin/true' | tee /etc/init.d/syslog-ng; \
    apt-get install -f -qq \
)

# Генерим необходимые локали
RUN locale-gen ru_RU.UTF-8 \
    && locale-gen tr_TR.UTF-8 \
    && locale-gen en_GB.UTF-8 \
    && update-locale

# We can't install from esm.ubuntu.com (paid support, ESM - Extended Security Maintenance)
# So exclude it! This file appears only here. Base image doesn't contain it.
RUN rm -f /etc/apt/sources.list.d/ubuntu-esm-infra-trusty.list

# Install requirements
COPY debian-requirements.txt /tmp/requirements.txt
RUN apt-get update -qq \
    && cat /tmp/requirements.txt | xargs apt-get install -y -qq --force-yes \
    && apt-get clean -qq \
    && rm /tmp/requirements.txt

# Juggler
RUN apt-get install -y -qq --force-yes juggler-client=1.4.53 \
    && rm /etc/cron.d/juggler-client \
    && apt-get clean -qq
COPY juggler/ /etc/juggler/

# push-client
COPY statbox-push-client /etc/yandex/statbox-push-client/
COPY cron/cleanup-push-client-files /etc/cron.d/

# Supervisor
COPY supervisord /usr/bin/supervisord
COPY supervisorctl /usr/bin/supervisorctl
RUN mkdir /var/log/supervisor
COPY supervisor/supervisord.conf /etc/supervisor/supervisord.conf
COPY supervisor/conf.d/* /etc/supervisor/conf.d/

# nginx
RUN mkdir -p /etc/nginx/auth
COPY nginx/nginx.conf /etc/nginx/
COPY nginx/listen /etc/nginx/
COPY nginx/listen_tvm /etc/nginx/
COPY nginx/proxy_params /etc/nginx/
COPY nginx/conf.d/* /etc/nginx/conf.d/
COPY nginx/auth/* /etc/nginx/auth/
COPY nginx/pre_start.sh /etc/nginx/
# RASPTICKETS-10750
RUN install -d -o www-data -g www-data /var/log/nginx \
    && touch /var/log/nginx/access.log \
    && chown -R www-data:www-data /var/log/nginx/access.log

# logrotate
COPY logrotate/* /etc/logrotate.d/
COPY cron/yandex-logrotate /etc/cron.d/
RUN mkdir /var/log/logrotate \
    && if [ -e /etc/cron.daily/logrotate ]; then rm /etc/cron.daily/logrotate; fi;

# smailik
COPY smailik/smailik-preparer.conf /etc/smailik/
COPY smailik/preparer-modules/xml_to_mime.conf /etc/smailik/preparer-modules/
# running it to ipv6 support for smailik (inserting the line to be first in file but left the other part unchanged)
RUN sed -i '1i IPV6 ON' /etc/smailik/smailik.conf

# Syslog
RUN mkdir -p /etc/syslog-ng \
    && /usr/bin/syslog-ng-inc -i /etc/syslog-ng/conf-enabled -t /etc/syslog-ng/syslog-ng-default.tpl > /etc/syslog-ng/syslog-ng.conf

# copy solomon configs
RUN mkdir -p /etc/solomon
COPY solomon/ /etc/solomon/

# jaeger agent
RUN mkdir -p /bin
RUN curl --silent https://proxy.sandbox.yandex-team.ru/1317359659 -o /bin/jaeger-agent
RUN chmod +x /bin/jaeger-agent
RUN mkdir -p /var/log/jaeger-agent
RUN mkdir -p /etc/jaeger-agent
COPY jaeger-agent/ /etc/jaeger-agent/

# Fetch racktables
COPY fetch_racktables /usr/local/bin
COPY cron/fetch-racktables /etc/cron.d/fetch-racktables

# copy pre_start scripts
RUN mkdir /bin/pre_start
COPY pre_start/ /bin/pre_start/
RUN chmod +x /bin/pre_start/*

# common tools
COPY tools/timetail-json /usr/bin/

# bin
COPY bin/docker-entrypoint.sh /bin/docker-entrypoint.sh
COPY bin/docker-start.sh /bin/docker-start.sh

ENV REQUESTS_CA_BUNDLE /etc/ssl/certs/ca-certificates.crt

ENV SUPERVISOR_PUSH_CLIENT_CONFIG /etc/supervisor/conf.d/05-push-client.conf

ENTRYPOINT ["/bin/docker-entrypoint.sh"]

CMD /bin/docker-start.sh
