离线编译安装ARM版MongoDB5.0.5
在内网的机器上编译安装MongoDB5.0.5,涉及gcc、Python和MongoDB的下载、编译和安装。
因某项目申请了华为鲲鹏云机器,没有外网权限,需要安装ARM版MongoDB,而MongoDB的现有版本中并没有用于CentOS7.8的ARM版本,所以需要重新编译。
整体流程遵循文件:编译和部署Mongodb5.0.5的arm64版本_随心~稳心的博客-CSDN博客
简单罗列过程,过程中碰到的问题及解决过程。
一、MongoDB源码下载
从GitHub相关链接Release r5.0.5 · mongodb/mongo · GitHub进行下载,然后在个人常用的安装包目录解压即可。
tar -zxvf <download-dir>/mongo-r5.0.5.tar.gz -C /opt/package
查看mongo目录下docs/building.md,了解各工具版本等信息
二、安装GCC
1、下载gcc
从http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-9.5.0/gcc-9.5.0.tar.gz下载gcc-9.5.0.tar.gz,解压到个人常用的安装包目录
2、解压
tar -zxvf <download-dir>/gcc-9.5.0-tar.gz -C /opt/package
安装依赖,还好鲲鹏云在常见的依赖包,都已经放在内网上,可以用yum正常安装
3、基础依赖包安装
yum -y install bzip2 wget
4、安装依赖包安装
在有网络的情况下可执行.contrib/download_prerequisities,下载安装依赖
而如果在内网情况下,无法执行,查看该文件代码发现是要下载安装4个文件gmp-6.1.0.tar.bz2、mpfr-3.1.4.tar.bz2、mpc-1.0.3.tar.gz、isl-0.18.tar.bz2,并解压安装在gcc安装包第一层目录下。
于是在可联网机器上,进行下载:
gmp-6.1.0.tar.bz2,下载路径为https://ftp.gnu.org/pub/gnu/gmp/gmp-6.1.0.tar.bz2
mpfr-3.1.4.tar.bz2,下载路径为https://ftp.gnu.org/pub/gnu/mpfr/mpfr-3.1.4.tar.bz2
mpc-1.0.3.tar.gz,下载路径为https://ftp.gnu.org/pub/gnu/mpc/mpc-1.0.3.tar.gz
isl-0.18.tar.bz2,下载路径为http://www.mirrorservice.org/sites/sourceware.org/pub/gcc/infrastructure/isl-0.18.tar.bz2
然后在gcc-9.5.0目录下
tar -xf gmp-6.1.0.tar.bz2
tar -xf mpfr-3.1.4.tar.bz2
tar -xf mpc-1.0.3.tar.gz
tar -xf isl-0.18.tar.bz2
建立软链接
ln -sf gmp-6.1.0 gmp
ln -sf mpfr-3.1.4 mpfr
ln -sf mpc-1.0.3 mpc
ln -sf isl-0.18 isl
5、gcc编译
#创建编译目录
cd ../ && mkdir gcc-build-9.5.0 && cd gcc-build-9.5.0
#配置
../gcc-9.5.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
#用多少核心编译,取决于你的CPU核数
make -j4
#安装
make install
#切换gcc到新版本
update-alternatives --install /usr/bin/gcc gcc /opt/gcc-9.5.0/gcc-9.5.0 100
第一个坑:安装完之后,发现update-alternatives命令无法执行,通过update-alternative的查看命令--list gcc发现为空,也就是预置的gcc无法使用update-alternatives来更新,我最后的做法是把原来的gcc改成gcc.bak,g++改为g++.bak,然后在/usr/bin下新建gcc和g++的link,让它们指向到gcc9.5.0的bin目录下的gcc和g++。
三、升级Python
服务器预装的只有python2.7,而如果通过yum安装python3,会发现版本是3.6.8,所以还是要手工升级到3.7.5(3.7.0以上就可以)
1、下载python3.7.5
wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tar.xz
2、上载到鲲鹏云服务器,并解压及编译
tar xvf Python-3.7.5-tar.xz
mv Python-3.7.5-tar.xz /usr/local/python3.7
cd /usr/local/python3.7
./configure --prefix=/usr/loca/python3.7
make && make install
3、修改python3的软链接(可选)
如果原来装过3.6.8,那么还需要手工将python3和pip3的软链接修改到3.7.5的bin目录下
4、修改python的软链接(可选)
如果要将/usr/bin/下的python和pip也修改指向到3.7.5,好处是可以用python命令,但就会发生yum不能用的告警,因为yum用python2.7的,所以需要修改其配置文件
将/usr/bin/yum,/usr/libexec/urlgrabber-ext-down、/usr/bin/yum-config-manager的第一行的!/usr/bin/python改为!/usr/bin/python2.7
四、编译前安装Python依赖模块
1、安装python3-devel
yum install python3-devel
2、pip的模块安装
有网络环境下,很容易弄
pip3 install scons
python3 -m pip install -r /opt/package/mongo-r5.0.5/etc/pip/compile-requirements.txt
但在内网情况下,这个部分花了将近一天的时间。
要安装的pip模块包括scons和compile-requirements.txt中说明的依赖库,而后者又指向另外三个文件./mongo-r5.0.5/etc/pip/components/platform.req、core.req和compile.req,最终列表如下:
scons、pypiwin32=223、pywin32=225、psutil、pymongo>=3.9、PyYAML>=3.0.0、requests>=2.0.0、Cheetah3、regex、requirement_parse、setuptools。
当然在安装这些库时,还会产生一些其他的依赖库,如urllib3、idna、charset_normalizer、certifi、types_setuptools、dnspython等。
(1)最先搞定的是可以通过pip3 download <package-name>的方式,在有网络的相同芯片架构、相同操作系统的环境下进行安装包下载,下载下来直接是whl文件,上载到内网服务器上,使用pip3 install <name of whl>就可以安装,如scons、requests、setuptools等70%以上的依赖库。
(2)剩下的通过pip3 download下载的是tar.gz,如Cheetah3、psutil、pymongo、PyYAML等,接下来可以通过pip3 wheel <package-name.tar.gz>进行编译,生成whl安装包。
少部分的依赖库可以搞定,如psutil,但其他的如Cheetah3、PyYAML、pymongo等仍然报错,如pip3 install pymongo-4.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
居然还提示不支持的包。
又弄了几个小时,最终还是在百度上找到了答案,这里面就是根据文件名中的字段去判断,如aarch_64,如manylinux24等等,所以,要跳过这个检查,只要修改为none-any就可以,表示对操作系统和芯片架构没有要求,如将上面这个文件改为pymongo-4.3.2-cp37-none-any.whl,再使用pip3 install pymongo-4.3.2-cp37-none-any.whl就成功了!
注:有例外的就是pywin32,在centos下找不到,估计可能是windows专用,后续编译时果然没有问题,
五、MongoDB编译
编译也失败了两三次,第一次使用4核8G的机器,还跑了不少应用,结果告诉我虚拟内存耗尽,无法分配内存;第二次在根目录所在卷进行编译,结果把剩余空间用完,提示硬盘空间不足;第三次在咖啡厅编译,结果时间太长等不及,只能中断编译进程,结果发现回到办公室后,没有安装缓存,仍然是从头开始。
在mongodb目录下,编译命令为:
python3 buildscripts/scons.py DESTDIR=/data/software/mongodb install-core MONGO_VERSION=5.0.5 --disable-warnings-as-errors
注意最后一个参数,如果不加,则会将编译中的告警当做错误,中途就会停止编译。
编译时间很长,在4C8G的机器上,要5、6个小时。
六、MongoDB配置和运行
1、环境变量配置
vi /etc/profile # added lines in the end export MONGODB_HOME=/data/software/mongodb export PATH=$PATH:$MONGODB_HOME/bin # take effect now source /etc/profile
2、数据库配置
# create db directory mkdir -p /mnt/data/mongodb/db # create log directory mkdir -p /mnt/data/mongodb/logs # create conf file vi /data/software/mongodb/bin/mongodb.conf # below is the conf file dbpath = /mnt/data/mongodb/db logpath = /mnt/data/mongodb/logs/mongod.log journal = false auth = true bind_ip = 0.0.0.0 port = 27017 logappend = true fork = true
3、瘦身、启动及最后一个坑处理
# strip the exec files in bin, can reduce from GB to MB cd /data/software/mongodb/bin strip mongod strip mongo strip mongos # start the db mongod -f /data/software/mongodb/bin/mongodb.conf
第一次启动会提示libstdc++.so.6文件版本太低
通过find / -name libstdc++.so.6*,发现libstdc++.so.6.0.28的位置
cp /usr/lib64/libstdc++.so.6.0.28 /lib64
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
ln -s /lib64/libstdc++.so.6.0.28 /lib64/libstdc++.so.6
再运行就可以正常启动了。
可以在本机使用mongo直接链接数据库进行相关操作,也可以使用Navicat等数据库工具了。
更多推荐
所有评论(0)