编译和安装UCX包

编译和部署UCX开源软件包,主要包括编译并构建出编译Ceph时需要依赖的UCX RPM包。

  1. 进入编译容器,在容器中配置代理等环境变量,不建议配置到bashrc中。

    1
    2
    3
    4
    podman exec -it openeuler2203sp4_build /bin/bash
    export TMOUT=0
    export http_proxy=http://xxx// 按需配置
    export https_proxy=http://xxx // 按需配置
    

  2. 获取UCX开源软件包,获取路径请参见表4

    cd /home
    wget https://github.com/openucx/ucx/releases/download/v1.14.1/ucx-1.14.1-1.el7.src.rpm --no-check-certificate
    wget https://github.com/openucx/ucx/releases/download/v1.14.1/ucx-1.14.1.tar.gz --no-check-certificate

  3. 安装通用组件。

    1
    yum install CUnit-devel boost-random checkpolicy cmake cryptsetup-devel expat-devel fmt-devel fuse-devel gperf java-devel junit keyutils-libs-devel libaio-devel libbabeltrace-devel libblkid-devel libcap-ng-devel libcurl-devel numactl-devel libicu-devel libnl3-devel liboath-devel librabbitmq-devel librdkafka-devel librdmacm-devel libtool libxml2-devel lttng-ust-devel lua-devel luarocks lz4-devel make nasm ncurses-devel ninja-build nss-devel openldap-devel openssl-devel libudev-devel python3-Cython python3-devel python3-prettytable python3-pyyaml python3-setuptools python3-sphinx re2-devel selinux-policy-devel sharutils snappy-devel sqlite-devel sudo thrift-devel valgrind-devel xfsprogs-devel xmlstarlet doxygen meson python3-pyelftools -y
    

  4. 定义RPM包编译路径。

    1. 打开“/root/.rpmmacros”文件。
      1
      vi /root/.rpmmacros
      
    2. “i”进入编辑模式,将%_topdir路径设置为编译RPM包的路径(本文档中以新建路径“/root/rpmbuild”为例),并将其他行的内容全部注释掉(首次定义RPM包编译路径时,该文件不存在,内容为空,直接新增以下内容保存即可)。
      1
      %_topdir /root/rpmbuild
      
    3. “Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
    4. 创建rpmbuild下的构建目录。
      1
      rpmdev-setuptree
      

  5. 下载安装UCX包,并将其上传至服务器。下载地址见表4
  6. 安装UCX软件包。

    1
    rpm -ivh ucx-1.14.1-1.el7.src.rpm
    

  7. 为了解决UCX在容器中部署存在的报错问题和提升UCX性能,需要修改几行代码。参考下方的代码完成修改。

    1. 切换到“/root/rpmbuild/SOURCES/”路径下。
      1
      cd /root/rpmbuild/SOURCES/
      
    2. 解压缩ucx-1.14.1.tar.gz文件。
      1
      tar -zxvf ucx-1.14.1.tar.gz
      
    3. 打开“ucx-1.14.1/src/ucs/sys/sys.c”文件,将光标定位到该文件的第1560行。
      1
      vim ucx-1.14.1/src/ucs/sys/sys.c +1560
      
    4. “i”进入编辑模式。在1560行新增如下内容。
      1
      pid = getpid();
      

    5. “Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
    6. 打开“ucx-1.14.1/src/ucp/core/ucp_context.c”文件,并将光标定位到2156行。
      1
      vim ucx-1.14.1/src/ucp/core/ucp_context.c +2156
      
    7. “i”进入编辑模式,在2156行新增“#if 0”,在函数最后新增“#endif”。

    8. “Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
    9. 打开“ucx-1.14.1/src/ucs/config/parser.c”文件,并将光标定位到1989行。
      1
      vim ucx-1.14.1/src/ucs/config/parser.c +1989
      
    10. “i”进入编辑模式,在1989行新增“#if 0”,在打印后面新增“#endif”。

    11. “Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
    12. 打开“ucx-1.14.1/src/uct/ib/base/ib_iface.c”文件,并将光标定位到735行。
      1
      vim ucx-1.14.1/src/uct/ib/base/ib_iface.c +735
      
    13. “i”进入编辑模式,注释735行,并添加一行以下代码。
      ah_attr->grh.flow_label = 0;

    14. “Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
    15. 对该文件进行打包。
      1
      2
      rm -rf ucx-1.14.1.tar.gz
      tar zcvf ucx-1.14.1.tar.gz ucx-1.14.1
      

  8. 在RPM编译路径下,编译并构建ucx.spec文件,生成RPM包。

    1
    2
    cd /root/rpmbuild/SPECS
    rpmbuild -bb ucx.spec
    

    编译完成后在“/root/rpmbuild/RPMS/aarch64”目录会生成如下图所示的8个RPM包。

  9. 把编译生成后的RPM包拷贝到“/home/local_rpm/”目录下,然后进行安装。

    1
    2
    3
    mkdir -p /home/local_rpm/
    cp /root/rpmbuild/RPMS/aarch64/ucx* /home/local_rpm/
    cd /home/local_rpm/
    
    1
    2
    3
    4
    5
    6
    7
    8
    rpm -ivh ucx-1.14.1-1.aarch64.rpm
    rpm -ivh ucx-cma-1.14.1-1.aarch64.rpm
    rpm -ivh ucx-debuginfo-1.14.1-1.aarch64.rpm
    rpm -ivh ucx-debugsource-1.14.1-1.aarch64.rpm
    rpm -ivh ucx-devel-1.14.1-1.aarch64.rpm
    rpm -ivh ucx-ib-1.14.1-1.aarch64.rpm
    rpm -ivh ucx-rdmacm-1.14.1-1.aarch64.rpm
    rpm -ivh ucx-static-1.14.1-1.aarch64.rpm