当前位置: 首页>后端>正文

华为蓝区离线环境部署cmake

项目需要在菊厂提供的蓝区环境中进行一些汇编代码的编译
蓝区环境,没网,没yum没wget,只能上传安装包离线安装,确实是非常令人blue的环境了
思路参考:https://segmentfault.com/a/1190000040003049

生命短暂版

目标:通过rpm安装gcc、g++、make,最后源码安装cmake

  • 确认蓝区操作系统版本为EulerOS release 2.0 (SP10)

# cat /etc/*release
EulerOS release 2.0 (SP10)
NAME="EulerOS"
VERSION="2.0 (SP10)"
ID="euleros"
VERSION_ID="2.0"
PRETTY_NAME="EulerOS 2.0 (SP10)"
ANSI_COLOR="0;31"
EulerOS release 2.0 (SP10)

  • 从菊厂镜像站https://mirrors.huaweicloud.com/euler/2.10/os/aarch64/updates/上下载相应的包进行安装
    从gcc-c++开始:

    1. 搜索找到最新版本的rpm包(方便升级安装)
    2. 用能联网的电脑下载,传到蓝区服务器
    3. rpm -ivh xxx.rpm尝试安装,如果安装失败,会打印缺失的依赖
    4. 对每个缺失的依赖进行以上步骤,直到所有依赖安装成功后,完成对当前rpm包的安装
    • note 1:通过创建文件夹的方式梳理依赖关系,用类似深搜的方式依次解决依赖问题,省脑子
    • note 2:如果环境上有旧版本,改用rpm -Uvh xxx.rpm升级安装
    • note 3:部分依赖包之间存在循环依赖,此时用rpm -ivh xxx.rpm --nodeps安装
  • 检查是否安装成功

# gcc -v
# g++ -v

  • 用同样的思路完成make的安装

  • 源码安装cmake,bootstrap遇到openssl的报错一般是因为缺open-dev,还是去镜像站里找相关rpm安装

# wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz --no-check-certificate
# tar -zxvf cmake-3.5.2.tar.gz
# cd cmake-3.5.2
# ./bootstrap --prefix=/usr
# make
# sudo make install

心路历程版

  • 确认操作系统版本

# cat /etc/*release
EulerOS release 2.0 (SP10)

  • https://pkgs.org/ 查找gcc-c++
    并没有EulerOS的版本,尝试centos7版本
    在自家电脑上下载Download中的Binary Package(.rpm),上传至蓝区服务器

  • 运行安装命令找出缺失依赖

# rpm -ivh gcc-c++-4.8.5-44.el7.aarch64.rpm
warning: gcc-c++-4.8.5-44.el7.aarch64.rpm: Header V3 RSA/SHA256 Signature, key ID 305d49d6: NOKEY
error: Failed dependencies:
gcc = 4.8.5-44.el7 is needed by gcc-c++-4.8.5-44.el7.aarch64
libmpc.so.3()(64bit) is needed by gcc-c++-4.8.5-44.el7.aarch64
libmpfr.so.4()(64bit) is needed by gcc-c++-4.8.5-44.el7.aarch64
libstdc++ = 4.8.5-44.el7 is needed by gcc-c++-4.8.5-44.el7.aarch64
libstdc++-devel = 4.8.5-44.el7 is needed by gcc-c++-4.8.5-44.el7.aarch64

  • 根据缺失的依赖,回到https://pkgs.org/gcc-c++查找页面,在Requirements中迭代完成各个依赖的下载

    • 可以找齐全部依赖以后把安装包放在一个路径里,强制全部安装: rpm -ivh *.rpm --nodeps --force
    • 选择求稳,依次安装
  • 装到glibc-common时,发现系统上已经有glibc-2.28,和2.17有冲突
    现在有两个选择:

    1. 认定gcc-c++版本,卸载蓝区环境全部装所需依赖
    2. 搜一下glibc-2.28对应的gcc-c++版本,尝试在蓝区环境基础上完成安装
  • 先尝试以蓝区环境为基础完成安装,成功的话步骤会少一些

    • 安装 gcc-c++-8.5.0-21.el8.aarch64.rpm,主要处理gcc = 8.5.0-21.el8、libstdc++ = 8.5.0-21.el8、libstdc++-devel = 8.5.0-21.el8这三个依赖
      • 安装gcc-8.5.0-21.el8.aarch64.rpm时,主要处理glibc-devel >= 2.2.90-12和libgomp = 8.5.0-21.el8这两个依赖,因为蓝区环境里面已经安装了有类似的库
        1. rpm -Uvh libgomp-8.5.0-21.el8.aarch64.rpm 升级安装gomp,成功
        2. rpm -ivh glibc-devel-2.28-236.el8.7.aarch64.rpm 提示缺失glibc = 2.28-236.el8.7、glibc-headers、glibc-headers = 2.28-236.el8.7、libxcrypt-devel(aarch-64) >= 4.0.0,这里遇到glibc的版本冲突了,搜索的时候发现了一个镜像站https://mirrors.huaweicloud.com/euler/2.10/os/aarch64/updates/ 感觉能救命了
  • 用这个镜像站,从头重来> <
    看到蓝区环境里的libgcc版本是h6,然而镜像站里只有458,
    选用h8,遇到依赖版本冲突的,因为h8是比较新的版本,因此都可以通过rpm -Uvh升级安装
    glibc、glibc-common、glibc-langpacks互相依赖,要用--nodeps安装,其他互相依赖的库也类似处理

  • 检查是否安装成功

# gcc -v
# g++ -v

  • 用同样的思路完成make的安装

  • 源码安装cmake

# wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz --no-check-certificate
# tar -zxvf cmake-3.5.2.tar.gz
# cd cmake-3.5.2
# ./bootstrap --prefix=/usr
# make
# sudo make install

插曲:./bootstrap --prefix=/usr 这一步提示 Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY OPENSSL_INCLUDE_DIR)
果然没那么顺利,检查一下openssl:

# openssl version
OpenSSL 1.1.1f 31 Mar 2020
# rpm -qa|grep openssl
openssl-pkcs11-0.4.10-1.eulerosv2r10.aarch64
openssl-libs-1.1.1f-8.h36.eulerosv2r10.aarch64
openssl-1.1.1f-8.h36.eulerosv2r10.aarch64

所以环境中是安装有openssl的,只是缺少了对应的openssl-dev,保险起见,还是在镜像站上搜索openssl最新版本,对openssl、openssl-devel、openssl-libs进行统一的升级安装(又是一波雪崩式依赖库)

qnmd搞定


https://www.xamrdz.com/backend/33g1994418.html

相关文章: