forked from someengineering/fixinventory
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dockerfile.resotobase
147 lines (135 loc) · 5.67 KB
/
Dockerfile.resotobase
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# This is the resoto base container. It includes CPython and is used
# as the common base for all the other containers. The main size contributor
# is the resoto-venv-python3 virtual environment which
# is required for all resoto packages. That's why size wise it made sense to
# use the same base package for all containers.
ARG UI_IMAGE_TAG=latest
FROM docker.io/arangodb/arangodb:3.9.1-noavx as arangodb-amd64-env
FROM docker.io/programmador/arangodb:3.9.0-devel as arangodb-arm64-env
FROM someengineering/resotopython:1.0.4 as build-env
ENV DEBIAN_FRONTEND=noninteractive
ARG TARGETPLATFORM
ARG BUILDPLATFORM
ARG TESTS
ARG SOURCE_COMMIT
ENV PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUN echo "I am running on ${BUILDPLATFORM}, building for ${TARGETPLATFORM}"
# Prepare whl build env
RUN mkdir -p /build /build-python
# Build Resoto
COPY requirements-extra.txt /usr/src/requirements-extra.txt
COPY resotolib /usr/src/resotolib
COPY resotocore /usr/src/resotocore
COPY resotoworker /usr/src/resotoworker
COPY resotometrics /usr/src/resotometrics
COPY resotoshell /usr/src/resotoshell
COPY plugins /usr/src/plugins
WORKDIR /usr/src/resotocore
RUN /usr/local/python/bin/python3 -m venv /build/jupyterlite-venv-python3
RUN . /build/jupyterlite-venv-python3/bin/activate && python -m pip install -r requirements-jupyterlite.txt
RUN . /build/jupyterlite-venv-python3/bin/activate && python -m jupyter lite build --config jupyter_lite_config.json
# Build binary wheels
WORKDIR /usr/src
RUN . /usr/local/resoto-venv-python3/bin/activate && pip install -r requirements-extra.txt
RUN . /usr/local/resoto-venv-python3/bin/activate && find plugins/ -maxdepth 1 -mindepth 1 -type d -print0 | xargs -0 python -m pip install ./resotolib ./resotocore ./resotoworker ./resotometrics ./resotoshell
# Download and install ArangoDB client on x86 builds (there are no official ArangoDB binaries for arm64)
WORKDIR /tmp/arangodb
RUN mkdir -p /tmp/arangodb/amd64 /tmp/arangodb/arm64
COPY --from=arangodb-amd64-env /usr/bin/arangodump /tmp/arangodb/amd64/
COPY --from=arangodb-amd64-env /usr/bin/arangorestore /tmp/arangodb/amd64/
COPY --from=arangodb-arm64-env /usr/bin/arangodump /tmp/arangodb/arm64/
COPY --from=arangodb-arm64-env /usr/bin/arangorestore /tmp/arangodb/arm64/
RUN if [ "${TARGETPLATFORM}" = "linux/amd64" ]; then \
cp /tmp/arangodb/amd64/* /usr/local/bin/; \
elif [ "${TARGETPLATFORM}" = "linux/arm64" ]; then \
cp /tmp/arangodb/arm64/* /usr/local/bin/; \
else \
echo "Building for unknown platform - not copying ArangoDB client binaries"; \
fi
# Download AWS CLI
WORKDIR /build/awscli
RUN if [ "${TARGETPLATFORM}" = "linux/amd64" ]; then \
export AWSCLI_ARCH=x86_64; \
elif [ "${TARGETPLATFORM}" = "linux/arm64" ]; then \
export AWSCLI_ARCH=aarch64; \
else \
export AWSCLI_ARCH=x86_64; \
fi; \
curl -L -o /tmp/awscliv2.zip https://awscli.amazonaws.com/awscli-exe-linux-${AWSCLI_ARCH}.zip
RUN unzip /tmp/awscliv2.zip
RUN aws/install -i /usr/local/aws-cli -b /usr/local/bin
# Copy image config and startup files
WORKDIR /usr/src/resoto
COPY dockerV2/defaults /usr/local/etc/resoto/defaults
COPY dockerV2/common /usr/local/etc/resoto/common
COPY dockerV2/bootstrap /usr/local/sbin/bootstrap
COPY dockerV2/postflight /usr/local/sbin/postflight
COPY dockerV2/resh-shim /usr/local/bin/resh-shim
COPY dockerV2/resh-wait /usr/local/bin/resh-wait
COPY dockerV2/resotocore-shim /usr/local/bin/resotocore-shim
COPY dockerV2/resotoworker-shim /usr/local/bin/resotoworker-shim
COPY dockerV2/resotometrics-shim /usr/local/bin/resotometrics-shim
RUN chmod 755 \
/usr/local/sbin/bootstrap \
/usr/local/sbin/postflight \
/usr/local/bin/resh-shim \
/usr/local/bin/resotocore-shim \
/usr/local/bin/resotoworker-shim \
/usr/local/bin/resotometrics-shim
RUN if [ "${TESTS:-false}" = true ]; then \
shellcheck -a -x -s bash -e SC2034 \
/usr/local/sbin/bootstrap \
; \
fi
COPY dockerV2/dnsmasq.conf /usr/local/etc/dnsmasq.conf
RUN echo "${SOURCE_COMMIT:-unknown}" > /usr/local/etc/git-commit.HEAD
# Setup main image
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
ENV LANG="en_US.UTF-8"
ENV TERM="xterm-256color"
ENV COLORTERM="truecolor"
ENV EDITOR="vim"
ENV RESOTOSHELL_DOWNLOAD_DIRECTORY="/home/resoto/downloads"
COPY --from=build-env /usr/local /usr/local
ENV PATH=/usr/local/python/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
WORKDIR /
RUN groupadd -g "${PGID:-0}" -o resoto \
&& useradd -g "${PGID:-0}" -u "${PUID:-0}" -o --create-home resoto \
&& apt-get update \
&& apt-get -y --no-install-recommends install apt-utils \
&& apt-get -y dist-upgrade \
&& apt-get -y --no-install-recommends install \
dumb-init \
iproute2 \
dnsmasq \
libffi7 \
openssl \
procps \
dateutils \
curl \
jq \
cron \
ca-certificates \
openssh-client \
locales \
unzip \
nano \
nvi \
vim \
joe \
&& echo 'LANG="en_US.UTF-8"' > /etc/default/locale \
&& echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
&& mkdir -p /var/run/resoto /home/resoto/downloads \
&& rm -f /bin/sh \
&& ln -s /bin/bash /bin/sh \
&& locale-gen \
&& /usr/local/sbin/postflight \
&& ln -s /usr/local/bin/resh-shim /usr/bin/resh \
&& ln -s /usr/local/bin/resotocore-shim /usr/bin/resotocore \
&& ln -s /usr/local/bin/resotoworker-shim /usr/bin/resotoworker \
&& ln -s /usr/local/bin/resotometrics-shim /usr/bin/resotometrics \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ENTRYPOINT ["/bin/dumb-init", "--", "/usr/local/sbin/bootstrap"]
CMD ["/bin/bash"]