-
Notifications
You must be signed in to change notification settings - Fork 128
/
Dockerfile
118 lines (93 loc) · 3.37 KB
/
Dockerfile
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
ARG BASE_IMG
FROM golang as verify-stage
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
patch python-pip \
&& rm -rf /var/lib/apt/lists/* \
&& pip install ply
ARG VPP_REPO_URL
ARG VPP_COMMIT
RUN git clone ${VPP_REPO_URL} /opt/vpp \
&& cd /opt/vpp \
&& git checkout -q ${VPP_COMMIT}
COPY scripts/genjsonapi.sh /opt/genjsonapi.sh
RUN APIDIR=/usr/share/vpp/api /opt/genjsonapi.sh
WORKDIR /go/src/github.com/ligato/vpp-agent
COPY vendor/github.com/ligato/vpp-binapi/vppapi vppapi
RUN diff -r vppapi /usr/share/vpp/api
FROM ${BASE_IMG} as dev-stage
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
autoconf automake build-essential ca-certificates curl gdb git \
inetutils-traceroute iproute2 ipsec-tools iputils-ping \
libapr1 libmbedcrypto1 libmbedtls10 libmbedx509-0 libtool \
make mc nano netcat python software-properties-common sudo supervisor \
telnet unzip wget python-cffi \
&& rm -rf /var/lib/apt/lists/*
# install Protobuf
ARG PROTOC_VERSION=3.6.1
ARG PROTOC_OS_ARCH=linux_x86_64
RUN wget -q https://github.com/google/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-${PROTOC_OS_ARCH}.zip \
&& unzip protoc-${PROTOC_VERSION}-${PROTOC_OS_ARCH}.zip -d protoc3 \
&& mv protoc3/bin/protoc /usr/local/bin \
&& mv protoc3/include/google /usr/local/include \
&& rm -rf protoc-${PROTOC_VERSION}-${PROTOC_OS_ARCH}.zip protoc3
RUN mkdir -p /opt/vpp-agent/dev /opt/vpp-agent/plugin
WORKDIR /opt/vpp-agent/dev
ARG VPP_REPO_URL
ARG VPP_COMMIT
ARG VPP_DEBUG_DEB
RUN set -eux; \
git clone "${VPP_REPO_URL}" vpp; \
cd vpp; \
git checkout "${VPP_COMMIT}"; \
sed -i -e 's/vpp vom japi/vpp/g' build-data/platforms/vpp.mk; \
export UNATTENDED=y; \
make install-dep dpdk-install-dev; \
if [ -n "${VPP_DEBUG_DEB}" ]; then \
make vpp_configure_args_vpp='--disable-japi' build; \
make -C build-root PLATFORM=vpp TAG=vpp_debug install-deb; \
else \
make vpp_configure_args_vpp='--disable-japi' build-release pkg-deb; \
fi; \
cd build-root; \
dpkg -i vpp_*.deb vpp-dev_*.deb vpp-lib_*.deb vpp-plugins_*.deb vpp-dbg_*.deb vpp-api-python_*.deb; \
rm -rf .ccache /var/lib/apt/lists/*; \
find . -type f -name '*.o' -exec rm -rf '{}' \;
# install Go
ENV GOLANG_VERSION 1.11.1
ARG GOLANG_OS_ARCH=linux-amd64
RUN wget -O go.tgz "https://golang.org/dl/go${GOLANG_VERSION}.${GOLANG_OS_ARCH}.tar.gz" \
&& tar -C /usr/local -xzf go.tgz \
&& rm go.tgz
ENV GOPATH /go
ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH
RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" \
&& chmod -R 777 "$GOPATH"
# copy configs
COPY \
docker/dev/etcd.conf \
docker/dev/kafka.conf \
docker/dev/vpp-plugin.conf \
docker/dev/linux-plugin.conf \
docker/dev/logs.conf \
./
COPY docker/dev/vpp.conf /etc/vpp/vpp.conf
COPY docker/dev/supervisord.conf /etc/supervisord/supervisord.conf
# copy scripts
COPY \
docker/dev/exec_vpp.sh \
docker/dev/exec_agent.sh \
docker/dev/supervisord_kill.py \
/usr/bin/
ARG VERSION
ARG COMMIT
ARG DATE
# copy & build agent
COPY . $GOPATH/src/github.com/ligato/vpp-agent
RUN cd $GOPATH/src/github.com/ligato/vpp-agent \
&& VERSION=$VERSION COMMIT=$COMMIT DATE=$DATE make install
WORKDIR /
# run supervisor as the default executable
CMD rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api && \
/usr/bin/supervisord -c /etc/supervisord/supervisord.conf