ISSUE ID:- RICAPP-216
[ric-app/bouncer.git] / Bouncer / baseimage / Dockerfile
diff --git a/Bouncer/baseimage/Dockerfile b/Bouncer/baseimage/Dockerfile
new file mode 100644 (file)
index 0000000..66a2084
--- /dev/null
@@ -0,0 +1,149 @@
+FROM nexus3.o-ran-sc.org:10002/o-ran-sc/bldr-ubuntu20-c-go:1.0.0 as buildenv
+#FROM nexus3.o-ran-sc.org:10001/ubuntu:18.04 as buildenv
+# spaces to save things in the build image to copy to final image
+RUN mkdir -p /playpen/assets /playpen/src /playpen/bin
+ARG SRC=.
+
+WORKDIR /playpen
+
+# versions we snarf from package cloud
+ARG RMR_VER=4.8.1
+#ARG SDL_VER=1.4.0
+ARG XFCPP_VER=2.3.8
+
+# package cloud urls for wget
+ARG PC_REL_URL=https://packagecloud.io/o-ran-sc/release/packages/debian/stretch
+# ARG PC_STG_URL=https://packagecloud.io/o-ran-sc/staging/packages/debian/stretch
+
+# pull in rmr
+RUN wget -nv --content-disposition ${PC_REL_URL}/rmr_${RMR_VER}_amd64.deb/download.deb && \
+        wget -nv --content-disposition ${PC_REL_URL}/rmr-dev_${RMR_VER}_amd64.deb/download.deb && \
+        dpkg -i rmr_${RMR_VER}_amd64.deb rmr-dev_${RMR_VER}_amd64.deb
+
+# pull in xapp framework c++
+RUN wget -nv --content-disposition ${PC_REL_URL}/ricxfcpp-dev_${XFCPP_VER}_amd64.deb/download.deb && \
+        wget -nv --content-disposition ${PC_REL_URL}/ricxfcpp_${XFCPP_VER}_amd64.deb/download.deb && \
+        dpkg -i ricxfcpp-dev_${XFCPP_VER}_amd64.deb ricxfcpp_${XFCPP_VER}_amd64.deb
+
+# # snarf up SDL dependencies, then pull SDL package and install
+RUN apt-get update && apt-get install -y \
+        libboost-filesystem1.67.0 \
+        libboost-system1.67.0 \
+        libhiredis-dev \
+ libhiredis0.14 \
+        && apt-get clean
+#RUN wget -nv --content-disposition ${PC_REL_URL}/sdl_${SDL_VER}-1_amd64.deb/download.deb && \
+#        wget -nv --content-disposition ${PC_REL_URL}/sdl-dev_${SDL_VER}-1_amd64.deb/download.deb &&\
+#        dpkg -i sdl-dev_${SDL_VER}-1_amd64.deb sdl_${SDL_VER}-1_amd64.deb
+
+#RUN apt-get update && apt-get install -y cmake gcc make git g++ wget
+#building cpprestsdk
+RUN apt-get install -y libcpprest-dev
+
+RUN apt-get install -y  g++ git libboost-atomic-dev libboost-thread-dev libboost-system-dev libboost-date-time-dev libboost-regex-dev libboost-filesystem-dev libboost-random-dev libboost-chrono-dev libboost-serialization-dev libwebsocketpp-dev openssl libssl-dev ninja-build zlib1g-dev
+
+RUN git clone https://github.com/Microsoft/cpprestsdk.git casablanca && \
+    cd casablanca && \
+    mkdir build && \
+    cd build && \
+    cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF -DBUILD_SAMPLES=OFF -DCMAKE_INSTALL_PREFIX=/usr/local .. && \
+    ninja && \
+    ninja install && \
+    cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=0 -DBUILD_TESTS=OFF -DBUILD_SAMPLES=OFF -DCMAKE_INSTALL_PREFIX=/usr/local .. && \
+    ninja && \
+    ninja install && \
+    rm -rf casablanca
+RUN apt-get update && apt-get install -y cmake gcc make git g++ wget
+#installing all dependicies for pistache
+RUN apt-get update && apt-get install -y cmake gcc make \
+git g++ wget meson libcurl4-openssl-dev libssl-dev pkg-config ninja-build
+RUN git clone https://github.com/Tencent/rapidjson && \
+      cd rapidjson && \
+     mkdir build && \
+     cd build && \
+    cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. && \
+   make install && \
+    cd ../../
+        #rm -rf rapidjson
+
+#building and installing pistache
+RUN git clone https://github.com/pistacheio/pistache.git
+RUN cd pistache && \
+        meson setup build \
+    --buildtype=release \
+    -DPISTACHE_USE_SSL=true \
+    -DPISTACHE_BUILD_EXAMPLES=true \
+    -DPISTACHE_BUILD_TESTS=true \
+    -DPISTACHE_BUILD_DOCS=false \
+    --prefix="/usr/local"
+RUN cd pistache/build && \
+        ninja && \
+        ninja install
+RUN cp /usr/local/lib/x86_64-linux-gnu/libpistache* /usr/local/lib/
+RUN cp /usr/local/lib/x86_64-linux-gnu/pkgconfig/libpistache.pc /usr/local/lib/pkgconfig
+
+#install nlohmann json
+RUN git clone https://github.com/nlohmann/json.git && cd json && cmake . && make install
+
+#install json-schema-validator
+RUN git clone https://github.com/pboettch/json-schema-validator.git && cd json-schema-validator &&mkdir build &&cd build && cmake .. && make install
+
+COPY e2ap/ e2ap/
+COPY e2sm_kpm/ e2sm_kpm/
+COPY e2sm_rc/ e2sm_rc/
+# "COMPILING E2AP Wrapper"
+RUN cd e2ap && \
+    gcc -c -fPIC -Iheaders/ lib/*.c wrapper.c && \
+    gcc *.o -shared -o libe2apwrapper.so && \
+    cp libe2apwrapper.so /usr/local/lib/ && \
+    mkdir /usr/local/include/e2ap && \
+    cp wrapper.h headers/*.h /usr/local/include/e2ap && \
+    ldconfig
+# "COMPILING E2SM-KPM Wrapper"
+RUN cd e2sm_kpm && \
+    gcc -c -fPIC -Iheaders/ lib/*.c wrapper.c && \
+    gcc *.o -shared -o libe2smkpmwrapper.so&& \
+    cp libe2smkpmwrapper.so /usr/local/lib/ && \
+    mkdir /usr/local/include/e2sm_kpm && \
+    cp wrapper.h headers/*.h /usr/local/include/e2sm_kpm && \
+    ldconfig
+# "COMPILING E2SM-RC Wrapper"
+RUN cd e2sm_rc && \
+    gcc -c -fPIC -Iheaders/ lib/*.c wrapper.c && \
+    gcc *.o -shared -o libe2smrcwrapper.so&& \
+    cp libe2smrcwrapper.so /usr/local/lib/ && \
+    mkdir /usr/local/include/e2sm_rc && \
+    cp wrapper.h headers/*.h /usr/local/include/e2sm_rc && \
+    ldconfig
+#...
+#FROM ubuntu:20.04
+
+#COPY --from=buildenv /usr/local/lib /usr/local/lib/
+#COPY --from=buildenv /usr/local/include /usr/local/include
+#COPY --from=buildenv /usr/local/bin/rmr_probe /usr/local/bin/
+#COPY --from=buildenv /playpen/bin /usr/local/bin/
+#COPY --from=buildenv /playpen/assets /data
+
+
+ENV PATH=/usr/local/bin:$PATH
+ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
+
+COPY routes.txt .
+COPY bouncer.cpp .
+
+# if needed, set RMR vars
+ENV RMR_SEED_RT=/playpen/routes.txt
+#ENV RMR_RTG_SVC=rm-host:port
+ENV RMR_SRC_ID=service-ricxapp-bouncer-xapp-rmr.ricxapp:4560
+# ENV RMR_VCTL_FILE=/tmp/rmr.v
+# RUN echo "2" >/tmp/rmr.v
+#ARG DEBIAN_FRONTEND=noninteractive
+RUN apt-get update && apt-get install -y gcc g++
+#libboost-all-dev
+RUN ls
+
+RUN g++ -std=c++17 bouncer.cpp -o bouncer-xapp -lricxfcpp -lrmr_si -lpthread -lm -lboost_system -lcrypto -lssl -lcpprest -lpistache -lnlohmann_json_schema_validator -le2apwrapper -le2smrcwrapper -le2smrcwrapper
+
+RUN cp bouncer-xapp /usr/local/bin/
+CMD [ "/usr/local/bin/bouncer-xapp" ]
+