go.ligato.io/vpp-agent/v3@v3.5.0/docker/dev/Dockerfile (about) 1 ARG VPP_IMG 2 FROM ${VPP_IMG} AS vppimg 3 4 RUN dpkg-query -f '${Version}' -W vpp > /vpp/version 5 6 FROM golang:1.18 AS verify-binapi 7 8 RUN apt-get update && apt-get install -y --no-install-recommends \ 9 patch \ 10 && rm -rf /var/lib/apt/lists/* 11 12 WORKDIR /src/ligato/vpp-agent 13 14 ARG VPP_IMG 15 ARG VPP_VERSION 16 ARG SKIP_CHECK 17 18 COPY go.mod go.sum ./ 19 COPY Makefile vpp.env ./ 20 RUN make get-binapi-generators 21 22 COPY scripts/genbinapi.sh ./scripts/genbinapi.sh 23 COPY plugins/vpp/binapi ./plugins/vpp/binapi 24 25 COPY --from=vppimg /usr/share/vpp /usr/share/vpp 26 COPY --from=vppimg /vpp/version /vpp-version 27 28 RUN set -x; \ 29 gofmt -w plugins/vpp/binapi; \ 30 cp -r plugins/vpp/binapi /tmp/orig_binapi && \ 31 make generate-binapi && \ 32 diff --color=always -I="\/\/.*" -r plugins/vpp/binapi /tmp/orig_binapi || \ 33 { \ 34 set +ex; \ 35 vpp_version="$(cat /vpp-version)"; \ 36 echo >&2 "==============================================================="; \ 37 echo >&2 "!!! VPP BINARY API CHECK FAILED !!!"; \ 38 echo >&2 "==============================================================="; \ 39 echo >&2 " - VPP installed: ${vpp_version}"; \ 40 echo >&2 " - VPP_VERSION: ${VPP_VERSION}"; \ 41 echo >&2 " - VPP_IMG: ${VPP_IMG}"; \ 42 echo >&2 "---------------------------------------------------------------"; \ 43 echo >&2 "Generated binapi does not seem to be up-to-date with used VPP/GoVPP!"; \ 44 echo >&2 ""; \ 45 echo >&2 "$(diff -q --color=always -r plugins/vpp/binapi /tmp/orig_binapi)"; \ 46 echo >&2 ""; \ 47 echo >&2 " This might happen when VPP API change gets merged to a branch of used VPP."; \ 48 echo >&2 " Ensure that VPP base image is compatible with the selected VPP version!"; \ 49 echo >&2 "---------------------------------------------------------------"; \ 50 echo >&2 " To resolve this now, you could:"; \ 51 echo >&2 ""; \ 52 echo >&2 " 1. Ignore this check by setting: SKIP_CHECK=y"; \ 53 echo >&2 " 2. Override used VPP base image by setting: VPP_IMG=ligato/vpp-base:<TAG>"; \ 54 echo >&2 "---------------------------------------------------------------"; \ 55 [ -n "$SKIP_CHECK" ] && { \ 56 echo >&2 "SKIP_CHECK set, ignoring check failure!"; \ 57 exit 0; \ 58 }; \ 59 } 60 61 FROM vppimg AS devimg 62 63 RUN apt-get update && apt-get install -y --no-install-recommends \ 64 build-essential \ 65 ca-certificates \ 66 curl \ 67 git \ 68 iproute2 \ 69 iputils-ping \ 70 make \ 71 nano \ 72 patch \ 73 sudo \ 74 unzip \ 75 wget \ 76 && rm -rf /var/lib/apt/lists/* 77 78 # Install Go 79 ENV GOLANG_VERSION 1.18.8 80 RUN set -eux; \ 81 dpkgArch="$(dpkg --print-architecture)"; \ 82 case "${dpkgArch##*-}" in \ 83 amd64) goRelArch='linux-amd64'; ;; \ 84 armhf) goRelArch='linux-armv6l'; ;; \ 85 arm64) goRelArch='linux-arm64'; ;; \ 86 esac; \ 87 wget -nv -O go.tgz "https://golang.org/dl/go${GOLANG_VERSION}.${goRelArch}.tar.gz"; \ 88 tar -C /usr/local -xzf go.tgz; \ 89 rm go.tgz; 90 91 ENV GOPATH /go 92 ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH 93 RUN mkdir -p "$GOPATH/bin" && chmod -R 777 "$GOPATH" 94 95 # Install debugger 96 RUN go install github.com/go-delve/delve/cmd/dlv@v1.9.0 && dlv version 97 98 # Copy configs 99 COPY \ 100 ./docker/dev/etcd.conf \ 101 ./docker/dev/grpc.conf \ 102 ./docker/dev/logs.conf \ 103 ./docker/dev/vpp-ifplugin.conf \ 104 ./docker/dev/supervisor.conf \ 105 /opt/vpp-agent/dev/ 106 107 COPY ./docker/dev/vpp.conf /etc/vpp/vpp.conf 108 COPY ./docker/dev/init_hook.sh /usr/bin/ 109 110 # handle differences in vpp.conf which are between supported VPP versions 111 ARG VPP_VERSION 112 COPY ./docker/dev/legacy-nat.conf /tmp/legacy-nat.conf 113 RUN if [ "$VPP_VERSION" -le 2009 ]; then \ 114 cat /tmp/legacy-nat.conf >> /etc/vpp/vpp.conf; \ 115 fi; \ 116 rm /tmp/legacy-nat.conf 117 118 # Install agent 119 WORKDIR /src/ligato/vpp-agent 120 121 COPY go.mod go.sum ./ 122 RUN go mod download 123 COPY . ./ 124 125 ARG VERSION 126 ARG COMMIT 127 ARG BRANCH 128 ARG BUILD_DATE 129 RUN make install purge 130 131 ENV SUPERVISOR_CONFIG=/opt/vpp-agent/dev/supervisor.conf 132 133 CMD rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api && \ 134 mkdir -p /run/vpp && \ 135 exec vpp-agent-init