forked from someengineering/fixinventory
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
186 lines (167 loc) · 7.34 KB
/
Dockerfile
File metadata and controls
186 lines (167 loc) · 7.34 KB
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
FROM phusion/baseimage:focal-1.0.0 as build-env
ENV DEBIAN_FRONTEND=noninteractive
ARG TESTS
ARG SOURCE_COMMIT
ARG PYTHON_VERSION=3.10.0
ARG PYPY_VERSION=7.3.7
ARG ARANGODB_VERSION=3.8.1
ARG PROMETHEUS_VERSION=2.30.1
ENV PATH=/usr/local/db/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Install Build dependencies
RUN apt-get update
RUN apt-get -y dist-upgrade
RUN apt-get -y install apt-utils
RUN apt-get -y install \
build-essential \
curl \
zlib1g-dev \
libncurses5-dev \
libgdbm-dev \
libgdbm-compat-dev \
libnss3-dev \
libreadline-dev \
libsqlite3-dev \
tk-dev \
lzma \
lzma-dev \
liblzma-dev \
uuid-dev \
libbz2-dev \
rustc \
shellcheck \
findutils \
libtool \
automake \
autoconf \
libffi-dev \
libssl-dev \
cargo \
linux-headers-generic
# Download and install ArangoDB (graphdb)
WORKDIR /usr/local/db
RUN curl -L -o /tmp/arangodb.tar.gz https://download.arangodb.com/arangodb38/Community/Linux/arangodb3-linux-${ARANGODB_VERSION}.tar.gz
RUN tar xzvf /tmp/arangodb.tar.gz --strip-components=1 -C /usr/local/db
# Download and install Prometheus (tsdb)
WORKDIR /usr/local/tsdb
RUN curl -L -o /tmp/prometheus.tar.gz https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz
RUN tar xzvf /tmp/prometheus.tar.gz --strip-components=1 -C /usr/local/tsdb
COPY docker/prometheus.yml /usr/local/tsdb/prometheus.yml
# Download and install CPython
WORKDIR /build/python
RUN curl -L -o /tmp/python.tar.gz https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
RUN tar xzvf /tmp/python.tar.gz --strip-components=1 -C /build/python
RUN ./configure --enable-optimizations --prefix /usr/local/python
RUN make -j 12
RUN make install
RUN /usr/local/python/bin/python3 -m ensurepip
WORKDIR /build
RUN mkdir -p /build/pypy
RUN curl -L -o /tmp/pypy.tar.bz2 https://downloads.python.org/pypy/pypy3.8-v${PYPY_VERSION}-linux64.tar.bz2
RUN tar xjvf /tmp/pypy.tar.bz2 --strip-components=1 -C /build/pypy
RUN mv /build/pypy /usr/local/pypy
RUN /usr/local/pypy/bin/pypy3 -m ensurepip
WORKDIR /usr/local
RUN /usr/local/python/bin/python3 -m venv cloudkeeper-venv-python3
RUN /usr/local/pypy/bin/pypy3 -m venv cloudkeeper-venv-pypy3
# Prepare PyPy whl build env
RUN mkdir -p /build-python
RUN mkdir -p /build-pypy
# Download and install Python test tools
RUN . /usr/local/cloudkeeper-venv-python3/bin/activate && python -m pip install -U pip wheel tox flake8
RUN . /usr/local/cloudkeeper-venv-pypy3/bin/activate && pypy3 -m pip install -U pip wheel
# Build cklib
COPY cklib /usr/src/cklib
WORKDIR /usr/src/cklib
RUN if [ "X${TESTS:-false}" = Xtrue ]; then . /usr/local/cloudkeeper-venv-python3/bin/activate && tox; fi
RUN . /usr/local/cloudkeeper-venv-python3/bin/activate && python -m pip wheel -w /build-python -f /build-python .
RUN . /usr/local/cloudkeeper-venv-pypy3/bin/activate && pypy3 -m pip wheel -w /build-pypy -f /build-pypy .
# Build ckcore
COPY ckcore /usr/src/ckcore
WORKDIR /usr/src/ckcore
#RUN if [ "X${TESTS:-false}" = Xtrue ]; then nohup bash -c "/usr/local/db/bin/arangod --database.directory /tmp --server.endpoint tcp://127.0.0.1:8529 --database.password root &"; sleep 5; tox; fi
RUN . /usr/local/cloudkeeper-venv-python3/bin/activate && python -m pip wheel -w /build-python -f /build-python .
RUN . /usr/local/cloudkeeper-venv-pypy3/bin/activate && pypy3 -m pip wheel -w /build-pypy -f /build-pypy .
# Build ckworker
COPY ckworker /usr/src/ckworker
WORKDIR /usr/src/ckworker
RUN if [ "X${TESTS:-false}" = Xtrue ]; then . /usr/local/cloudkeeper-venv-python3/bin/activate && tox; fi
RUN . /usr/local/cloudkeeper-venv-python3/bin/activate && python -m pip wheel -w /build-python -f /build-python .
# Build ckmetrics
COPY ckmetrics /usr/src/ckmetrics
WORKDIR /usr/src/ckmetrics
RUN if [ "X${TESTS:-false}" = Xtrue ]; then . /usr/local/cloudkeeper-venv-python3/bin/activate && tox; fi
RUN . /usr/local/cloudkeeper-venv-python3/bin/activate && python -m pip wheel -w /build-python -f /build-python .
# Build cksh
COPY cksh /usr/src/cksh
WORKDIR /usr/src/cksh
RUN if [ "X${TESTS:-false}" = Xtrue ]; then . /usr/local/cloudkeeper-venv-python3/bin/activate && tox; fi
RUN . /usr/local/cloudkeeper-venv-python3/bin/activate && python -m pip wheel -w /build-python -f /build-python .
# Build cloudkeeper plugins
COPY plugins /usr/src/plugins
WORKDIR /usr/src
RUN if [ "X${TESTS:-false}" = Xtrue ]; then . /usr/local/cloudkeeper-venv-python3/bin/activate && find plugins/ -name tox.ini | while read toxini; do cd $(dirname "$toxini") && tox && cd - || exit 1; done; fi
RUN . /usr/local/cloudkeeper-venv-python3/bin/activate && find plugins/ -maxdepth 1 -mindepth 1 -type d -print0 | xargs -0 python -m pip wheel -w /build-python -f /build-python
# Install all wheels
RUN . /usr/local/cloudkeeper-venv-python3/bin/activate && python -m pip install -f /build-python /build-python/*.whl
RUN . /usr/local/cloudkeeper-venv-pypy3/bin/activate && pypy3 -m pip install -f /build-pypy /build-pypy/*.whl
# Copy image config and startup files
WORKDIR /usr/src/cloudkeeper
COPY docker/service.in /usr/local/etc/service.in
COPY docker/defaults /usr/local/etc/cloudkeeper/defaults
COPY docker/common /usr/local/etc/cloudkeeper/common
COPY docker/argsdispatcher /usr/local/bin/argsdispatcher
COPY docker/bootstrap /usr/local/sbin/bootstrap
COPY docker/bootstrap-graphdb /usr/local/sbin/bootstrap-graphdb
COPY docker/startup /usr/local/bin/startup
COPY docker/cksh-shim /usr/local/bin/cksh-shim
RUN chmod 755 /usr/local/bin/startup \
/usr/local/bin/cksh-shim \
/usr/local/sbin/bootstrap \
/usr/local/sbin/bootstrap-graphdb
RUN if [ "${TESTS:-false}" = true ]; then \
shellcheck -a -x -s bash -e SC2034 \
/usr/local/sbin/bootstrap \
/usr/local/bin/startup \
; \
fi
COPY docker/dnsmasq.conf /usr/local/etc/dnsmasq.conf
COPY docker/syslog-ng.conf /usr/local/etc/syslog-ng.conf
RUN echo "${SOURCE_COMMIT:-unknown}" > /usr/local/etc/git-commit.HEAD
# Setup main image
FROM phusion/baseimage:focal-1.0.0
ENV DEBIAN_FRONTEND=noninteractive
ENV LANG="en_US.UTF-8"
COPY --from=build-env /usr/local /usr/local
ENV PATH=/usr/local/python/bin:/usr/local/pypy/bin:/usr/local/db/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
WORKDIR /
RUN groupadd -g "${PGID:-0}" -o cloudkeeper \
&& useradd -g "${PGID:-0}" -u "${PUID:-0}" -o --create-home cloudkeeper \
&& apt-get update \
&& apt-get -y --no-install-recommends install apt-utils \
&& apt-get -y dist-upgrade \
&& apt-get -y --no-install-recommends install \
iproute2 \
dnsmasq \
libffi7 \
openssl \
procps \
dateutils \
curl \
jq \
cron \
ca-certificates \
openssh-client \
locales \
unzip \
&& echo 'LANG="en_US.UTF-8"' > /etc/default/locale \
&& echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \
&& rm -f /bin/sh \
&& ln -s /bin/bash /bin/sh \
&& locale-gen \
&& ln -s /usr/local/bin/cksh-shim /usr/bin/cksh \
&& mv -f /usr/local/etc/syslog-ng.conf /etc/syslog-ng/syslog-ng.conf \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
EXPOSE 8900 8529 9955 9956
VOLUME ["/data"]
ENTRYPOINT ["/usr/local/sbin/bootstrap"]