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