2 #==================================================================================
3 # Copyright (c) 2018-2019 AT&T Intellectual Property.
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
9 # http://www.apache.org/licenses/LICENSE-2.0
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16 #==================================================================================
19 # Mnemonic: Dockerfile
20 # Abstract: Build file which creaes a runtime image for the listener.
21 # Building should be as simple as:
23 # docker build -f sidecars/listener/Dockerfile -t mc_listener:xx.xx .
25 # Running the image in a container:
26 # The fifo output directory needs to be mounted to the container
27 # e.g. -v /exports/mcl/fifos:/tmp/mcl/fifos. The internal
28 # directory can be supplied on the command line using -d path, but
29 # should not be needed.
31 # The RMR listen port must be properly exposed to the container. The
32 # internal default is 4560, and can be changed with the -p port option
33 # on the command line (needed if running from docker-compose). Typical
34 # exposure might be -p <host-port>:4560 on the docker run command.
36 # The MC listener application does NOT need route table updates and thus
37 # there is NO need to expose the route table generator port on this
40 # Date: 22 August 2019
41 # Author: E. Scott Daniels
44 FROM nexus3.o-ran-sc.org:10004/o-ran-sc/bldr-ubuntu18-c-go:9-u18.04 as buildenv
48 RUN apt-get update && apt-get install -y cmake gcc make git g++ wget
51 # Install RMr (runtime and dev) from debian package cached on packagecloud.io
54 RUN wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/rmr_${RMR_VER}_amd64.deb/download.deb
55 RUN wget -nv --content-disposition https://packagecloud.io/o-ran-sc/release/packages/debian/stretch/rmr-dev_${RMR_VER}_amd64.deb/download.deb
56 RUN dpkg -i rmr_${RMR_VER}_amd64.deb
57 RUN dpkg -i rmr-dev_${RMR_VER}_amd64.deb
59 RUN mkdir /playpen/bin /playpen/listener /playpen/listener/test
61 COPY ${SRC}/*.ksh ${SRC}/Makefile ${SRC}/*.h ${SRC}/*.c /playpen/listener/
62 COPY ${SRC}/verify_replay.sh ${SRC}/verify.sh /playpen/listener/
65 COPY ${TEST}/*.ksh ${TEST}/Makefile ${TEST}/*.h ${TEST}/*.c /playpen/listener/test/
67 # Build all binaries; verify scripts expect them to be in bin, so we must copy too
69 ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
70 ENV C_INCLUDE_PATH=/usr/local/include
71 RUN cd /playpen/listener \
73 && ls -al mc_listener \
74 && cp mc_listener sender pipe_reader rdc_replay rdc_extract /playpen/bin/
76 # Run unit tests. If they don't pass the build fails here. Tests can be run from src, but expect binaries in bin
77 # so that they can be run in the final image as well.
79 ENV PATH /playpen/bin:/playpen/listener:$PATH
80 RUN cd /playpen/listener/test/; ./run_unit_test.ksh
81 RUN cd /playpen/listener/; /playpen/listener/verify.sh; /playpen/listener/verify_replay.sh
84 # ----- final, smaller image ----------------------------------
87 # bash doesn't cut it for run_replay so grab a real shell and clean up as much as we can
88 RUN apt-get update; apt-get install -y ksh
89 RUN rm -fr /var/lib/apt/lists
91 # must have rmr runtime to get health check etc
92 COPY --from=buildenv /playpen/rmr_*.deb /tmp/
93 RUN dpkg -i /tmp/rmr_*_amd64.deb
95 # obtusely this uses the previous value
98 RUN mkdir -p /playpen/bin
99 COPY --from=buildenv /usr/local/lib/* /usr/local/lib/
100 COPY --from=buildenv /playpen/listener/mc_listener /playpen/listener/sender /playpen/listener/pipe_reader /playpen/listener/rdc_replay /playpen/listener/rdc_extract /playpen/bin/
101 COPY ${SRC}/verify_replay.sh ${SRC}/verify.sh ${SRC}/run_replay.sh ${SRC}/help /playpen/bin/
103 ENV PATH=/playpen/bin:$PATH
104 ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
105 ENV C_INCLUDE_PATH=/usr/local/include
107 CMD [ "/playpen/bin/mc_listener" ]