From cfc3742a3b550d05ff4855cc0fa9ca5bfcf8beca Mon Sep 17 00:00:00 2001 From: "Lott, Christopher (cl778h)" Date: Mon, 16 Mar 2020 08:41:05 -0400 Subject: [PATCH] Adjust build script for portability Change build-e2mgr-ubuntu.sh shell script to skip installing NNG (already in the base image) and to use sudo when invoking dpkg to install RMR libraries. This allows the same steps to be run in a docker build AND sonar analysis job without duplication. Signed-off-by: Lott, Christopher (cl778h) Change-Id: I88f230bb0b54ad3e28042341ea351b3bd217c109 --- E2Manager/Dockerfile | 7 ++++--- E2Manager/build-e2mgr-ubuntu.sh | 42 +++++++++++++++-------------------------- 2 files changed, 19 insertions(+), 30 deletions(-) diff --git a/E2Manager/Dockerfile b/E2Manager/Dockerfile index 99dfc35..5f80d82 100755 --- a/E2Manager/Dockerfile +++ b/E2Manager/Dockerfile @@ -23,9 +23,10 @@ FROM nexus3.o-ran-sc.org:10004/bldr-ubuntu16-c-go:3-u16.04-nng as ubuntu WORKDIR /opt/E2Manager -COPY . . +COPY . . # Install dependencies, compile and test the module +RUN apt-get update && apt-get install -y sudo RUN bash build-e2mgr-ubuntu.sh # Build deployable container @@ -36,7 +37,7 @@ RUN apt-get update && apt-get install -y \ iputils-ping \ curl \ tcpdump - + COPY --from=ubuntu /opt/E2Manager/router.txt /opt/E2Manager/router.txt COPY --from=ubuntu /opt/E2Manager/main /opt/E2Manager/main COPY --from=ubuntu /opt/E2Manager/resources/configuration.yaml /opt/E2Manager/resources/configuration.yaml @@ -45,7 +46,7 @@ COPY --from=ubuntu /usr/local/lib/librmr_nng.so.1 /usr/local/lib/librmr_nng.so.1 COPY --from=ubuntu /usr/local/lib/libnng.so.1 /usr/local/lib/libnng.so.1 WORKDIR /opt/E2Manager ENV LD_LIBRARY_PATH=/usr/local/lib \ - port=3800 + port=3800 ENV RMR_SEED_RT=router.txt ENV RMR_VCTL_FILE=/tmp/rmr.verbose EXPOSE 3800 diff --git a/E2Manager/build-e2mgr-ubuntu.sh b/E2Manager/build-e2mgr-ubuntu.sh index 693ca84..d298f57 100755 --- a/E2Manager/build-e2mgr-ubuntu.sh +++ b/E2Manager/build-e2mgr-ubuntu.sh @@ -20,42 +20,24 @@ # Installs libraries and builds E2 manager # Prerequisites: # Debian distro; e.g., Ubuntu -# cmake (version?) -# gcc/g++ compiler (version?) -# golang (go), tested with version 1.12.0 +# NNG shared library +# golang (go); tested with version 1.12 # current working directory is E2Manager # running with sudo privs, which is default in Docker -# TODO: -# 1) drop go from $PATH when build minion is extended -# 2) drop rewrite of path prefix when SonarScanner is extended - # Stop at first error and be verbose set -eux echo "--> e2mgr-build-ubuntu.sh" -# Build and install NNG, which requires ninja -apt-get install ninja-build -git clone https://github.com/nanomsg/nng.git \ - && cd nng \ - && git checkout e618abf8f3db2a94269a79c8901a51148d48fcc2 \ - && mkdir build \ - && cd build \ - && cmake -DBUILD_SHARED_LIBS=1 -G Ninja .. \ - && ninja \ - && ninja install \ - && cd ../.. \ - && rm -r nng - # Install RMR from deb packages at packagecloud.io rmr=rmr_1.13.0_amd64.deb wget --content-disposition https://packagecloud.io/o-ran-sc/staging/packages/debian/stretch/$rmr/download.deb -dpkg -i $rmr +sudo dpkg -i $rmr rm $rmr rmrdev=rmr-dev_1.13.0_amd64.deb wget --content-disposition https://packagecloud.io/o-ran-sc/staging/packages/debian/stretch/$rmrdev/download.deb -dpkg -i $rmrdev +sudo dpkg -i $rmrdev rm $rmrdev # required to find nng and rmr libs @@ -75,11 +57,16 @@ cd 3rdparty/asn1codec \ go build -v app/main.go # Execute UT and measure coverage -# cgocheck=2 enables expensive checks that should not miss any errors, but will cause your program to run slower. -# clobberfree=1 causes the garbage collector to clobber the memory content of an object with bad content when it frees the object. -# gcstoptheworld=1 disables concurrent garbage collection, making every garbage collection a stop-the-world event. -# Setting gcstoptheworld=2 also disables concurrent sweeping after the garbage collection finishes. -# Setting allocfreetrace=1 causes every allocation to be profiled and a stack trace printed on each object's allocation and free. +# cgocheck=2 enables expensive checks that should not miss any errors, +# but will cause your program to run slower. +# clobberfree=1 causes the garbage collector to clobber the memory content +# of an object with bad content when it frees the object. +# gcstoptheworld=1 disables concurrent garbage collection, making every +# garbage collection a stop-the-world event. +# Setting gcstoptheworld=2 also disables concurrent sweeping after the +# garbage collection finishes. +# Setting allocfreetrace=1 causes every allocation to be profiled and a +# stack trace printed on each object's allocation and free. export GODEBUG=cgocheck=2,clobberfree=1,gcstoptheworld=2,allocfreetrace=0 export RIC_ID="bbbccc-abcd0e/20" # Static route table is provided in git repo @@ -88,6 +75,7 @@ export RMR_SEED_RT=$(pwd)/router_test.txt # SonarCloud accepts the text format go-acc $(go list ./... | grep -vE '(/mocks|/tests|/e2managererrors|/enums)' ) +# TODO: drop rewrite of path prefix when SonarScanner is extended # rewrite the module name to a directory name in the coverage report # https://jira.sonarsource.com/browse/SONARSLANG-450 sed -i -e 's/^e2mgr/E2Manager/' coverage.txt -- 2.16.6