项目需要在菊厂提供的蓝区环境中进行一些汇编代码的编译
蓝区环境,没网,没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++开始:- 搜索找到最新版本的rpm包(方便升级安装)
- 用能联网的电脑下载,传到蓝区服务器
- rpm -ivh xxx.rpm尝试安装,如果安装失败,会打印缺失的依赖
- 对每个缺失的依赖进行以上步骤,直到所有依赖安装成功后,完成对当前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有冲突
现在有两个选择:- 认定gcc-c++版本,卸载蓝区环境全部装所需依赖
- 搜一下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这两个依赖,因为蓝区环境里面已经安装了有类似的库
- rpm -Uvh libgomp-8.5.0-21.el8.aarch64.rpm 升级安装gomp,成功
- 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/ 感觉能救命了
- 安装gcc-8.5.0-21.el8.aarch64.rpm时,主要处理glibc-devel >= 2.2.90-12和libgomp = 8.5.0-21.el8这两个依赖,因为蓝区环境里面已经安装了有类似的库
- 安装 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这三个依赖
用这个镜像站,从头重来> <
看到蓝区环境里的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搞定