<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/docker-playground/+/17531">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  pespin: Looks good to me, approved; Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">osmo-gsm-tester: Build srsLTE inside the docker instance if inst not provided by host<br><br>osmo-gsm-tester.git/contrib/jenkins-build-srslte.sh cannot be used<br>because there's a need to split the fetch step from the build step.<br>That's because we want to fetch in the host (in order to use host's user<br>ssh key for potential private repos) while still building inside the<br>docker container, where we have all the dependencies (and where the<br>binaries are going to be run afterwards by osmo-gsm-tester).<br><br>During the changes above it was also noticed that /tmp/trial on the host<br>got its UID+GID changed (because we switch user inside the container to<br>downscale privileges). Fix it by chown'ing the directory back to the<br>host user's UID+GID.<br><br>Change-Id: Ia0db8fba840392a0b7883cfc15e45c2e80407a16<br>---<br>M osmo-gsm-tester/jenkins.sh<br>M osmo-gsm-tester/osmo-gsm-tester-master.sh<br>2 files changed, 81 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/osmo-gsm-tester/jenkins.sh b/osmo-gsm-tester/jenkins.sh</span><br><span>index c114222..58768c4 100755</span><br><span>--- a/osmo-gsm-tester/jenkins.sh</span><br><span>+++ b/osmo-gsm-tester/jenkins.sh</span><br><span>@@ -1,11 +1,20 @@</span><br><span> #!/bin/sh</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# This docket env allows running a typical osmo-gsm-tester setup with a main</span><br><span style="color: hsl(120, 100%, 40%);">+# This docker env allows running a typical osmo-gsm-tester setup with a main</span><br><span> # unit (ogt-master) running osmo-gsm-tester process, and using another docker</span><br><span> # container as a remote host where to run child processes.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# Trial directory must be set in the parent host's /tmp/trial path, which will</span><br><span style="color: hsl(0, 100%, 40%);">-# then be mounted to ogt-master and used my osmo-gsm-tester.</span><br><span style="color: hsl(120, 100%, 40%);">+# Trial directory to use may be placed in the container's host /tmp/trial path,</span><br><span style="color: hsl(120, 100%, 40%);">+# which will then be mounted to ogt-master and used my osmo-gsm-tester.</span><br><span style="color: hsl(120, 100%, 40%);">+# If no inst is detected, then jenkins.sh will attempt to fetch the sources in</span><br><span style="color: hsl(120, 100%, 40%);">+# the host system (so that host's user ssh keys are potentially available) under</span><br><span style="color: hsl(120, 100%, 40%);">+# /tmp/trial, and the inst is then later built inside the container.</span><br><span style="color: hsl(120, 100%, 40%);">+# Several env vars are available to tweak where to fetch from.</span><br><span style="color: hsl(120, 100%, 40%);">+# SRS_LTE_BRANCH: The srsLTE.git branch to fetch.</span><br><span style="color: hsl(120, 100%, 40%);">+# SRS_LTE_REPO_PREFIX: The URL & prefix patch from where to clone the srsLTe.git</span><br><span style="color: hsl(120, 100%, 40%);">+#                      repo.</span><br><span style="color: hsl(120, 100%, 40%);">+# SRS_LTE_REPO_NAME: The srsLTE.git repo name, usually "srsLTE", but known to</span><br><span style="color: hsl(120, 100%, 40%);">+#                    have different names on some forks.</span><br><span> #</span><br><span> # osmo-gsm-tester parameters and suites are passed to osmo-gsm-tester.sh in same</span><br><span> # directory as this script using environment variable OSMO_GSM_TESTER_OPTS.</span><br><span>@@ -14,6 +23,35 @@</span><br><span> # osmo-gsm-tester last run can be found as usual under the trial directory</span><br><span> # (/tmp/trial/last_run).</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+TRIAL_DIR="/tmp/trial"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SRS_LTE_BRANCH=${SRS_LTE_BRANCH:-master}</span><br><span style="color: hsl(120, 100%, 40%);">+SRS_LTE_REPO_PREFIX=${SRS_LTE_REPO_PREFIX:-git@github.com:srsLTE}</span><br><span style="color: hsl(120, 100%, 40%);">+SRS_LTE_REPO_NAME=${SRS_LTE_REPO_NAME:-srsLTE}</span><br><span style="color: hsl(120, 100%, 40%);">+have_repo_srslte() {</span><br><span style="color: hsl(120, 100%, 40%);">+      echo "srsLTE inst not provided, fetching it now and it will be build in container"</span><br><span style="color: hsl(120, 100%, 40%);">+  if [ -d "${TRIAL_DIR}/${SRS_LTE_REPO_NAME}" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+         git fetch -C ${TRIAL_DIR}/${SRS_LTE_REPO_NAME}</span><br><span style="color: hsl(120, 100%, 40%);">+        else</span><br><span style="color: hsl(120, 100%, 40%);">+          mkdir -p ${TRIAL_DIR}</span><br><span style="color: hsl(120, 100%, 40%);">+         git clone "${SRS_LTE_REPO_PREFIX}/${SRS_LTE_REPO_NAME}" "${TRIAL_DIR}/${SRS_LTE_REPO_NAME}"</span><br><span style="color: hsl(120, 100%, 40%);">+       fi</span><br><span style="color: hsl(120, 100%, 40%);">+    # Figure out whether we need to prepend origin/ to find branches in upstream.</span><br><span style="color: hsl(120, 100%, 40%);">+ # Doing this allows using git hashes instead of a branch name.</span><br><span style="color: hsl(120, 100%, 40%);">+        if git -C "${TRIAL_DIR}/${SRS_LTE_REPO_NAME}" rev-parse "origin/$SRS_LTE_BRANCH"; then</span><br><span style="color: hsl(120, 100%, 40%);">+      SRS_LTE_BRANCH="origin/$SRS_LTE_BRANCH"</span><br><span style="color: hsl(120, 100%, 40%);">+   fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  git -C "${TRIAL_DIR}/${SRS_LTE_REPO_NAME}" checkout -B build_branch "$SRS_LTE_BRANCH"</span><br><span style="color: hsl(120, 100%, 40%);">+     rm -rf "${TRIAL_DIR:?}/${SRS_LTE_REPO_NAME}/*"</span><br><span style="color: hsl(120, 100%, 40%);">+      git -C "${TRIAL_DIR}/${SRS_LTE_REPO_NAME}" reset --hard "$SRS_LTE_BRANCH"</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# If srsLTE trial not provided by user, fetch srsLTE git repo and let the container build it:</span><br><span style="color: hsl(120, 100%, 40%);">+if [ "x$(ls ${TRIAL_DIR}/srslte.*.tgz 2>/dev/null | wc -l)" = "x0" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+  have_repo_srslte</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> . ../jenkins-common.sh</span><br><span> IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"</span><br><span> docker_images_require \</span><br><span>@@ -51,8 +89,11 @@</span><br><span>                 --network $NET_NAME \</span><br><span>                --ip 172.18.50.2 \</span><br><span>           -v $VOL_BASE_DIR/ogt-master:/data \</span><br><span style="color: hsl(0, 100%, 40%);">-             -v /tmp/trial:/tmp/trial \</span><br><span style="color: hsl(120, 100%, 40%);">+            -v "${TRIAL_DIR}:/tmp/trial" \</span><br><span>             -e "OSMO_GSM_TESTER_OPTS=${OSMO_GSM_TESTER_OPTS}" \</span><br><span style="color: hsl(120, 100%, 40%);">+         -e "SRS_LTE_REPO_NAME=${SRS_LTE_REPO_NAME}" \</span><br><span style="color: hsl(120, 100%, 40%);">+               -e "HOST_USER_ID=$(id -u)" \</span><br><span style="color: hsl(120, 100%, 40%);">+                -e "HOST_GROUP_ID=$(id -g)" \</span><br><span>              --name ${BUILD_TAG}-ogt-master \</span><br><span>             $REPO_USER/osmo-gsm-tester</span><br><span> </span><br><span>diff --git a/osmo-gsm-tester/osmo-gsm-tester-master.sh b/osmo-gsm-tester/osmo-gsm-tester-master.sh</span><br><span>index 975e4e5..bd8a659 100755</span><br><span>--- a/osmo-gsm-tester/osmo-gsm-tester-master.sh</span><br><span>+++ b/osmo-gsm-tester/osmo-gsm-tester-master.sh</span><br><span>@@ -11,4 +11,39 @@</span><br><span> ip addr add 172.18.50.9/24 dev eth0</span><br><span> ip addr add 172.18.50.10/24 dev eth0</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-su -c "python3 -u /tmp/osmo-gsm-tester/src/osmo-gsm-tester.py /tmp/trial $OSMO_GSM_TESTER_OPTS" -m jenkins</span><br><span style="color: hsl(120, 100%, 40%);">+build_srslte() {</span><br><span style="color: hsl(120, 100%, 40%);">+        git_repo_dir="/tmp/trial/${SRS_LTE_REPO_NAME}"</span><br><span style="color: hsl(120, 100%, 40%);">+        if [ ! -d "$git_repo_dir" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+                echo "No external trial nor git repo provided for srsLTE!"</span><br><span style="color: hsl(120, 100%, 40%);">+                exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+        fi</span><br><span style="color: hsl(120, 100%, 40%);">+        pushd "/tmp/trial"</span><br><span style="color: hsl(120, 100%, 40%);">+        rm -rf inst && mkdir inst</span><br><span style="color: hsl(120, 100%, 40%);">+        rm -rf build && mkdir build && cd build || exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+        cmake -DCMAKE_INSTALL_PREFIX="../inst/" "${git_repo_dir}"</span><br><span style="color: hsl(120, 100%, 40%);">+        set +x; echo; echo; set -x</span><br><span style="color: hsl(120, 100%, 40%);">+        make "-j$(nproc)"</span><br><span style="color: hsl(120, 100%, 40%);">+        set +x; echo; echo; set -x</span><br><span style="color: hsl(120, 100%, 40%);">+        make install</span><br><span style="color: hsl(120, 100%, 40%);">+        this="srslte.build-${BUILD_NUMBER-$(date +%Y-%m-%d_%H_%M_%S)}"</span><br><span style="color: hsl(120, 100%, 40%);">+        tar="${this}.tgz"</span><br><span style="color: hsl(120, 100%, 40%);">+        tar czf "/tmp/trial/$tar" -C "/tmp/trial/inst" .</span><br><span style="color: hsl(120, 100%, 40%);">+        cd "/tmp/trial/" && md5sum "$tar" >>checksums.md5</span><br><span style="color: hsl(120, 100%, 40%);">+        popd</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Build srsLTE.git if not provided by host system:</span><br><span style="color: hsl(120, 100%, 40%);">+if [ "x$(ls /tmp/trial/srslte.*.tgz 2>/dev/null | wc -l)" = "x0" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+        build_srslte</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Make trial dir avaialable to jenkins user inside container:</span><br><span style="color: hsl(120, 100%, 40%);">+chown -R jenkins /tmp/trial/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+rc=0</span><br><span style="color: hsl(120, 100%, 40%);">+su -c "python3 -u /tmp/osmo-gsm-tester/src/osmo-gsm-tester.py /tmp/trial $OSMO_GSM_TESTER_OPTS" -m jenkins || rc=$?</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Make trial dir again owned by user running the container:</span><br><span style="color: hsl(120, 100%, 40%);">+chown -R "${HOST_USER_ID}:${HOST_GROUP_ID}" /tmp/trial/</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+exit $rc</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/docker-playground/+/17531">change 17531</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/docker-playground/+/17531"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: docker-playground </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ia0db8fba840392a0b7883cfc15e45c2e80407a16 </div>
<div style="display:none"> Gerrit-Change-Number: 17531 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>