From 3b0f4479c4f519ce713f54ddf0daa35a4e33bdce Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 22 May 2024 15:02:11 +0200 Subject: [PATCH 01/11] Add Ubuntu 24.04 to supported distributions Apart from the obvious change of adding ubuntu24.04 to supported distributions, we need to remove liblapacke-dev as it is incompatible with libatlas3-base. Installing both aborts with: The following packages have unmet dependencies: liblapacke : Breaks: libatlas3-base (< 3.10.3-14) but 3.10.3-13ubuntu1 is to be installed It seems that we don't need it though, as liblapacke-dev installs the right atlas library as a dependency. --- README.md | 1 + cmake_targets/tools/build_helper | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 542f18c4df..c47adb796d 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Supported OS Ubuntu 18 Supported OS Ubuntu 20 Supported OS Ubuntu 22 + Supported OS Ubuntu 24 Supported OS RHEL8 Supported OS RELH9 Supported OS Fedora 37 diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 041621ffe4..e78efd9558 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -103,6 +103,7 @@ get_distribution_release() { check_supported_distribution() { local distribution=$(get_distribution_release) case "$distribution" in + "ubuntu24.04") return 0 ;; "ubuntu23.10") return 0 ;; "ubuntu22.04") return 0 ;; "ubuntu21.04") return 0 ;; @@ -602,7 +603,6 @@ check_install_oai_software() { ninja-build \ pkg-config \ git \ - libatlas-base-dev \ libblas-dev \ liblapack-dev \ liblapacke-dev \ From 473e7207db2b5689933f344fac72189b1628518a Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 22 May 2024 15:27:32 +0200 Subject: [PATCH 02/11] Remove Ubuntu 18.04 from supported distributions Ubuntu 18.04 is now in "Extended Security Maintenance", but otherwise gets no updates. Remove it from supported distributions (regarding installing packages); users can of course still use it. Users are encouraged to upgrade to Ubuntu 20+. --- CMakeLists.txt | 16 ---------------- README.md | 1 - cmake_targets/build_oai | 1 - cmake_targets/tools/build_helper | 22 ++-------------------- 4 files changed, 2 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 683127851c..fc1e23d1dd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -180,22 +180,6 @@ add_boolean_option(SANITIZE_ADDRESS False "enable the address sanitizer (ASan)" if (SANITIZE_ADDRESS) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-common") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fno-common") - # There seems to be some incompatibility with pthread_create and the RT scheduler, which - # results in pthread_create hanging. - # - # When we switch from Ubuntu 16.04 to 18.04, we found that running with the address sanitizer, - # the pthread_create function calls were not working. The inital thought was that we were - # trying to create a thread that was not-blocking and would eventually crash the machine during - # the run. After more debugging, we found that we would never even start the thread. We narrowed - # down the first two instances of pthread_create in the gNB and NR UE to be sctp_eNB_task and - # one_thread, respectively. We found that adding sleeps, and various other pauses to the threads - # had not effect. From there, we found that if we add an abort(); prior to the thread loop, we - # do not execute that. This indicated to us that the problem is not likely to be a non-blocking - # thread, but perhaps and issue with pthread_create itself. From there we begain to research the - # issue on the web. See: https://github.com/google/sanitizers/issues/1125 - # - # Google searching indicates this appears to be a problem since at least 2018. This could be something - # wrong in the pthread library, or something subtly wrong in this CMakeLists.txt. Use Ubuntu 20.04 instead. endif () add_boolean_option(SANITIZE_THREAD False "enable the address sanitizer (TSan)" ON) diff --git a/README.md b/README.md index c47adb796d..2da98022f7 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,6 @@

License - Supported OS Ubuntu 18 Supported OS Ubuntu 20 Supported OS Ubuntu 22 Supported OS Ubuntu 24 diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 5c55cee1a5..609af470d0 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -418,7 +418,6 @@ function main() { CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True -DSANITIZE_UNDEFINED=True" shift;; --sanitize-address | -fsanitize=address) - grep -sq "Ubuntu 18.04" /etc/os-release && echo_error "Bug in OS with this option, see CMakeLists.txt" CMAKE_CMD="$CMAKE_CMD -DSANITIZE_ADDRESS=True" shift;; --sanitize-undefined | -fsanitize=undefined) diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index e78efd9558..c4553765e4 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -108,7 +108,6 @@ check_supported_distribution() { "ubuntu22.04") return 0 ;; "ubuntu21.04") return 0 ;; "ubuntu20.04") return 0 ;; - "ubuntu18.04") return 0 ;; "debian11") return 0 ;; "fedora36") return 0 ;; "fedora37") return 0 ;; @@ -322,7 +321,7 @@ check_install_usrp_uhd_driver(){ $SUDO apt-get remove libuhd3.14.1 -y || true $SUDO apt-get remove libuhd3.15.0 -y || true local distribution=$(get_distribution_release) - if [[ "$distribution" == "ubuntu18.04" || "$distribution" == "ubuntu20.04" || "$distribution" == "ubuntu22.04" ]]; then + if [[ "$distribution" == "ubuntu20.04" || "$distribution" == "ubuntu22.04" ]]; then $SUDO apt-get remove libuhd4.?.? -y || true fi v=$(lsb_release -cs) @@ -352,7 +351,7 @@ check_install_usrp_uhd_driver(){ $SUDO apt-get update $SUDO apt-get -y install python-tk $boost_libs_ubuntu libusb-1.0-0-dev case "$(get_distribution_release)" in - "ubuntu18.04" | "ubuntu20.04" | "ubuntu22.04") + "ubuntu20.04" | "ubuntu22.04") $SUDO apt-get -y install libuhd-dev libuhd4.5.0 uhd-host ;; esac @@ -529,24 +528,11 @@ check_install_soapy () { install_soapy_iris_from_source } -# for ubuntu 18 we need a special repository (https://apt.kitware.com/) to install cmake >= 3.12 -add_cmake_repo () { - $SUDO $INSTALLER -y install wget - wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | $SUDO tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null - echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ bionic main' | $SUDO tee /etc/apt/sources.list.d/kitware.list >/dev/null - $SUDO $INSTALLER -y update - $SUDO rm /usr/share/keyrings/kitware-archive-keyring.gpg - $SUDO $INSTALLER -y install kitware-archive-keyring -} - check_install_additional_tools (){ $SUDO $INSTALLER update -y local optional_packages="" if [[ "$OS_BASEDISTRO" == "debian" ]]; then case "$(get_distribution_release)" in - "ubuntu18.04") - optional_packages="python-dev python-pip python-pyroute2 python python-numpy python-scipy python-matplotlib ctags" - ;; "ubuntu20.04" | "ubuntu21.04" | "ubuntu22.04" | "debian11" ) optional_packages="python3 python3-pip python3-dev python3-scipy python3-matplotlib python3-pyroute2 universal-ctags" ;; @@ -587,10 +573,6 @@ check_install_oai_software() { if [[ "$OS_BASEDISTRO" == "debian" ]]; then $SUDO apt install -y software-properties-common case "$(get_distribution_release)" in - "ubuntu18.04") - add_cmake_repo - specific_packages="" - ;; "debian11") specific_packages="libz-dev" ;; From 53ff69ed0460caa40f76ba88d71170cc8d78c2be Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 22 May 2024 15:38:43 +0200 Subject: [PATCH 03/11] Bump required cmake version to v3.16 Debian 11: cmake 3.18 Fedora 40: cmake 3.29 RHEL 9: installs cmake3, which is typically very recent, likely 3.29 Ubuntu 20: cmake 3.16 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fc1e23d1dd..f9a5e88ee0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,7 @@ # Author: laurent THOMAS, Lionel GAUTHIER -cmake_minimum_required (VERSION 3.12) +cmake_minimum_required (VERSION 3.16) project (OpenAirInterface LANGUAGES C CXX) ######################################################### From 4ac6e1c83d1c7cf1169a673f3216fa290806c14b Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 22 May 2024 17:44:12 +0200 Subject: [PATCH 04/11] Update build_oai help --- cmake_targets/build_oai | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 609af470d0..5594b856af 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -52,7 +52,7 @@ TARGET_LIST="" function print_help() { echo_info " This script compiles OpenAirInterface Software, and can install dependencies -for a number of distributions (Ubuntu 18-22, Fedora, RHEL7/8). +for a number of distributions (Ubuntu 22-24, Fedora, RHEL9). Options: --arch-native Passes -march=native to the compiler. From 8ddc49e5e85141de235006f7c4ccf751ffb3fe89 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 22 May 2024 17:44:37 +0200 Subject: [PATCH 05/11] CBLAS_TRANSPOSE is a typedef'd enum It seems libatlas-base-dev provided an `enum CBLAS_TRANSPOSE`, but we don't install it anymore. Now, in Ubuntu, there is only a typedef'd version in cblas.h; for RHEL(-derivatives), the same typedef'd version is in cblas/cblas.h. --- .../linear_preprocessing_rec.c | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c b/openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c index 59da43e564..9ac775c4be 100644 --- a/openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c +++ b/openair1/PHY/LTE_UE_TRANSPORT/linear_preprocessing_rec.c @@ -11,7 +11,12 @@ data storage. */ #include #include #include +#include +#if defined RHEL_RELEASE_CODE +#include +#else #include +#endif #include #include #include @@ -22,8 +27,8 @@ data storage. */ void transpose (int N, float complex *A, float complex *Result) { // COnputes C := alpha*op(A)*op(B) + beta*C, - enum CBLAS_TRANSPOSE transa = CblasTrans; - enum CBLAS_TRANSPOSE transb = CblasNoTrans; + CBLAS_TRANSPOSE transa = CblasTrans; + CBLAS_TRANSPOSE transb = CblasNoTrans; int rows_opA = N; // number of rows in op(A) and in C int col_opB = N; //number of columns of op(B) and in C int col_opA = N; //number of columns in op(A) and rows in op(B) @@ -62,8 +67,8 @@ void transpose (int N, float complex *A, float complex *Result) void conjugate_transpose (int N, float complex *A, float complex *Result) { // Computes C := alpha*op(A)*op(B) + beta*C, - enum CBLAS_TRANSPOSE transa = CblasConjTrans; - enum CBLAS_TRANSPOSE transb = CblasNoTrans; + CBLAS_TRANSPOSE transa = CblasConjTrans; + CBLAS_TRANSPOSE transb = CblasNoTrans; int rows_opA = N; // number of rows in op(A) and in C int col_opB = N; //number of columns of op(B) and in C int col_opA = N; //number of columns in op(A) and rows in op(B) @@ -100,8 +105,8 @@ void conjugate_transpose (int N, float complex *A, float complex *Result) void H_hermH_plus_sigma2I (int N, int M, float complex *A, float sigma2, float complex *Result) { //C := alpha*op(A)*op(B) + beta*C, - enum CBLAS_TRANSPOSE transa = CblasConjTrans; - enum CBLAS_TRANSPOSE transb = CblasNoTrans; + CBLAS_TRANSPOSE transa = CblasConjTrans; + CBLAS_TRANSPOSE transb = CblasNoTrans; int rows_opA = N; // number of rows in op(A) and in C int col_opB = N; //number of columns of op(B) and in C int col_opA = N; //number of columns in op(A) and rows in op(B) @@ -127,8 +132,8 @@ void H_hermH_plus_sigma2I (int N, int M, float complex *A, float sigma2, float c void HH_herm_plus_sigma2I (int M, int N, float complex *A, float sigma2, float complex *Result) { //C := alpha*op(A)*op(B) + beta*C, - enum CBLAS_TRANSPOSE transa = CblasNoTrans; - enum CBLAS_TRANSPOSE transb = CblasConjTrans; + CBLAS_TRANSPOSE transa = CblasNoTrans; + CBLAS_TRANSPOSE transb = CblasConjTrans; int k = N; //number of columns in op(A) and rows in op(B),k float complex alpha = 1.0+I*0; int lda = N; @@ -195,8 +200,8 @@ void eigen_vectors_values (int N, float complex *A, float complex *Vectors, floa } void mutl_matrix_matrix_row_based(float complex* M0, float complex* M1, int rows_M0, int col_M0, int rows_M1, int col_M1, float complex* Result ){ - enum CBLAS_TRANSPOSE transa = CblasNoTrans; - enum CBLAS_TRANSPOSE transb = CblasNoTrans; + CBLAS_TRANSPOSE transa = CblasNoTrans; + CBLAS_TRANSPOSE transb = CblasNoTrans; int rows_opA = rows_M0; // number of rows in op(A) and in C int col_opB = col_M1; //number of columns of op(B) and in C int col_opA = col_M0; //number of columns in op(A) and rows in op(B) @@ -226,8 +231,8 @@ void mutl_matrix_matrix_row_based(float complex* M0, float complex* M1, int rows } void mutl_matrix_matrix_col_based(float complex* M0, float complex* M1, int rows_M0, int col_M0, int rows_M1, int col_M1, float complex* Result ){ - enum CBLAS_TRANSPOSE transa = CblasNoTrans; - enum CBLAS_TRANSPOSE transb = CblasNoTrans; + CBLAS_TRANSPOSE transa = CblasNoTrans; + CBLAS_TRANSPOSE transb = CblasNoTrans; int rows_opA = rows_M0; // number of rows in op(A) and in C int col_opB = col_M1; //number of columns of op(B) and in C int col_opA = col_M0; //number of columns in op(A) and rows in op(B) From 0abe8b6493a431464b0166b1bfe8778c3e8171e2 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 22 May 2024 20:07:07 +0200 Subject: [PATCH 06/11] Fixup: we are now at fedora 40, update link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2da98022f7..c84dc7b073 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Supported OS Ubuntu 24 Supported OS RHEL8 Supported OS RELH9 - Supported OS Fedora 37 + Supported OS Fedora 40

From b6f156cf4a033c30747dcfbace9e5ba5bcbb4f7b Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 29 May 2024 08:11:13 +0200 Subject: [PATCH 07/11] Switch to branch that resolves flexric warnings A number of warnings appear when compiling flexric with gcc-12, which we use in the next commit. Those have been fixed upstream. Switch to the updated version to avoid warnings. --- openair2/E2AP/flexric | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openair2/E2AP/flexric b/openair2/E2AP/flexric index f1c08ed2b9..beabdd072c 160000 --- a/openair2/E2AP/flexric +++ b/openair2/E2AP/flexric @@ -1 +1 @@ -Subproject commit f1c08ed2b9b1eceeda7941dd7bf435db0168dd56 +Subproject commit beabdd072ca9e381d4d27c9fbc6bb19382817489 From 94497435e7386629b82e2fb1e03b37365fdad89a Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Wed, 22 May 2024 20:11:51 +0200 Subject: [PATCH 08/11] Upgrade CI images to Ubuntu 22 This updates all images in the CI to Ubuntu 22. It also updates corresponding documentation. Remove python(2) from the image, as it is not needed. Update documentation. It seems that the gcc coming in Ubuntu 22 does not like stack-protector-strong, so remove it as well. Since we compile Flexric, which does not support Ubuntu 22's default gcc-11 (it hits a compile bug), switch to gcc-12 manually. Since we update the compiler, we also need to be careful to use the right address sanitizer version (which is bundled with the compiler version). To avoid a reinstallation of the wrong asan version in target images, we modify Ubuntu 22 targets to copy libasan from the base image. This is necessary since we use update-alternative in the base image, but we don't want to install compilers in the target images to use update-alternatives to install the right asan version... This should be undone when switching to Ubuntu 24 in the future, as it will have a newer default gcc version, such that we don't need to update the compile in the first place. Upgrade libpython in lteUE for U22 upgrade to make it compatible with UHD. --- ci-scripts/cls_containerize.py | 4 +-- ....ubuntu20 => Dockerfile.unittest.ubuntu22} | 2 +- .../4g_rfsimulator_fdd_05MHz/README.md | 2 +- ci-scripts/yaml_files/5g_l2sim_tdd/README.md | 4 +-- .../yaml_files/5g_rfsimulator/README.md | 2 +- doc/Aerial_FAPI_Split_Tutorial.md | 4 +-- doc/TESTBenches.md | 20 ++++++------- ...base.ubuntu20 => Dockerfile.base.ubuntu22} | 8 +++-- ...ild.ubuntu20 => Dockerfile.build.ubuntu22} | 4 +-- ...e.eNB.ubuntu20 => Dockerfile.eNB.ubuntu22} | 29 +++++++++++-------- ...buntu20 => Dockerfile.gNB.aerial.ubuntu22} | 2 +- ...file.gNB.aerial.ubuntu22.sanitize-address} | 2 +- ....ubuntu20 => Dockerfile.gNB.aw2s.ubuntu22} | 2 +- ...e.gNB.ubuntu20 => Dockerfile.gNB.ubuntu22} | 27 ++++++++++------- ...eRU.ubuntu20 => Dockerfile.lteRU.ubuntu22} | 19 ++++++------ ...eUE.ubuntu20 => Dockerfile.lteUE.ubuntu22} | 29 +++++++++++-------- ...p.ubuntu20 => Dockerfile.nr-cuup.ubuntu22} | 10 +++++-- ...nrUE.ubuntu20 => Dockerfile.nrUE.ubuntu22} | 29 +++++++++++-------- docker/README.md | 18 ++++++------ 19 files changed, 122 insertions(+), 95 deletions(-) rename ci-scripts/docker/{Dockerfile.unittest.ubuntu20 => Dockerfile.unittest.ubuntu22} (98%) rename docker/{Dockerfile.base.ubuntu20 => Dockerfile.base.ubuntu22} (91%) rename docker/{Dockerfile.build.ubuntu20 => Dockerfile.build.ubuntu22} (91%) rename docker/{Dockerfile.eNB.ubuntu20 => Dockerfile.eNB.ubuntu22} (84%) rename docker/{Dockerfile.gNB.aerial.ubuntu20 => Dockerfile.gNB.aerial.ubuntu22} (98%) rename docker/{Dockerfile.gNB.aerial.ubuntu20.sanitize-address => Dockerfile.gNB.aerial.ubuntu22.sanitize-address} (99%) rename docker/{Dockerfile.gNB.aw2s.ubuntu20 => Dockerfile.gNB.aw2s.ubuntu22} (99%) rename docker/{Dockerfile.gNB.ubuntu20 => Dockerfile.gNB.ubuntu22} (84%) rename docker/{Dockerfile.lteRU.ubuntu20 => Dockerfile.lteRU.ubuntu22} (86%) rename docker/{Dockerfile.lteUE.ubuntu20 => Dockerfile.lteUE.ubuntu22} (83%) rename docker/{Dockerfile.nr-cuup.ubuntu20 => Dockerfile.nr-cuup.ubuntu22} (86%) rename docker/{Dockerfile.nrUE.ubuntu20 => Dockerfile.nrUE.ubuntu22} (83%) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 5d353f2b77..82edcbb973 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -286,7 +286,7 @@ class Containerize(): self.host = result.group(0) if self.host == 'Ubuntu': self.cli = 'docker' - self.dockerfileprefix = '.ubuntu20' + self.dockerfileprefix = '.ubuntu22' self.cliBuildOptions = '' elif self.host == 'Red Hat': self.cli = 'sudo podman' @@ -677,7 +677,7 @@ class Containerize(): return False # build ran-unittests image - dockerfile = "ci-scripts/docker/Dockerfile.unittest.ubuntu20" + dockerfile = "ci-scripts/docker/Dockerfile.unittest.ubuntu22" ret = cmd.run(f'docker build --progress=plain --tag ran-unittests:{baseTag} --file {dockerfile} . &> {lSourcePath}/cmake_targets/log/unittest-build.log') if ret.returncode != 0: build_log_name = f'build_log_{self.testCase_id}' diff --git a/ci-scripts/docker/Dockerfile.unittest.ubuntu20 b/ci-scripts/docker/Dockerfile.unittest.ubuntu22 similarity index 98% rename from ci-scripts/docker/Dockerfile.unittest.ubuntu20 rename to ci-scripts/docker/Dockerfile.unittest.ubuntu22 index 57bc7f3bef..6098a1d1f6 100644 --- a/ci-scripts/docker/Dockerfile.unittest.ubuntu20 +++ b/ci-scripts/docker/Dockerfile.unittest.ubuntu22 @@ -21,7 +21,7 @@ #--------------------------------------------------------------------- # # Dockerfile for the Open-Air-Interface BUILD service -# Valid for Ubuntu 20.04 +# Valid for Ubuntu 22.04 # #--------------------------------------------------------------------- diff --git a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md index 3ac4962321..e761886855 100644 --- a/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md +++ b/ci-scripts/yaml_files/4g_rfsimulator_fdd_05MHz/README.md @@ -12,7 +12,7 @@ -This page is only valid for an `Ubuntu18` host. +This page is only valid for an `Ubuntu 22` host. **Table of Contents** diff --git a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md index 7fdb1bb8be..6579fcac5f 100644 --- a/ci-scripts/yaml_files/5g_l2sim_tdd/README.md +++ b/ci-scripts/yaml_files/5g_l2sim_tdd/README.md @@ -12,10 +12,8 @@ -This page is valid for an `Ubuntu18` host. -It is also valid for `Ubuntu 20.04`. +It is also valid for `Ubuntu 22.04`. -This tutorial is only valid once this file is merged into the `develop` branch. # 1. Adapt the `docker-compose` to your environment # The yaml file is in the following directory: `ci-scripts/yaml_files/5g_l2sim_tdd` diff --git a/ci-scripts/yaml_files/5g_rfsimulator/README.md b/ci-scripts/yaml_files/5g_rfsimulator/README.md index eec4eb17d2..87e98633f3 100644 --- a/ci-scripts/yaml_files/5g_rfsimulator/README.md +++ b/ci-scripts/yaml_files/5g_rfsimulator/README.md @@ -12,7 +12,7 @@ -This page is only valid for an `Ubuntu18` host. +This page is only valid for an `Ubuntu 22` host. **NOTE: this version (2023-01-27) has been updated for the `v1.5.0` version of the `OAI 5G CN`.** diff --git a/doc/Aerial_FAPI_Split_Tutorial.md b/doc/Aerial_FAPI_Split_Tutorial.md index d04c723ca2..46541fff95 100644 --- a/doc/Aerial_FAPI_Split_Tutorial.md +++ b/doc/Aerial_FAPI_Split_Tutorial.md @@ -202,8 +202,8 @@ With the nvIPC sources in the project directory, the docker image can be built. In order to build the final image, there is an intermediary image to be built (ran-base) ```bash ~$ cd ~/openairinterface5g/ -~/openairinterface5g$ docker build . -f docker/Dockerfile.base.ubuntu20 --tag ran-base:latest -~/openairinterface5g$ docker build . -f docker/Dockerfile.gNB.aerial.ubuntu20 --tag oai-gnb-aerial:latest +~/openairinterface5g$ docker build . -f docker/Dockerfile.base.ubuntu22 --tag ran-base:latest +~/openairinterface5g$ docker build . -f docker/Dockerfile.gNB.aerial.ubuntu22 --tag oai-gnb-aerial:latest ``` diff --git a/doc/TESTBenches.md b/doc/TESTBenches.md index c9453b10e0..58b7eeb862 100644 --- a/doc/TESTBenches.md +++ b/doc/TESTBenches.md @@ -112,16 +112,16 @@ information on how the images are built. - [RAN-Ubuntu18-Image-Builder](https://jenkins-oai.eurecom.fr/job/RAN-Ubuntu18-Image-Builder/) ~BUILD-ONLY ~4G-LTE ~5G-NR - run formatting check from `ci-scripts/docker/Dockerfile.formatting.bionic` - - obelix: Ubuntu 20 image build using docker (Note: builds U20 images while pipeline is named U18!) - - base image from `Dockerfile.base.ubuntu20` - - build image from `Dockerfile.build.ubuntu20`, followed by - - target image from `Dockerfile.eNB.ubuntu20` - - target image from `Dockerfile.gNB.ubuntu20` - - target image from `Dockerfile.nr-cuup.ubuntu20` - - target image from `Dockerfile.nrUE.ubuntu20` - - target image from `Dockerfile.lteUE.ubuntu20` - - target image from `Dockerfile.lteRU.ubuntu20` - - build unit tests from `ci-scripts/docker/Dockerfile.unittest.ubuntu20`, and run them + - obelix: Ubuntu 22 image build using docker (Note: builds U22 images while pipeline is named U18!) + - base image from `Dockerfile.base.ubuntu22` + - build image from `Dockerfile.build.ubuntu22`, followed by + - target image from `Dockerfile.eNB.ubuntu22` + - target image from `Dockerfile.gNB.ubuntu22` + - target image from `Dockerfile.nr-cuup.ubuntu22` + - target image from `Dockerfile.nrUE.ubuntu22` + - target image from `Dockerfile.lteUE.ubuntu22` + - target image from `Dockerfile.lteRU.ubuntu22` + - build unit tests from `ci-scripts/docker/Dockerfile.unittest.ubuntu22`, and run them #### Image Test pipelines diff --git a/docker/Dockerfile.base.ubuntu20 b/docker/Dockerfile.base.ubuntu22 similarity index 91% rename from docker/Dockerfile.base.ubuntu20 rename to docker/Dockerfile.base.ubuntu22 index 5687e21ac2..9ed0cd6beb 100644 --- a/docker/Dockerfile.base.ubuntu20 +++ b/docker/Dockerfile.base.ubuntu22 @@ -21,12 +21,12 @@ #--------------------------------------------------------------------- # # Dockerfile for the Open-Air-Interface BUILD service -# Valid for Ubuntu 20.04 +# Valid for Ubuntu 22.04 # #--------------------------------------------------------------------- -FROM ubuntu:focal AS ran-base +FROM ubuntu:jammy AS ran-base ARG NEEDED_GIT_PROXY ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Paris @@ -34,6 +34,7 @@ ENV BUILD_UHD_FROM_SOURCE=True ENV UHD_VERSION=4.4.0.0 #install developers pkg/repo +#use gcc-12 to avoid problems of default gcc-11 in FlexRIC RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \ DEBIAN_FRONTEND=noninteractive apt-get install --yes \ @@ -41,9 +42,12 @@ RUN apt-get update && \ build-essential \ psmisc \ git \ + gcc-12 \ + g++-12 \ xxd \ # 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 && \ pip3 install --ignore-installed pyyaml # Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini diff --git a/docker/Dockerfile.build.ubuntu20 b/docker/Dockerfile.build.ubuntu22 similarity index 91% rename from docker/Dockerfile.build.ubuntu20 rename to docker/Dockerfile.build.ubuntu22 index 3459e0b265..e92aecceda 100644 --- a/docker/Dockerfile.build.ubuntu20 +++ b/docker/Dockerfile.build.ubuntu22 @@ -21,7 +21,7 @@ #--------------------------------------------------------------------- # # Dockerfile for the Open-Air-Interface BUILD service -# Valid for Ubuntu 20.04 +# Valid for Ubuntu 22.04 # #--------------------------------------------------------------------- @@ -42,6 +42,6 @@ RUN /bin/sh oaienv && \ -w USRP -t Ethernet \ --build-e2 --cmake-opt -DXAPP_MULTILANGUAGE=OFF \ --noavx512 \ - --cmake-opt -DCMAKE_C_FLAGS="-Werror -fstack-protector-strong" --cmake-opt -DCMAKE_CXX_FLAGS="-Werror -fstack-protector-strong" $BUILD_OPTION && \ + --cmake-opt -DCMAKE_C_FLAGS="-Werror" --cmake-opt -DCMAKE_CXX_FLAGS="-Werror" $BUILD_OPTION && \ # Mainly to see if the sanitize option was perfectly executed ldd ran_build/build/nr-softmodem diff --git a/docker/Dockerfile.eNB.ubuntu20 b/docker/Dockerfile.eNB.ubuntu22 similarity index 84% rename from docker/Dockerfile.eNB.ubuntu20 rename to docker/Dockerfile.eNB.ubuntu22 index 8822349c0b..f71abefbc1 100644 --- a/docker/Dockerfile.eNB.ubuntu20 +++ b/docker/Dockerfile.eNB.ubuntu22 @@ -21,7 +21,7 @@ #--------------------------------------------------------------------- # # Dockerfile for the Open-Air-Interface BUILD service -# Valid for Ubuntu 20.04 +# Valid for Ubuntu 22.04 # #--------------------------------------------------------------------- @@ -31,7 +31,7 @@ FROM ran-build:latest AS enb-build #start from scratch for target executable -FROM ubuntu:focal as oai-enb +FROM ubuntu:jammy as oai-enb ARG BUILD_OPTION ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Paris @@ -42,14 +42,14 @@ RUN apt-get update && \ software-properties-common \ procps \ libsctp1 \ - libboost-chrono1.71.0 \ - libboost-date-time1.71.0 \ - libboost-filesystem1.71.0 \ - libboost-regex1.71.0 \ - libboost-serialization1.71.0 \ - libboost-thread1.71.0 \ - libboost-system1.71.0 \ - libboost-program-options1.71.0 \ + libboost-chrono1.74.0 \ + libboost-date-time1.74.0 \ + libboost-filesystem1.74.0 \ + libboost-regex1.74.0 \ + libboost-serialization1.74.0 \ + libboost-thread1.74.0 \ + libboost-system1.74.0 \ + libboost-program-options1.74.0 \ tzdata \ libblas3 \ libatlas3-base \ @@ -61,19 +61,24 @@ RUN apt-get update && \ iputils-ping \ iproute2 \ gdb \ - python \ python3 \ python3-six \ python3-requests \ libusb-1.0-0 && \ # 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 \ + #libasan5 \ # see below libubsan1 \ liblapacke; fi' && \ apt-get clean -y && \ rm -rf /var/lib/apt/lists/* +# we select another compile (gcc-12) for compilation, requiring another libasan +# library version. Installing it above would install the wrong version. Hence, +# copy the right version from ran-build. When upgrading to Ubuntu24, install +# the correct one above! +COPY --from=enb-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86_64-linux-gnu/ + WORKDIR /opt/oai-enb/bin COPY --from=enb-build \ /oai-ran/cmake_targets/ran_build/build/lte-softmodem ./ diff --git a/docker/Dockerfile.gNB.aerial.ubuntu20 b/docker/Dockerfile.gNB.aerial.ubuntu22 similarity index 98% rename from docker/Dockerfile.gNB.aerial.ubuntu20 rename to docker/Dockerfile.gNB.aerial.ubuntu22 index 3984e236cb..f3cfe7a4be 100644 --- a/docker/Dockerfile.gNB.aerial.ubuntu20 +++ b/docker/Dockerfile.gNB.aerial.ubuntu22 @@ -58,7 +58,7 @@ RUN /bin/sh oaienv && \ #start from scratch for target executable -FROM ubuntu:focal as oai-gnb-aerial +FROM ubuntu:jammy as oai-gnb-aerial ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe diff --git a/docker/Dockerfile.gNB.aerial.ubuntu20.sanitize-address b/docker/Dockerfile.gNB.aerial.ubuntu22.sanitize-address similarity index 99% rename from docker/Dockerfile.gNB.aerial.ubuntu20.sanitize-address rename to docker/Dockerfile.gNB.aerial.ubuntu22.sanitize-address index 147d7231a4..0713d65a2c 100644 --- a/docker/Dockerfile.gNB.aerial.ubuntu20.sanitize-address +++ b/docker/Dockerfile.gNB.aerial.ubuntu22.sanitize-address @@ -58,7 +58,7 @@ RUN /bin/sh oaienv && \ #start from scratch for target executable -FROM ubuntu:focal as oai-gnb-aerial +FROM ubuntu:jammy as oai-gnb-aerial ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe diff --git a/docker/Dockerfile.gNB.aw2s.ubuntu20 b/docker/Dockerfile.gNB.aw2s.ubuntu22 similarity index 99% rename from docker/Dockerfile.gNB.aw2s.ubuntu20 rename to docker/Dockerfile.gNB.aw2s.ubuntu22 index c0bd7f7401..a000d9a643 100644 --- a/docker/Dockerfile.gNB.aw2s.ubuntu20 +++ b/docker/Dockerfile.gNB.aw2s.ubuntu22 @@ -21,7 +21,7 @@ #--------------------------------------------------------------------- # # Dockerfile for the Open-Air-Interface BUILD service -# Valid for Ubuntu18.04 +# Valid for Ubuntu 22.04 # #--------------------------------------------------------------------- diff --git a/docker/Dockerfile.gNB.ubuntu20 b/docker/Dockerfile.gNB.ubuntu22 similarity index 84% rename from docker/Dockerfile.gNB.ubuntu20 rename to docker/Dockerfile.gNB.ubuntu22 index dc24bb7636..f039d9dce0 100644 --- a/docker/Dockerfile.gNB.ubuntu20 +++ b/docker/Dockerfile.gNB.ubuntu22 @@ -31,7 +31,7 @@ FROM ran-build:latest AS gnb-build #start from scratch for target executable -FROM ubuntu:focal as oai-gnb +FROM ubuntu:jammy as oai-gnb ARG BUILD_OPTION ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Paris @@ -42,14 +42,14 @@ RUN apt-get update && \ software-properties-common \ procps \ libsctp1 \ - libboost-chrono1.71.0 \ - libboost-date-time1.71.0 \ - libboost-filesystem1.71.0 \ - libboost-regex1.71.0 \ - libboost-serialization1.71.0 \ - libboost-thread1.71.0 \ - libboost-system1.71.0 \ - libboost-program-options1.71.0 \ + libboost-chrono1.74.0 \ + libboost-date-time1.74.0 \ + libboost-filesystem1.74.0 \ + libboost-regex1.74.0 \ + libboost-serialization1.74.0 \ + libboost-thread1.74.0 \ + libboost-system1.74.0 \ + libboost-program-options1.74.0 \ tzdata \ libblas3 \ libatlas3-base \ @@ -61,19 +61,24 @@ RUN apt-get update && \ iproute2 \ iputils-ping \ gdb \ - python \ python3 \ python3-six \ python3-requests \ libusb-1.0-0 && \ # 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 \ + #libasan5 \ # see below libubsan1 \ liblapacke; fi' && \ apt-get clean -y && \ rm -rf /var/lib/apt/lists/* +# we select another compile (gcc-12) for compilation, requiring another libasan +# library version. Installing it above would install the wrong version. Hence, +# copy the right version from ran-build. When upgrading to Ubuntu24, install +# the correct one above! +COPY --from=gnb-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86_64-linux-gnu/ + WORKDIR /opt/oai-gnb/bin COPY --from=gnb-build \ /oai-ran/cmake_targets/ran_build/build/nr-softmodem ./ diff --git a/docker/Dockerfile.lteRU.ubuntu20 b/docker/Dockerfile.lteRU.ubuntu22 similarity index 86% rename from docker/Dockerfile.lteRU.ubuntu20 rename to docker/Dockerfile.lteRU.ubuntu22 index 6fa2a167b7..44a7337e40 100644 --- a/docker/Dockerfile.lteRU.ubuntu20 +++ b/docker/Dockerfile.lteRU.ubuntu22 @@ -21,7 +21,7 @@ #--------------------------------------------------------------------- # # Dockerfile for the Open-Air-Interface BUILD service -# Valid for Ubuntu 20.04 +# Valid for Ubuntu 22.04 # #--------------------------------------------------------------------- @@ -31,7 +31,7 @@ FROM ran-build:latest AS ru-build #start from scratch for target executable -FROM ubuntu:focal as oai-lte-ru +FROM ubuntu:jammy as oai-lte-ru ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Paris @@ -46,7 +46,6 @@ RUN apt-get update && \ libconfig9 \ net-tools \ gdb \ - python \ python3 \ python3-six \ python3-requests \ @@ -74,13 +73,13 @@ COPY --from=ru-base /usr/local/lib/libuhd.so.4.4.0 /usr/local/lib COPY --from=ru-base /usr/local/lib/uhd/utils/uhd_images_downloader.py /opt/oai-lte-ru/bin COPY --from=ru-base \ - /usr/lib/x86_64-linux-gnu/libboost_chrono.so.1.71.0 \ - /usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.71.0 \ - /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.71.0 \ - /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.71.0 \ - /usr/lib/x86_64-linux-gnu/libboost_serialization.so.1.71.0 \ - /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.71.0 \ - /usr/lib/x86_64-linux-gnu/libboost_system.so.1.71.0 \ + /usr/lib/x86_64-linux-gnu/libboost_chrono.so.1.74.0 \ + /usr/lib/x86_64-linux-gnu/libboost_date_time.so.1.74.0 \ + /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.74.0 \ + /usr/lib/x86_64-linux-gnu/libboost_regex.so.1.74.0 \ + /usr/lib/x86_64-linux-gnu/libboost_serialization.so.1.74.0 \ + /usr/lib/x86_64-linux-gnu/libboost_thread.so.1.74.0 \ + /usr/lib/x86_64-linux-gnu/libboost_system.so.1.74.0 \ /usr/lib/x86_64-linux-gnu/ RUN /bin/bash -c "ln -s /usr/local/lib/liboai_usrpdevif.so /usr/local/lib/liboai_device.so" && \ diff --git a/docker/Dockerfile.lteUE.ubuntu20 b/docker/Dockerfile.lteUE.ubuntu22 similarity index 83% rename from docker/Dockerfile.lteUE.ubuntu20 rename to docker/Dockerfile.lteUE.ubuntu22 index 12652c3141..1a0b8c1841 100644 --- a/docker/Dockerfile.lteUE.ubuntu20 +++ b/docker/Dockerfile.lteUE.ubuntu22 @@ -31,7 +31,7 @@ FROM ran-build:latest AS lte-ue-build #start from scratch for target executable -FROM ubuntu:focal as oai-lte-ue +FROM ubuntu:jammy as oai-lte-ue ARG BUILD_OPTION ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Paris @@ -42,25 +42,24 @@ RUN apt-get update && \ software-properties-common \ procps \ libsctp1 \ - libboost-chrono1.71.0 \ - libboost-date-time1.71.0 \ - libboost-filesystem1.71.0 \ - libboost-regex1.71.0 \ - libboost-serialization1.71.0 \ - libboost-thread1.71.0 \ - libboost-system1.71.0 \ - libboost-program-options1.71.0 \ + libboost-chrono1.74.0 \ + libboost-date-time1.74.0 \ + libboost-filesystem1.74.0 \ + libboost-regex1.74.0 \ + libboost-serialization1.74.0 \ + libboost-thread1.74.0 \ + libboost-system1.74.0 \ + libboost-program-options1.74.0 \ tzdata \ liblapacke \ libatlas3-base \ libconfig9 \ openssl \ net-tools \ - python \ python3 \ python3-six \ python3-requests \ - libpython3.8 \ + libpython3.10 \ libusb-1.0-0 \ iputils-ping \ iproute2 \ @@ -68,12 +67,18 @@ RUN apt-get update && \ iperf && \ # 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 \ + #libasan5 \ # see below libubsan1 \ liblapacke; fi' && \ apt-get clean -y && \ rm -rf /var/lib/apt/lists/* +# we select another compile (gcc-12) for compilation, requiring another libasan +# library version. Installing it above would install the wrong version. Hence, +# copy the right version from ran-build. When upgrading to Ubuntu24, install +# the correct one above! +COPY --from=lte-ue-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86_64-linux-gnu/ + WORKDIR /opt/oai-lte-ue/bin COPY --from=lte-ue-build \ /oai-ran/cmake_targets/ran_build/build/lte-uesoftmodem \ diff --git a/docker/Dockerfile.nr-cuup.ubuntu20 b/docker/Dockerfile.nr-cuup.ubuntu22 similarity index 86% rename from docker/Dockerfile.nr-cuup.ubuntu20 rename to docker/Dockerfile.nr-cuup.ubuntu22 index 0a371e669c..b618a578be 100644 --- a/docker/Dockerfile.nr-cuup.ubuntu20 +++ b/docker/Dockerfile.nr-cuup.ubuntu22 @@ -30,7 +30,7 @@ FROM ran-base:latest as gnb-base FROM ran-build:latest AS gnb-build -FROM ubuntu:focal as oai-nr-cuup +FROM ubuntu:jammy as oai-nr-cuup ARG BUILD_OPTION ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe @@ -45,11 +45,17 @@ RUN apt-get update && \ openssl && \ # 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 \ + #libasan5 \ see below libubsan1 \ liblapacke; fi' && \ rm -rf /var/lib/apt/lists/* +# we select another compile (gcc-12) for compilation, requiring another libasan +# library version. Installing it above would install the wrong version. Hence, +# copy the right version from ran-build. When upgrading to Ubuntu24, install +# the correct one above! +COPY --from=gnb-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86_64-linux-gnu/ + WORKDIR /opt/oai-gnb/bin COPY --from=gnb-build \ /oai-ran/cmake_targets/ran_build/build/nr-cuup \ diff --git a/docker/Dockerfile.nrUE.ubuntu20 b/docker/Dockerfile.nrUE.ubuntu22 similarity index 83% rename from docker/Dockerfile.nrUE.ubuntu20 rename to docker/Dockerfile.nrUE.ubuntu22 index dfbd5f93e6..13387d2523 100644 --- a/docker/Dockerfile.nrUE.ubuntu20 +++ b/docker/Dockerfile.nrUE.ubuntu22 @@ -21,7 +21,7 @@ #--------------------------------------------------------------------- # # Dockerfile for the Open-Air-Interface BUILD service -# Valid for Ubuntu 20.04 +# Valid for Ubuntu 22.04 # #--------------------------------------------------------------------- @@ -31,7 +31,7 @@ FROM ran-build:latest AS nr-ue-build #start from scratch for target executable -FROM ubuntu:focal as oai-nr-ue +FROM ubuntu:jammy as oai-nr-ue ARG BUILD_OPTION ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Paris @@ -42,14 +42,14 @@ RUN apt-get update && \ software-properties-common \ procps \ libsctp1 \ - libboost-chrono1.71.0 \ - libboost-date-time1.71.0 \ - libboost-filesystem1.71.0 \ - libboost-regex1.71.0 \ - libboost-serialization1.71.0 \ - libboost-thread1.71.0 \ - libboost-system1.71.0 \ - libboost-program-options1.71.0 \ + libboost-chrono1.74.0 \ + libboost-date-time1.74.0 \ + libboost-filesystem1.74.0 \ + libboost-regex1.74.0 \ + libboost-serialization1.74.0 \ + libboost-thread1.74.0 \ + libboost-system1.74.0 \ + libboost-program-options1.74.0 \ tzdata \ liblapacke \ libatlas3-base \ @@ -57,7 +57,6 @@ RUN apt-get update && \ openssl \ net-tools \ gdb \ - python \ python3 \ python3-six \ python3-requests \ @@ -68,11 +67,17 @@ RUN apt-get update && \ iperf && \ # 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 \ + #libasan5 \ # see below libubsan1; fi' && \ apt-get clean -y && \ rm -rf /var/lib/apt/lists/* +# we select another compile (gcc-12) for compilation, requiring another libasan +# library version. Installing it above would install the wrong version. Hence, +# copy the right version from ran-build. When upgrading to Ubuntu24, install +# the correct one above! +COPY --from=nr-ue-build /usr/lib/x86_64-linux-gnu/libasan.so.8.0.0 /usr/lib/x86_64-linux-gnu/ + WORKDIR /opt/oai-nr-ue/bin COPY --from=nr-ue-build \ /oai-ran/cmake_targets/ran_build/build/nr-uesoftmodem \ diff --git a/docker/README.md b/docker/README.md index 578cd47274..483a049f9d 100644 --- a/docker/README.md +++ b/docker/README.md @@ -75,18 +75,18 @@ Targets can be: The currently-supported OS are: - `rhel9` for Red Hat Entreprise Linux (including images for an OpenShift cluster) -- `ubuntu20` for Ubuntu 20.04 LTS +- `ubuntu22` for Ubuntu 22.04 LTS - `rocky` for Rocky-Linux 8.7 For more details regarding the build on an Openshift Cluster, see [OpenShift README](../openshift/README.md). -# 3. Building using `docker` under Ubuntu 20.04 # +# 3. Building using `docker` under Ubuntu 22.04 # ## 3.1. Pre-requisites ## * `git` installed * `docker-ce` installed -* Pulling `ubuntu:focal` from DockerHub +* Pulling `ubuntu:jammy` from DockerHub ## 3.2. Building the shared images ## @@ -96,8 +96,8 @@ There are two shared images: one that has all dependencies, and a second that co git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git cd openairinterface5g git checkout develop -docker build --target ran-base --tag ran-base:latest --file docker/Dockerfile.base.ubuntu20 . -docker build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.ubuntu20 . +docker build --target ran-base --tag ran-base:latest --file docker/Dockerfile.base.ubuntu22 . +docker build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.ubuntu22 . ``` After building both: @@ -115,12 +115,12 @@ Note that the steps are identical for `rocky-linux`. ### 3.2.1. Additional build otions -This is only available for the Ubuntu-20 version. +This is only available for the Ubuntu version of Dockerfiles. You can, for example, create a `sanitizer` version of the ran-build image. ```bash -docker build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.ubuntu20 --build-arg "BUILD_OPTION=--sanitize" . +docker build --target ran-build --tag ran-build:latest --file docker/Dockerfile.build.ubuntu22 --build-arg "BUILD_OPTION=--sanitize" . ``` Currently the `--sanitize` option for `build_oai` enables: @@ -146,7 +146,7 @@ You can also use this docker build arguments to pass any available option(s) on For example, the eNB: ```bash -docker build --target oai-enb --tag oai-enb:latest --file docker/Dockerfile.eNB.ubuntu20 . +docker build --target oai-enb --tag oai-enb:latest --file docker/Dockerfile.eNB.ubuntu22 . ``` After a while: @@ -171,7 +171,7 @@ Note that the steps are identical for `rocky-linux`. If you have used the sanitizer option, then you should also pass it when building the target image: ```bash -docker build --target oai-gnb --tag oai-gnb:latest --file docker/Dockerfile.gNB.ubuntu20 --build-arg "BUILD_OPTION=--sanitize" . +docker build --target oai-gnb --tag oai-gnb:latest --file docker/Dockerfile.gNB.ubuntu22 --build-arg "BUILD_OPTION=--sanitize" . ``` Normally the target image will be around 200 Mbytes bigger. From 70719c3b8ff14364266660e01e3317fe34b7362f Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Tue, 25 Jun 2024 10:26:54 +0200 Subject: [PATCH 09/11] fix(test): using older version of iperf2 for lte feMBMS RF-sim test iperf2 2.0.13, used in Ubuntu 20, does not need a "back channel"; we can therefore use it in feMBMS (which does a broadcast, without back channel). Ubuntu 22 comes with 2.1.5, which seems to require a back channel, or at least, we cannot use it reliably in feMBMS. Hence, downgrade to older iperf2 version. Signed-off-by: Raphael Defosseux --- docker/Dockerfile.eNB.ubuntu22 | 9 ++++++++- docker/Dockerfile.lteUE.ubuntu22 | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile.eNB.ubuntu22 b/docker/Dockerfile.eNB.ubuntu22 index f71abefbc1..c57e11a2a5 100644 --- a/docker/Dockerfile.eNB.ubuntu22 +++ b/docker/Dockerfile.eNB.ubuntu22 @@ -56,7 +56,7 @@ RUN apt-get update && \ libconfig9 \ openssl \ net-tools \ - iperf \ + wget \ iperf3 \ iputils-ping \ iproute2 \ @@ -65,6 +65,13 @@ RUN apt-get update && \ python3-six \ python3-requests \ libusb-1.0-0 && \ +# Installing older version of iperf2 for feMBMS test + wget --quiet http://fr.archive.ubuntu.com/ubuntu/pool/universe/i/iperf/iperf_2.0.13+dfsg1-1build1_amd64.deb && \ + dpkg -i iperf_2.0.13+dfsg1-1build1_amd64.deb && \ +# iperf --version returns 1 that fails docker build + iperf --version || true && \ + rm -f iperf_2.0.13+dfsg1-1build1_amd64.deb && \ + apt-get remove -y wget && \ # 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 \ # see below diff --git a/docker/Dockerfile.lteUE.ubuntu22 b/docker/Dockerfile.lteUE.ubuntu22 index 1a0b8c1841..d3d4571782 100644 --- a/docker/Dockerfile.lteUE.ubuntu22 +++ b/docker/Dockerfile.lteUE.ubuntu22 @@ -64,7 +64,14 @@ RUN apt-get update && \ iputils-ping \ iproute2 \ iperf3 \ - iperf && \ + wget && \ +# Installing older version of iperf2 for feMBMS test + wget --quiet http://fr.archive.ubuntu.com/ubuntu/pool/universe/i/iperf/iperf_2.0.13+dfsg1-1build1_amd64.deb && \ + dpkg -i iperf_2.0.13+dfsg1-1build1_amd64.deb && \ +# iperf --version returns 1 that fails docker build + iperf --version || true && \ + rm -f iperf_2.0.13+dfsg1-1build1_amd64.deb && \ + apt-get remove -y wget && \ # 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 \ # see below From 199f8c21cb3bb14a6dfac3732d626b62c2054c68 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 28 May 2024 12:55:32 +0200 Subject: [PATCH 10/11] Update cross-compilation builder to Ubuntu 22 Update instructions and CI for cross-compilation on Ubuntu 22. Note that for the dockerfile, we use egrep -L which has changed and does not exit with code 0 on no match. Instead, use -vqz to invert return code (0 if nothing found, otherwise 1). --- ci-scripts/cls_containerize.py | 2 +- doc/TESTBenches.md | 4 ++-- doc/cross-compile.md | 20 ++++++++-------- ...4 => Dockerfile.base.ubuntu22.cross-arm64} | 24 +++++++++---------- ... => Dockerfile.build.ubuntu22.cross-arm64} | 6 ++--- 5 files changed, 28 insertions(+), 28 deletions(-) rename docker/{Dockerfile.base.ubuntu20.cross-arm64 => Dockerfile.base.ubuntu22.cross-arm64} (83%) rename docker/{Dockerfile.build.ubuntu20.cross-arm64 => Dockerfile.build.ubuntu22.cross-arm64} (94%) diff --git a/ci-scripts/cls_containerize.py b/ci-scripts/cls_containerize.py index 82edcbb973..911a6555b5 100644 --- a/ci-scripts/cls_containerize.py +++ b/ci-scripts/cls_containerize.py @@ -321,7 +321,7 @@ class Containerize(): imageNames.append(('oai-nr-cuup', 'nr-cuup', 'oai-nr-cuup-asan', '--build-arg "BUILD_OPTION=--sanitize"')) result = re.search('build_cross_arm64', self.imageKind) if result is not None: - self.dockerfileprefix = '.ubuntu20.cross-arm64' + self.dockerfileprefix = '.ubuntu22.cross-arm64' # Workaround for some servers, we need to erase completely the workspace if self.forcedWorkspaceCleanup: diff --git a/doc/TESTBenches.md b/doc/TESTBenches.md index 58b7eeb862..17c869d55e 100644 --- a/doc/TESTBenches.md +++ b/doc/TESTBenches.md @@ -89,8 +89,8 @@ information on how the images are built. - [RAN-ARM-Cross-Compile-Builder](https://jenkins-oai.eurecom.fr/job/RAN-ARM-Cross-Compile-Builder/) ~BUILD-ONLY ~4G-LTE ~5G-NR - orion: Cross-compilation from Intel to ARM - - base image from `Dockerfile.base.ubuntu20.cross-arm64` - - build image from `Dockerfile.build.ubuntu20.cross-arm64` (no target images) + - base image from `Dockerfile.base.ubuntu22.cross-arm64` + - build image from `Dockerfile.build.ubuntu22.cross-arm64` (no target images) - [RAN-cppcheck](https://jenkins-oai.eurecom.fr/job/RAN-cppcheck/) ~BUILD-ONLY ~4G-LTE ~5G-NR - bellatrix diff --git a/doc/cross-compile.md b/doc/cross-compile.md index 7e8205eaa6..b452aabb9d 100644 --- a/doc/cross-compile.md +++ b/doc/cross-compile.md @@ -5,7 +5,7 @@ ## Environment -- OS: ubuntu 20.04 +- OS: ubuntu 22.04 ### Set up the environment @@ -15,21 +15,21 @@ Set up for install the package for aarch64. sudo dpkg --add-architecture arm64 echo -e \ - "deb [arch=arm64] http://ports.ubuntu.com/ focal main restricted\n"\ - "deb [arch=arm64] http://ports.ubuntu.com/ focal-updates main restricted\n"\ - "deb [arch=arm64] http://ports.ubuntu.com/ focal universe\n"\ - "deb [arch=arm64] http://ports.ubuntu.com/ focal-updates universe\n"\ - "deb [arch=arm64] http://ports.ubuntu.com/ focal multiverse\n"\ - "deb [arch=arm64] http://ports.ubuntu.com/ focal-updates multiverse\n"\ - "deb [arch=arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse"\ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy main restricted\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates main restricted\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy universe\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates universe\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy multiverse\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates multiverse\n"\ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy-backports main restricted universe multiverse"\ | sudo tee /etc/apt/sources.list.d/arm-cross-compile-sources.list sudo cp /etc/apt/sources.list "/etc/apt/sources.list.`date`.backup" sudo sed -i -E "s/(deb)\ (http:.+)/\1\ [arch=amd64]\ \2/" /etc/apt/sources.list sudo apt update -sudo apt install -y gcc-9-aarch64-linux-gnu \ - g++-9-aarch64-linux-gnu +sudo apt install -y gcc-11-aarch64-linux-gnu \ + g++-11-aarch64-linux-gnu sudo apt-get install -y \ libatlas-base-dev:arm64 \ diff --git a/docker/Dockerfile.base.ubuntu20.cross-arm64 b/docker/Dockerfile.base.ubuntu22.cross-arm64 similarity index 83% rename from docker/Dockerfile.base.ubuntu20.cross-arm64 rename to docker/Dockerfile.base.ubuntu22.cross-arm64 index 70b790ba4d..83d891a110 100644 --- a/docker/Dockerfile.base.ubuntu20.cross-arm64 +++ b/docker/Dockerfile.base.ubuntu22.cross-arm64 @@ -21,12 +21,12 @@ #--------------------------------------------------------------------- # # Dockerfile for the Open-Air-Interface BUILD service -# Valid for Ubuntu 20.04 to cross-compile for ARM64 +# Valid for Ubuntu 22.04 to cross-compile for ARM64 # #--------------------------------------------------------------------- -# Very important, the focal image shall not be using mirrors. A lot of them do NOT support ARM64. -FROM ubuntu:focal AS ran-base +# Very important, the jammy image shall not be using mirrors. A lot of them do NOT support ARM64. +FROM ubuntu:jammy AS ran-base ENV DEBIAN_FRONTEND=noninteractive ENV TZ=Europe/Paris # Specifying a working version of SIMDE for ARM: @@ -37,13 +37,13 @@ RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get upgrade --yes && \ #enabling arm64 architecture dpkg --add-architecture arm64 && \ - echo "deb [arch=arm64] http://ports.ubuntu.com/ focal main restricted\n" \ - "deb [arch=arm64] http://ports.ubuntu.com/ focal-updates main restricted\n" \ - "deb [arch=arm64] http://ports.ubuntu.com/ focal universe\n" \ - "deb [arch=arm64] http://ports.ubuntu.com/ focal-updates universe\n" \ - "deb [arch=arm64] http://ports.ubuntu.com/ focal multiverse\n" \ - "deb [arch=arm64] http://ports.ubuntu.com/ focal-updates multiverse\n" \ - "deb [arch=arm64] http://ports.ubuntu.com/ focal-backports main restricted universe multiverse" \ + echo "deb [arch=arm64] http://ports.ubuntu.com/ jammy main restricted\n" \ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates main restricted\n" \ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy universe\n" \ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates universe\n" \ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy multiverse\n" \ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy-updates multiverse\n" \ + "deb [arch=arm64] http://ports.ubuntu.com/ jammy-backports main restricted universe multiverse" \ | tee /etc/apt/sources.list.d/arm-cross-compile-sources.list && \ cp /etc/apt/sources.list "/etc/apt/sources.list.`date`.backup" && \ sed -i -E "s/(deb)\ (http:.+)/\1\ [arch=amd64]\ \2/" /etc/apt/sources.list && \ @@ -69,8 +69,8 @@ RUN apt-get update && \ zlib1g-dev:arm64 \ # cross build libs and compilers libc6-dev-i386 \ - gcc-9-aarch64-linux-gnu \ - g++-9-aarch64-linux-gnu && \ + gcc-11-aarch64-linux-gnu \ + g++-11-aarch64-linux-gnu && \ apt-get clean # Add "Tini - A tiny but valid init for containers", https://github.com/krallin/tini diff --git a/docker/Dockerfile.build.ubuntu20.cross-arm64 b/docker/Dockerfile.build.ubuntu22.cross-arm64 similarity index 94% rename from docker/Dockerfile.build.ubuntu20.cross-arm64 rename to docker/Dockerfile.build.ubuntu22.cross-arm64 index c278bf66be..371651e5ec 100644 --- a/docker/Dockerfile.build.ubuntu20.cross-arm64 +++ b/docker/Dockerfile.build.ubuntu22.cross-arm64 @@ -21,7 +21,7 @@ #--------------------------------------------------------------------- # # Dockerfile for the Open-Air-Interface BUILD service -# Valid for Ubuntu 20.04 to cross-compile for ARM64 +# Valid for Ubuntu 22.04 to cross-compile for ARM64 # #--------------------------------------------------------------------- @@ -47,6 +47,6 @@ RUN /bin/sh oaienv && \ ninja dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem params_libconfig coding rfsimulator > ../../log/all.txt 2>&1; \ # displaying errors and warnings egrep -A3 "warning:|error:" ../../log/all.txt || true && \ - # will fail only for errors - egrep -L "error:" ../../log/all.txt && \ + # will fail only if string "errors:" is found + egrep "error:" -vqz ../../log/all.txt && \ echo "====== End of log for cross-build executables ======" From ee57ae6598d3a4b2c2d39ed3a7f47b15162a66d0 Mon Sep 17 00:00:00 2001 From: Robert Schmidt Date: Tue, 28 May 2024 13:30:38 +0200 Subject: [PATCH 11/11] doc/cross-compile.md: update some text, compile with ninja --- cmake_targets/cross-arm.cmake | 4 ++-- doc/cross-compile.md | 14 +++++++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/cmake_targets/cross-arm.cmake b/cmake_targets/cross-arm.cmake index 6209245876..5384c09c5a 100644 --- a/cmake_targets/cross-arm.cmake +++ b/cmake_targets/cross-arm.cmake @@ -1,8 +1,8 @@ set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) -set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc-9) -set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++-9) +set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc-11) +set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++-11) set(CROSS_COMPILE 1) set(bnProc_gen_128_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NATIVE_DIR}) # /../build) diff --git a/doc/cross-compile.md b/doc/cross-compile.md index b452aabb9d..ce61ce2e40 100644 --- a/doc/cross-compile.md +++ b/doc/cross-compile.md @@ -46,11 +46,15 @@ sudo apt-get install -y \ zlib1g-dev:arm64 ``` +The above enables apt to download packages for arm64. It also installs +gcc cross-compilers for aarch64 in version 11. This version needs to match the +versions of gcc defined in the cmake cross-compilation file (`cross-arm.cmake`). + ## Install and Build ### Install required packages -Use the host compiler to install some dependencies. +Use the host compiler to install its dependencies. ```shell cd cmake_targets @@ -85,9 +89,9 @@ be defined in order to tell cmake where the host tools have been built. ```shell cd ../build-cross -cmake ../../.. -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build +cmake ../../.. -GNinja -DCMAKE_TOOLCHAIN_FILE=../../../cmake_targets/cross-arm.cmake -DNATIVE_DIR=../build -make -j`nproc` dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim -make -j`nproc` lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem -make -j`nproc` params_libconfig coding rfsimulator +ninja -j`nproc` dlsim ulsim ldpctest polartest smallblocktest nr_pbchsim nr_dlschsim nr_ulschsim nr_dlsim nr_ulsim nr_pucchsim nr_prachsim +ninja -j`nproc` lte-softmodem nr-softmodem nr-cuup oairu lte-uesoftmodem nr-uesoftmodem +ninja -j`nproc` params_libconfig coding rfsimulator ```