diff --git a/ci-scripts/Jenkinsfile-push-registry b/ci-scripts/Jenkinsfile-push-registry index 541999e8ff..d3bd5e6e64 100644 --- a/ci-scripts/Jenkinsfile-push-registry +++ b/ci-scripts/Jenkinsfile-push-registry @@ -76,7 +76,7 @@ pipeline { withCredentials([ [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.DH_Credentials}", usernameVariable: 'DH_Username', passwordVariable: 'DH_Password'] ]) { - def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue", "oai-nr-cuup"] + def listOfImages = ["oai-enb", "oai-gnb", "oai-lte-ue", "oai-nr-ue", "oai-nr-cuup", "oai-gnb-fhi72"] // Logging in on both registries sh "docker login -u ${DH_Username} -p ${DH_Password} > /dev/null 2>&1" sh "docker login -u oaicicd -p oaicicd porcepix.sboai.cs.eurecom.fr > /dev/null 2>&1" diff --git a/ci-scripts/cls_cluster.py b/ci-scripts/cls_cluster.py index d35b73890b..80d6d95daa 100644 --- a/ci-scripts/cls_cluster.py +++ b/ci-scripts/cls_cluster.py @@ -462,6 +462,34 @@ class Cluster: self.cmd.run(f'oc logs {nrue_job} &> cmake_targets/log/oai-nr-ue.log') self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10) + if status: + self._recreate_is_tag('ran-build-fhi72', imageTag, 'openshift/ran-build-fhi72-is.yaml') + self._recreate_bc('ran-build-fhi72', imageTag, 'openshift/ran-build-fhi72-bc.yaml') + self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.build.fhi72.rhel9') + ranbuildfhi72_job = self._start_build('ran-build-fhi72') + attemptedImages += ['ran-build-fhi72'] + + wait = ranbuildfhi72_job is not None and self._wait_build_end([ranbuildfhi72_job], 1200) + if not wait: logging.error('error during build of ranbuildfhi72_job') + status = status and wait + self.cmd.run(f'oc logs {ranbuildfhi72_job} &> cmake_targets/log/ran-build-fhi72.log') + self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10) + + if status: + self._recreate_is_tag('oai-gnb-fhi72', imageTag, 'openshift/oai-gnb-fhi72-is.yaml') + self._recreate_bc('oai-gnb-fhi72', imageTag, 'openshift/oai-gnb-fhi72-bc.yaml') + self._retag_image_statement('ran-base', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-base', baseTag, 'docker/Dockerfile.gNB.fhi72.rhel9') + self._retag_image_statement('ran-build-fhi72', 'image-registry.openshift-image-registry.svc:5000/oaicicd-ran/ran-build-fhi72', imageTag, 'docker/Dockerfile.gNB.fhi72.rhel9') + gnb_fhi72_job = self._start_build('oai-gnb-fhi72') + attemptedImages += ['oai-gnb-fhi72'] + + wait = gnb_fhi72_job is not None and self._wait_build_end([gnb_fhi72_job], 600) + if not wait: logging.error('error during build of gNB-fhi72') + status = status and wait + # recover logs + self.cmd.run(f'oc logs {gnb_fhi72_job} &> cmake_targets/log/oai-gnb-fhi72.log') + self.cmd.run(f'oc get pods.metrics.k8s.io &>> cmake_targets/log/build-metrics.log', '\$', 10) + # split and analyze logs imageSize = {} for image in attemptedImages: diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 911a6555b5..94d7526813 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -58,7 +58,7 @@ import cls_oaicitest # Helper functions used here and in other classes # (e.g., cls_cluster.py) #----------------------------------------------------------- -IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-gnb-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial'] +IMAGES = ['oai-enb', 'oai-lte-ru', 'oai-lte-ue', 'oai-gnb', 'oai-nr-cuup', 'oai-gnb-aw2s', 'oai-nr-ue', 'oai-gnb-asan', 'oai-nr-ue-asan', 'oai-nr-cuup-asan', 'oai-gnb-aerial', 'oai-gnb-fhi72'] def CreateWorkspace(sshSession, sourcePath, ranRepository, ranCommitID, ranTargetBranch, ranAllowMerge): if ranCommitID == '': @@ -319,6 +319,8 @@ class Containerize(): imageNames.append(('oai-gnb', 'gNB', 'oai-gnb-asan', '--build-arg "BUILD_OPTION=--sanitize"')) imageNames.append(('oai-nr-ue', 'nrUE', 'oai-nr-ue-asan', '--build-arg "BUILD_OPTION=--sanitize"')) imageNames.append(('oai-nr-cuup', 'nr-cuup', 'oai-nr-cuup-asan', '--build-arg "BUILD_OPTION=--sanitize"')) + imageNames.append(('ran-build-fhi72', 'build.fhi72', 'ran-build-fhi72', '')) + imageNames.append(('oai-gnb', 'gNB.fhi72', 'oai-gnb-fhi72', '')) result = re.search('build_cross_arm64', self.imageKind) if result is not None: self.dockerfileprefix = '.ubuntu22.cross-arm64' @@ -409,6 +411,8 @@ class Containerize(): # target images should use the proper ran-build image if image != 'ran-build' and "-asan" in name: cmd.run(f'sed -i -e "s#ran-build:latest#ran-build-asan:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}') + elif "fhi72" in name: + cmd.run(f'sed -i -e "s#ran-build-fhi72:latest#ran-build-fhi72:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}') elif image != 'ran-build': cmd.run(f'sed -i -e "s#ran-build:latest#ran-build:{imageTag}#" docker/Dockerfile.{pattern}{self.dockerfileprefix}') if image == 'oai-gnb-aerial': @@ -445,7 +449,7 @@ class Containerize(): cmd.run(f"{self.cli} image prune --force") # Remove all intermediate build images and clean up - cmd.run(f"{self.cli} image rm ran-build:{imageTag} ran-build-asan:{imageTag}") + cmd.run(f"{self.cli} image rm ran-build:{imageTag} ran-build-asan:{imageTag} ran-build-fhi72:{imageTag} || true") cmd.run(f"{self.cli} volume prune --force") # Remove some cached artifacts to prevent out of diskspace problem diff --git a/ci-scripts/yaml_files/sa_fhi_7.2_gnb/README.md b/ci-scripts/yaml_files/sa_fhi_7.2_gnb/README.md new file mode 100644 index 0000000000..1acbe7fb86 --- /dev/null +++ b/ci-scripts/yaml_files/sa_fhi_7.2_gnb/README.md @@ -0,0 +1,87 @@ + + + + + +
+ + + + + + OAI O-RAN 7.2 Front-haul Docker Compose +
+ +![Docker deploy 7.2](../../../doc/images/docker-deploy-oai-7-2.png) + +This docker-compose is designed to use `OAI-gNB` with a 7.2 compatible Radio Unit. Before using this docker compose you have to configure +the host machine as per the [ORAN_FHI7.2_Tutorial](../../../doc/ORAN_FHI7.2_Tutorial.md). The container image used by the docker compose file is tested only on `Ubuntu 22.04` docker host. + +## Build Image (Optional) + +Refer to [OAI Docker/Podman Build and Usage Procedures](../../../docker/README.md) + +## Configure Networking + +### SR-IOV Virtual Functions (VFs) + +In docker-compose environment there is no automated method +to configure the VFs on the fly. The user will have to manually configure +C/U plane VFs before starting the container `OAI-gNB`. + +You can follow the step +[configure-network-interfaces-and-dpdk-vfs](../../../doc/ORAN_FHI7.2_Tutorial.md#configure-network-interfaces-and-dpdk-vfs). + +### Interface towards AMF (N2) + +For `N2` interface we are using `macvlan` driver of docker. + +You can use the `bridge` driver, in situation + +- When the core network is running on the same machine +- or different machine but you have configured +needed `ip route` and forwarding to access the core network from RAN host. + +To configure docker `macvlan` network +you need to choose `ipam.config` and `driver_opts.parent` are per your environment + +``` + oai-net: + driver: macvlan + name: oai-net + ipam: + config: + - subnet: "172.21.16.0/22" + ip_range: "172.21.18.20/32" + gateway: "172.21.19.254" + driver_opts: + com.docker.network.bridge.name: "oai-net" + parent: enp193s0f0 +``` + +To configure `bridge` network you need to choose `ipam.config.subnet` as per your environment. + +``` + oai-net: + driver: bridge + name: oai-net + ipam: + config: + - subnet: 192.168.72.128/26 + driver_opts: + com.docker.network.bridge.name: "oai-net" +``` + +## Deploy OAI-gNB Container + +The [configuration file](../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel650.conf) used by docker compose is configured for Benetel 650 RU (RAN650-1v1.0.4-dda1bf5). + +```bash +docker-compose up -d +``` + +To check the logs + +```bash +docker logs oai-gnb -f +``` diff --git a/ci-scripts/yaml_files/sa_fhi_7.2_gnb/docker-compose.yml b/ci-scripts/yaml_files/sa_fhi_7.2_gnb/docker-compose.yml new file mode 100644 index 0000000000..e3e93b3b74 --- /dev/null +++ b/ci-scripts/yaml_files/sa_fhi_7.2_gnb/docker-compose.yml @@ -0,0 +1,34 @@ +services: + oai-gnb: + image: oai-gnb-fhi72:latest + privileged: true + container_name: oai-gnb + environment: + TZ: Europe/Paris + USE_ADDITIONAL_OPTIONS: --sa --thread-pool 13,14,15,16,17,18 + devices: + - /dev/vfio:/dev/vfio/ + volumes: + - ../../../targets/PROJECTS/GENERIC-NR-5GC/CONF/gnb.sa.band78.273prb.fhi72.4x4-benetel650.conf:/opt/oai-gnb/etc/gnb.conf + - /dev/hugepages:/dev/hugepages + cpuset: "0,1,2,8,9,10,13,14,15,16,17,18" + networks: + oai-net: + ipv4_address: 172.21.18.20 + healthcheck: + test: /bin/bash -c "pgrep nr-softmodem" + interval: 10s + timeout: 5s + retries: 5 +networks: + oai-net: + driver: macvlan + name: oai-net + ipam: + config: + - subnet: "172.21.16.0/22" + ip_range: "172.21.18.20/32" + gateway: "172.21.19.254" + driver_opts: + com.docker.network.bridge.name: "oai-net" + parent: enp193s0f0 diff --git a/doc/images/docker-deploy-oai-7-2.drawio.xml b/doc/images/docker-deploy-oai-7-2.drawio.xml new file mode 100644 index 0000000000..eadd0a5bf5 --- /dev/null +++ b/doc/images/docker-deploy-oai-7-2.drawio.xml @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/images/docker-deploy-oai-7-2.png b/doc/images/docker-deploy-oai-7-2.png new file mode 100644 index 0000000000..58c323b9de Binary files /dev/null and b/doc/images/docker-deploy-oai-7-2.png differ diff --git a/docker/Dockerfile.base.rhel9 b/docker/Dockerfile.base.rhel9 index 1fc3fa973f..03b4ccac91 100644 --- a/docker/Dockerfile.base.rhel9 +++ b/docker/Dockerfile.base.rhel9 @@ -21,12 +21,13 @@ #--------------------------------------------------------------------- # # Dockerfile for the Open-Air-Interface BUILD service -# Valid for RHEL9 +# Valid for UBI9 # #--------------------------------------------------------------------- FROM registry.access.redhat.com/ubi9/ubi:latest AS ran-base +LABEL MAINTAINER OpenAirInterface ARG NEEDED_GIT_PROXY ENV TZ=Europe/Paris ENV BUILD_UHD_FROM_SOURCE=True @@ -35,10 +36,6 @@ ENV UHD_VERSION=4.4.0.0 # Copy the entitlements COPY ./etc-pki-entitlement /etc/pki/entitlement -# Copy the subscription manager configurations -COPY ./rhsm-conf /etc/rhsm -COPY ./rhsm-ca /etc/rhsm/ca - ENV SMDEV_CONTAINER_OFF=1 #install developers pkg/repo RUN rm -f /etc/rhsm-host && \ @@ -47,11 +44,21 @@ RUN rm -f /etc/rhsm-host && \ cat /etc/os-release && \ dnf install -y \ #gcc needed for build_oai - gcc gcc-c++ \ diffutils \ file \ psmisc \ git \ + meson \ + wget \ + xz \ + pkg-config \ + pcre2-devel \ + m4 \ + python3-devel \ + numactl-libs \ + numactl-devel \ + gcc-toolset-12-gcc \ + gcc-toolset-12-gcc-c++ \ # python3-pip and pyyaml are used for conf template generation python3-pip && \ pip3 install --ignore-installed pyyaml && \ @@ -80,8 +87,9 @@ WORKDIR /oai-ran COPY oaienv . #run build_oai -I to get the builder image -RUN /bin/sh oaienv && \ +RUN /bin/sh oaienv && \ cd cmake_targets && \ mkdir -p log && \ - ./build_oai -I --install-optional-packages -w USRP && \ + scl enable gcc-toolset-12 "\ + ./build_oai -I --install-optional-packages -w USRP" && \ rm /etc/pki/entitlement/*pem diff --git a/docker/Dockerfile.base.ubuntu22 b/docker/Dockerfile.base.ubuntu22 index 9ed0cd6beb..d1b90e2dcf 100644 --- a/docker/Dockerfile.base.ubuntu22 +++ b/docker/Dockerfile.base.ubuntu22 @@ -45,6 +45,11 @@ RUN apt-get update && \ gcc-12 \ g++-12 \ xxd \ + libpcre2-dev \ + python3-dev \ + bison \ + flex \ + m4 \ # python3-pip for conf template generation python3-pip && \ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100 --slave /usr/bin/g++ g++ /usr/bin/g++-12 && \ diff --git a/docker/Dockerfile.build.fhi72.rhel9 b/docker/Dockerfile.build.fhi72.rhel9 new file mode 100644 index 0000000000..fc5570a85c --- /dev/null +++ b/docker/Dockerfile.build.fhi72.rhel9 @@ -0,0 +1,79 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +# Dockerfile for the Open-Air-Interface RAN Build for FHI 7.2 +# Valid for UBI9 +# +#--------------------------------------------------------------------- + +FROM ran-base:latest as ran-base +ENV TZ=Europe + +RUN rm -Rf /oai-ran +WORKDIR /oai-ran +COPY . . + +## Download and build DPDK +RUN wget http://fast.dpdk.org/rel/dpdk-20.11.9.tar.xz && \ + tar -xvf dpdk-20.11.9.tar.xz && \ + cd dpdk-stable-20.11.9 && \ + meson build && \ + ninja -C build && \ + ninja install -C build + +## Build Fronthaul library +RUN git clone https://gerrit.o-ran-sc.org/r/o-du/phy.git /opt/phy && \ + cd /opt/phy && \ + git checkout oran_e_maintenance_release_v1.0 &&\ + git apply /oai-ran/cmake_targets/tools/oran_fhi_integration_patches/E/oaioran_E.patch && \ + cd /opt/phy/fhi_lib/lib && \ + RTE_SDK=/oai-ran/dpdk-stable-20.11.9/ XRAN_DIR=/opt/phy/fhi_lib make XRAN_LIB_SO=1 + +FROM ran-base as ran-build-fhi72 +ARG E2AP_VERSION=E2AP_V3 +ARG KPM_VERSION=KPM_V3_00 + +## Build and install OAI +RUN /bin/sh oaienv && \ + cd cmake_targets && \ + mkdir -p log && \ + scl enable gcc-toolset-12 "\ + ./build_oai \ + --gNB \ + --build-lib 'telnetsrv enbscope uescope nrscope' \ + -t oran_fhlib_5g --cmake-opt -Dxran_LOCATION=/opt/phy/fhi_lib/lib \ + --build-e2 --cmake-opt -DXAPP_MULTILANGUAGE=OFF --cmake-opt -DKPM_VERSION=$KPM_VERSION --cmake-opt -DE2AP_VERSION=$E2AP_VERSION" &&\ + # Mainly to see if the sanitize option was perfectly executed + ldd ran_build/build/nr-softmodem && \ + ldd ran_build/build/liboran_fhlib_5g.so && \ + ldd /opt/phy/fhi_lib/lib/build/libxran.so + +## Build FlexRIC for SM Models +RUN mkdir -p openair2/E2AP/flexric/build && \ + cd openair2/E2AP/flexric/build && \ + scl enable gcc-toolset-12 "\ + cmake -GNinja -DCMAKE_BUILD_TYPE=Release \ + -DXAPP_MULTILANGUAGE=OFF \ + -DKPM_VERSION=$KPM_VERSION \ + -DE2AP_VERSION=$E2AP_VERSION .. &&\ + ninja && \ + ninja install" diff --git a/docker/Dockerfile.build.fhi72.ubuntu22 b/docker/Dockerfile.build.fhi72.ubuntu22 new file mode 100644 index 0000000000..774f488ed7 --- /dev/null +++ b/docker/Dockerfile.build.fhi72.ubuntu22 @@ -0,0 +1,91 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +# Dockerfile for the Open-Air-Interface RAN Build for FHI 7.2 +# Valid for UBUNTU 22.04 +# +#--------------------------------------------------------------------- + +FROM ran-base:latest as ran-base + +ARG E2AP_VERSION=E2AP_V3 +ARG KPM_VERSION=KPM_V3_00 +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=Europe +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \ + DEBIAN_FRONTEND=noninteractive apt-get install --yes \ + meson \ + wget \ + xz-utils \ + pkg-config \ + libnuma-dev && \ + rm -rf /var/lib/apt/lists/* + +RUN rm -Rf /oai-ran +WORKDIR /oai-ran +COPY . . + +## Download and build DPDK +RUN wget http://fast.dpdk.org/rel/dpdk-20.11.9.tar.xz && \ + tar -xvf dpdk-20.11.9.tar.xz && \ + cd dpdk-stable-20.11.9 && \ + meson build && \ + ninja -C build && \ + ninja install -C build + +## Build Fronthaul library +RUN git clone https://gerrit.o-ran-sc.org/r/o-du/phy.git /opt/phy && \ + cd /opt/phy && \ + git checkout oran_e_maintenance_release_v1.0 &&\ + git apply /oai-ran/cmake_targets/tools/oran_fhi_integration_patches/E/oaioran_E.patch && \ + cd /opt/phy/fhi_lib/lib && \ + RTE_SDK=/oai-ran/dpdk-stable-20.11.9/ XRAN_DIR=/opt/phy/fhi_lib make XRAN_LIB_SO=1 + +FROM ran-base as ran-build-fhi72 +## Build and install OAI +#run build_oai to build the target image +RUN /bin/sh oaienv && \ + cd cmake_targets && \ + mkdir -p log && \ + ./build_oai \ + --gNB \ + --build-lib "telnetsrv enbscope uescope nrscope" \ + -t oran_fhlib_5g --cmake-opt -Dxran_LOCATION=/opt/phy/fhi_lib/lib \ + --build-e2 --cmake-opt -DXAPP_MULTILANGUAGE=OFF --cmake-opt -DKPM_VERSION=$KPM_VERSION --cmake-opt -DE2AP_VERSION=$E2AP_VERSION && \ + $BUILD_OPTION && \ + # Mainly to see if the sanitize option was perfectly executed + ldd ran_build/build/nr-softmodem && \ + ldd ran_build/build/liboran_fhlib_5g.so && \ + ldd /opt/phy/fhi_lib/lib/build/libxran.so + +## Build FlexRIC for SM Models +RUN mkdir -p openair2/E2AP/flexric/build && \ + cd openair2/E2AP/flexric/build && \ + cmake -GNinja -DCMAKE_BUILD_TYPE=Release \ + -DXAPP_MULTILANGUAGE=OFF \ + -DKPM_VERSION=$KPM_VERSION \ + -DE2AP_VERSION=$E2AP_VERSION \ + -DCMAKE_C_COMPILER=gcc-12 \ + -DCMAKE_CXX_COMPILER=g++-12 .. && \ + ninja && \ + ninja install diff --git a/docker/Dockerfile.gNB.fhi72.rhel9 b/docker/Dockerfile.gNB.fhi72.rhel9 new file mode 100644 index 0000000000..6bac3c71d9 --- /dev/null +++ b/docker/Dockerfile.gNB.fhi72.rhel9 @@ -0,0 +1,125 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +# Dockerfile for the Open-Air-Interface 7.2 Fronthaul +# Valid for UBI9 +# +#--------------------------------------------------------------------- + +FROM ran-base:latest as gnb-base + +FROM ran-build-fhi72:latest as gnb-build + +#start from scratch for target executable +FROM registry.access.redhat.com/ubi9/ubi:latest as oai-gnb-fhi72 +ENV TZ=Europe/Paris + +# Copy the entitlements +COPY ./etc-pki-entitlement /etc/pki/entitlement + +RUN rm -f /etc/rhsm-host && \ + subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms && \ + dnf update -y && \ + cat /etc/os-release && \ + dnf install -y \ + procps-ng \ + libXpm \ + libX11 \ + lksctp-tools \ + xz \ + numactl-libs \ + numactl-devel \ + pkg-config \ + pciutils \ + tzdata \ + gdb \ + python3 \ + python3-pip \ + net-tools \ + iputils && \ + pip3 install six && \ + pip3 install requests && \ + echo "/usr/local/lib" > /etc/ld.so.conf.d/local-lib.conf && \ + echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local-lib.conf && \ + subscription-manager repos --disable codeready-builder-for-rhel-9-x86_64-rpms && \ + rm -rf /etc/pki/entitlement + +WORKDIR /opt/oai-gnb/bin +COPY --from=gnb-build \ + /oai-ran/cmake_targets/ran_build/build/nr-softmodem ./ +COPY ./docker/scripts/gnb_entrypoint.sh ./entrypoint.sh + +COPY --from=gnb-build \ + /oai-ran/cmake_targets/ran_build/build/librfsimulator.so \ + /oai-ran/cmake_targets/ran_build/build/liboran_fhlib_5g.so \ + /oai-ran/cmake_targets/ran_build/build/liboai_transpro.so \ + /oai-ran/cmake_targets/ran_build/build/libcoding.so \ + /oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \ + /oai-ran/cmake_targets/ran_build/build/libdfts.so \ + /oai-ran/cmake_targets/ran_build/build/libldpc*.so \ + /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \ + /oai-ran/cmake_targets/ran_build/build/libtelnetsrv_ci.so \ + /usr/local/lib/ + +## Libxran library +COPY --from=gnb-build \ + /opt/phy/fhi_lib/lib/build/libxran.so \ + /opt/phy/fhi_lib/lib/build/ + +## Copy all DPDK libraries as liboran_fhlib_5g.so require most of them +COPY --from=gnb-build /usr/local/lib64/ /usr/local/lib64/ + +## Copy E2 SM models +COPY --from=gnb-build /usr/local/lib64/flexric /usr/local/lib64/flexric + +# Copying file for configuration module +COPY --from=gnb-base \ + /lib64/libconfig.so.11 \ + /lib64/libforms.so.2 \ + /lib64/libblas.so.3 \ + /lib64/libcblas.so.3 \ + /lib64/liblapack.so.3 \ + /lib64/liblapacke.so.3 \ + /lib64/libicudata.so.67 \ + /lib64/libicui18n.so.67 \ + /lib64/libicuuc.so.67 \ + /lib64/ + +RUN ldconfig && \ + echo "---- ldd on executable nr-softmodem ----" && \ + ldd /opt/oai-gnb/bin/nr-softmodem && \ + echo "---- ldd on shared libraries ----" && \ + ldd /usr/local/lib/librfsimulator.so \ + /usr/local/lib/liboran_fhlib_5g.so \ + /usr/local/lib/liboai_transpro.so \ + /usr/local/lib/libcoding.so \ + /usr/local/lib/libparams_libconfig.so \ + /usr/local/lib/libdfts.so \ + /usr/local/lib/libldpc*.so \ + /usr/local/lib/libtelnetsrv.so \ + /usr/local/lib/libtelnetsrv_ci.so \ + /opt/phy/fhi_lib/lib/build/libxran.so + +WORKDIR /opt/oai-gnb +COPY --from=gnb-base /tini /tini +ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"] +CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"] diff --git a/docker/Dockerfile.gNB.fhi72.ubuntu22 b/docker/Dockerfile.gNB.fhi72.ubuntu22 new file mode 100644 index 0000000000..5bb0ad5234 --- /dev/null +++ b/docker/Dockerfile.gNB.fhi72.ubuntu22 @@ -0,0 +1,113 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +# Dockerfile for the Open-Air-Interface 7.2 Fronthaul +# Valid for Ubuntu22.04 +# +#--------------------------------------------------------------------- + +FROM ran-base:latest as gnb-base + +FROM ran-build-fhi72:latest as gnb-build + + +#start from scratch for target executable +FROM ubuntu:jammy as oai-gnb +ARG BUILD_OPTION +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=Europe + +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \ + DEBIAN_FRONTEND=noninteractive apt-get install --yes \ + software-properties-common \ + procps \ + pkg-config \ + libsctp1 \ + tzdata \ + libblas3 \ + libconfig9 \ + openssl \ + net-tools \ + iperf \ + iproute2 \ + iputils-ping \ + gdb \ + pciutils \ + libpcap-dev \ + xz-utils \ + libnuma-dev \ + python3 \ + python3-six \ + python3-requests &&\ +# if the --sanitize option was used to build, additional packages are required + /bin/bash -c 'if [[ "$BUILD_OPTION" = "--sanitize" ]]; then DEBIAN_FRONTEND=noninteractive apt-get install --yes \ + libasan5 \ + libubsan1 \ + liblapacke; fi' && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /opt/oai-gnb/bin +COPY --from=gnb-build \ + /oai-ran/cmake_targets/ran_build/build/nr-softmodem ./ +COPY ./docker/scripts/gnb_entrypoint.sh ./entrypoint.sh + +COPY --from=gnb-build \ + /oai-ran/cmake_targets/ran_build/build/librfsimulator.so \ + /oai-ran/cmake_targets/ran_build/build/liboai_transpro.so \ + /oai-ran/cmake_targets/ran_build/build/libcoding.so \ + /oai-ran/cmake_targets/ran_build/build/libparams_libconfig.so \ + /oai-ran/cmake_targets/ran_build/build/libdfts.so \ + /oai-ran/cmake_targets/ran_build/build/libldpc*.so \ + /oai-ran/cmake_targets/ran_build/build/libtelnetsrv.so \ + /oai-ran/cmake_targets/ran_build/build/libtelnetsrv_ci.so \ + /usr/local/lib/ + +## Libxran library +COPY --from=gnb-build \ + /opt/phy/fhi_lib/lib/build/libxran.so \ + /opt/phy/fhi_lib/lib/build/ + +## Copy all DPDK libraries as liboran_fhlib_5g.so require most of them +COPY --from=gnb-build /usr/local/lib/x86_64-linux-gnu /usr/local/lib/x86_64-linux-gnu/ + +## Copy E2 SM models +COPY --from=gnb-build /usr/local/lib/flexric /usr/local/lib/flexric + +RUN ldconfig && \ + echo "---- ldd on nr-softmodem ----" && \ + ldd /opt/oai-gnb/bin/nr-softmodem && \ + echo "---- ldd on shared libraries ----" && \ + ldd /usr/local/lib/librfsimulator.so \ + /usr/local/lib/liboai_transpro.so \ + /usr/local/lib/libcoding.so \ + /usr/local/lib/libparams_libconfig.so \ + /usr/local/lib/libdfts.so \ + /usr/local/lib/libldpc*.so \ + /usr/local/lib/libtelnetsrv.so \ + /usr/local/lib/libtelnetsrv_ci.so \ + /opt/phy/fhi_lib/lib/build/libxran.so + +WORKDIR /opt/oai-gnb +COPY --from=gnb-base /tini /tini +ENTRYPOINT ["/tini", "-v", "--", "/opt/oai-gnb/bin/entrypoint.sh"] +CMD ["/opt/oai-gnb/bin/nr-softmodem", "-O", "/opt/oai-gnb/etc/gnb.conf"] diff --git a/docker/README.md b/docker/README.md index 483a049f9d..7ec63aacae 100644 --- a/docker/README.md +++ b/docker/README.md @@ -33,29 +33,30 @@ For all platforms, the strategy for building docker/podman images is the same: into which all targets are compiled. * Then from the `ran-build` shared image, we can build target images for: - eNB - - gNB (with UHD) - - gNB (with AW2S), only on RHEL9 + - gNB/DU (with UHD) + - gNB/DU (with AW2S), only on RHEL9 - lte-UE - nr-UE - + - nr-cuup These target images will only contain: - the generated executable (for example `lte-softmodem`) - the generated shared libraries (for example `liboai_usrpdevif.so`) - the needed libraries and packages to run these generated binaries - Some configuration file templates - Some tools (such as `ping`, `ifconfig`) +* From the `ran-build-fhi72` image, we can build target image for: + - gNB/DU (with FHI 7.2) Note that on every push to develop (i.e., typically after integrating merge requests), we build all images and push them to [Docker Hub](https://hub.docker.com/u/oaisoftwarealliance). To pull them, do -``` +```bash docker pull oaisoftwarealliance/oai-gnb:develop docker pull oaisoftwarealliance/oai-nr-ue:develop docker pull oaisoftwarealliance/oai-enb:develop docker pull oaisoftwarealliance/oai-lte-ue:develop ``` -Have a look at [this README](../ci-scripts/yaml_files/5g_rfsimulator/README.md) to get some -information on how to use the images. +Have a look at [this README](../ci-scripts/yaml_files/5g_rfsimulator/README.md) to get some information on how to use the images. # 2. File organization # @@ -65,18 +66,20 @@ Targets can be: - `base` for an image named `ran-base` (shared image) - `build` for an image named `ran-build` (shared image) +- `build.fhi72` for an image named `ran-build-fhi72` - `eNB` for an image named `oai-enb` - `gNB` for an image named `oai-gnb` - `nr-cuup` for an image named `oai-nr-cuup` - `gNB.aw2s` for an image named `oai-gnb-aw2s` +- `gNB.fhi` for an image named `oai-gnb-fhi72` - `lteUE` for an image named `oai-lte-ue` - `nrUE` for an image named `oai-nr-ue` The currently-supported OS are: -- `rhel9` for Red Hat Entreprise Linux (including images for an OpenShift cluster) +- `rhel9` for Red Hat Enterprise Linux and Openshift Universal Base Image - `ubuntu22` for Ubuntu 22.04 LTS -- `rocky` for Rocky-Linux 8.7 +- `rocky` for Rocky-Linux 9 For more details regarding the build on an Openshift Cluster, see [OpenShift README](../openshift/README.md). @@ -95,25 +98,28 @@ There are two shared images: one that has all dependencies, and a second that co ```bash git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git cd openairinterface5g -git checkout develop +# default branch is develop, to change use git checkout docker build --target ran-base --tag ran-base:latest --file docker/Dockerfile.base.ubuntu22 . +# if you want use USRP, AW2S and RFSimulator radios docker build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.ubuntu22 . +# if you want to use front-haul 7.2 and RFSimulator radios +docker build --tag ran-build-fhi72:latest --file docker/Dockerfile.build.fhi72.ubuntu22 . ``` -After building both: +After building: ```bash docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ran-build latest f2633a7f5102 1 minute ago 6.81GB ran-base latest 5c9c02a5b4a8 1 minute ago 2.4GB - +ran-build-fhi72 latest 5190c06dbb4d 1 minute ago 6.86GB ... ``` Note that the steps are identical for `rocky-linux`. -### 3.2.1. Additional build otions +### 3.2.1. Additional build options This is only available for the Ubuntu version of Dockerfiles. @@ -149,13 +155,18 @@ For example, the eNB: docker build --target oai-enb --tag oai-enb:latest --file docker/Dockerfile.eNB.ubuntu22 . ``` +To build gNB/DU with 7.2 fronthaul support: + +```bash +docker build --target oai-gnb-fhi72 --tag oai-gnb-fhi72:latest --file docker/Dockerfile.gNB.fhi72.ubuntu22 . +``` + After a while: ``` docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE oai-enb latest 25ddbd8b7187 1 minute ago 516MB - 875ea3b05b60 8 minutes ago 8.18GB ran-build latest f2633a7f5102 1 hour ago 6.81GB ran-base latest 5c9c02a5b4a8 1 hour ago 2.4GB ``` @@ -176,16 +187,33 @@ docker build --target oai-gnb --tag oai-gnb:latest --file docker/Dockerfile.gNB. Normally the target image will be around 200 Mbytes bigger. -# 4. Building using `podman` under Red Hat Entreprise Linux 8.2 # +# 4. Building using `podman` under Red Hat Entreprise Linux 9.X # Analogous to the above steps: -``` -sudo podman build --target ran-base --tag ran-base:latest --file docker/Dockerfile.base.rhel9 . -sudo podman build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.rhel9 . -sudo podman build --target oai-enb --tag oai-enb:latest --file docker/Dockerfile.eNB.rhel9 . + +```bash +podman build --target ran-base --tag ran-base:latest --file docker/Dockerfile.base.rhel9 . +# if you want use USRP, AW2S and RFSimulator radios +podman build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.rhel9 . +# if you want to use front-haul 7.2 and RFSimulator radios +podman build --tag ran-build-fhi72:latest --file docker/Dockerfile.build.fhi72.rhel9 . ``` -# 5. Running modems using `docker` under Ubuntu 18.04 # +## 4.1 Building target images + +For example, the eNB: + +```bash +podman build --target oai-enb --tag oai-gnb:latest --file docker/Dockerfile.eNB.rhel9 . +``` + +To build gNB/DU with 7.2 fronthaul support: + +```bash +podman build --target oai-gnb-fhi72 --tag oai-gnb-fhi72:latest --file docker/Dockerfile.gNB.fhi72.rhel9 . +``` + +# 5. Running modems using `docker` under Ubuntu # The easiest is to run them from a `docker-compose` file, which is used by the CI to test OAI. Some folders under `ci-scripts/yaml_files` have a README that @@ -200,55 +228,47 @@ file](../ci-scripts/yaml_files/sa_b200_gnb/docker-compose.yml). It is also possible to mount your own configuration file. The following docker-compose file can be used to start a gNB using a B210 and your own config, located at `/tmp/gnb.conf`: -``` -version: '3.8' +```yaml services: gnb_mono_tdd: image: oai-gnb:latest - privileged: true container_name: sa-b200-gnb + cap_drop: + - ALL + cap_add: + - SYS_NICE + - IPC_LOCK + ulimits: + core: -1 # for core dumps environment: USE_B2XX: 'yes' - USE_ADDITIONAL_OPTIONS: --sa -E --continuous-tx + USE_ADDITIONAL_OPTIONS: --sa --RUs.[0].sdr_addrs serial=30C51D4 --telnetsrv --telnetsrv.shrmod ci --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function + devices: + - /dev/bus/usb/:/dev/bus/usb/ volumes: - - /dev:/dev - - /tmp/gnb.conf:/opt/oai-gnb/etc/gnb.conf - networks: - public_net: - ipv4_address: 192.168.68.194 + - ../../conf_files/gnb.sa.band78.51prb.usrpb200.conf:/opt/oai-gnb/etc/gnb.conf + # for performance reasons, we use host mode: in bridge mode, we have + # unacceptable DL TCP performance. However, the whole point of + # containerization is to not be in host mode, so update this to macvlan + # later. + network_mode: "host" + #entrypoint: /bin/bash -c "sleep infinity" healthcheck: # pgrep does NOT work test: /bin/bash -c "ps aux | grep -v grep | grep -c softmodem" interval: 10s timeout: 5s retries: 5 - -networks: - public_net: - name: sa-b200-gnb-net - ipam: - config: - - subnet: 192.168.68.192/26 - driver_opts: - com.docker.network.bridge.name: "sa-gnb-net" ``` You should also change the `image` to the right image name and tag of the gNB you are using. Start like this: -``` +```bash docker-compose up # gNB in foreground docker-compose up -d # gNB in background ``` Stop it like this (in both cases): -``` +```bash docker-compose down ``` - -Note that in the above case, ALL devices are passed into the container (by -mounting `/dev`), which allows the container to access all devices connected to -the host! - -# 6. Running modems using `podman` under Red Hat Entreprise Linux 8.2 # - -TODO. diff --git a/openshift/README.md b/openshift/README.md index 9f0923bd60..5560621e68 100644 --- a/openshift/README.md +++ b/openshift/README.md @@ -27,36 +27,37 @@ the ran-build image. If you reinstalled dependencies, you have to restart from ran-base. You first need to login. Do: + ```bash oc login -u -p --server ``` -## RHEL8 Entitlements +Create a project/namespace where you will create your images -To build the RAN images, we use the `codeready-builder-for-rhel-8-x86_64-rpms` repository with all the proper development libraries. -This repository is not directly accessible from the UBI RHEL8 image (`registry.access.redhat.com/ubi8/ubi:latest`). -Therefore, we need to copy certificates and subscription manager configuration files from a registered RHEL8 machine. +```bash +oc new-project oaicicd-ran +``` -on a `RHEL8` physical machine (or a virtual machine) connected to the OpenShift Cluster, recover the entitlement and the RH subscription manager configs: +**NOTE**: If you change the project name then you have to change it in all the `yaml` files. + +## RHEL9 Entitlements + +To build the RAN images, we use the `codeready-builder-for-rhel-9-x86_64-rpms` +repository with all the proper development libraries. To access the library you +will need `etc-pki-entitlement` inside the container image. + +To import `etc-pki-entitlement` in your project follow this +[guide](https://docs.openshift.com/container-platform/4.14/cicd/builds/running-entitled-builds.html#builds-source-secrets-entitlements_running-entitled-builds) + +In case you have difficulties in following it then you can copy the +certificates from an RHEL9 host ```bash oc create configmap rhsm-conf --from-file /etc/rhsm/rhsm.conf oc create configmap rhsm-ca --from-file /etc/rhsm/ca/redhat-uep.pem - oc create secret generic etc-pki-entitlement --from-file /etc/pki/entitlement/{NUMBER_ON_YOUR_COMPUTER}.pem --from-file /etc/pki/entitlement/{NUMBER_ON_YOUR_COMPUTER}-key.pem ``` -These configmaps and secret will be shared by all the build configs in your OC -project. No need to do it each time. However, these files expire every month -or so. If you have done a build on your OC project and try again a few weeks -later, you may need to re-copy them. (The CI recopies them every time.) - -```bash -oc delete secret etc-pki-entitlement -oc delete cm rhsm-conf -oc delete cm rhsm-ca -``` - # 2. Build of `base` shared image Create an image stream and build config that specify image properties and build parameters, then start the build: diff --git a/openshift/oai-gnb-fhi72-bc.yaml b/openshift/oai-gnb-fhi72-bc.yaml new file mode 100644 index 0000000000..2d8861e2d6 --- /dev/null +++ b/openshift/oai-gnb-fhi72-bc.yaml @@ -0,0 +1,48 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +kind: BuildConfig +apiVersion: build.openshift.io/v1 +metadata: + name: "oai-gnb-fhi72" +spec: + runPolicy: "Serial" + source: + type: "Binary" + secrets: + - secret: + name: etc-pki-entitlement + destinationDir: etc-pki-entitlement + configMaps: + - configMap: + name: rhsm-conf + destinationDir: rhsm-conf + - configMap: + name: rhsm-ca + destinationDir: rhsm-ca + strategy: + dockerStrategy: + dockerfilePath: "docker/Dockerfile.gNB.fhi72.rhel9" + output: + to: + kind: "ImageStreamTag" + name: "oai-gnb-fhi72:latest" diff --git a/openshift/oai-gnb-fhi72-is.yaml b/openshift/oai-gnb-fhi72-is.yaml new file mode 100644 index 0000000000..a012434295 --- /dev/null +++ b/openshift/oai-gnb-fhi72-is.yaml @@ -0,0 +1,30 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +apiVersion: image.openshift.io/v1 +kind: ImageStream +metadata: + name: oai-gnb-fhi72 + namespace: oaicicd-ran +spec: + lookupPolicy: + local: true diff --git a/openshift/ran-build-fhi72-bc.yaml b/openshift/ran-build-fhi72-bc.yaml new file mode 100644 index 0000000000..35a7bd55b0 --- /dev/null +++ b/openshift/ran-build-fhi72-bc.yaml @@ -0,0 +1,39 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +kind: BuildConfig +apiVersion: build.openshift.io/v1 +metadata: + name: "ran-build-fhi72" +spec: + runPolicy: "Serial" + nodeSelector: + kubernetes.io/hostname: demophon + source: + type: "Binary" + strategy: + dockerStrategy: + dockerfilePath: "docker/Dockerfile.build.fhi72.rhel9" + output: + to: + kind: "ImageStreamTag" + name: "ran-build-fhi72:latest" diff --git a/openshift/ran-build-fhi72-is.yaml b/openshift/ran-build-fhi72-is.yaml new file mode 100644 index 0000000000..eb5f9bebf6 --- /dev/null +++ b/openshift/ran-build-fhi72-is.yaml @@ -0,0 +1,30 @@ +#/* +# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more +# * contributor license agreements. See the NOTICE file distributed with +# * this work for additional information regarding copyright ownership. +# * The OpenAirInterface Software Alliance licenses this file to You under +# * the OAI Public License, Version 1.1 (the "License"); you may not use this file +# * except in compliance with the License. +# * You may obtain a copy of the License at +# * +# * http://www.openairinterface.org/?page_id=698 +# * +# * Unless required by applicable law or agreed to in writing, software +# * distributed under the License is distributed on an "AS IS" BASIS, +# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# * See the License for the specific language governing permissions and +# * limitations under the License. +# *------------------------------------------------------------------------------- +# * For more information about the OpenAirInterface (OAI) Software Alliance: +# * contact@openairinterface.org +# */ +#--------------------------------------------------------------------- +# +apiVersion: image.openshift.io/v1 +kind: ImageStream +metadata: + name: ran-build-fhi72 + namespace: oaicicd-ran +spec: + lookupPolicy: + local: true