概述
MongoDB 在工作中使用已经很平凡,官方提供了方便的MongoDB镜像使用。然而本文却想通过源码编译安装MongoDB,下面详细介绍安装编译社区版MongoDB的过程。
启动新的Alpine容器
运行命令启动新的Alpine容器 alpine-mongodb-src
docker run --name alpine-mongodb-src -it /bin/sh
查看Alpine版本及内核信息
# 查看Alpine版本
cat /etc/alpine-release
# 查看Linux 内核
uname -a
更新Alpine包管理器
因为后边要安装很多软件,更新一下包管理器
# Update repository indexes
apk update
# 安装 网络包 curl 和 wget,方便后期使用
apk add curl wget
获取MomngoDB源码
- MongoDB 下载地址
https://www.mongodb.com/try/download
- 获取源码链接
点击MongoDB Community Server展开社区版,右边version 选择最新的,Platform选择 Source[tgz]包。最后点击 Copy link 复制下载连接https://fastdl.mongodb.org/src/mongodb-src-r5.0.6.tar.gz
- 获取连接
使用wget工具下载源码
wget https://fastdl.mongodb.org/src/mongodb-src-r5.0.6.tar.gz
- 解压源码
tar -xzvf tar -xzvf mongodb-src-r5.0.6.tar.gz
- 查看安装说明
首先查看README,内容如下:
MongoDB README
Welcome to MongoDB!
COMPONENTS
mongod - The database server.
mongos - Sharding router.
mongo - The database shell (uses interactive javascript).
UTILITIES
install_compass - Installs MongoDB Compass for your platform.
BUILDING
See docs/building.md.
RUNNING
For command line options invoke:
$ ./mongod --help
To run a single server database:
$ sudo mkdir -p /data/db
$ ./mongod
$
$ # The mongo javascript shell connects to localhost and test database by default:
$ ./mongo
> help
INSTALLING COMPASS
You can install compass using the install_compass script packaged with MongoDB:
$ ./install_compass
This will download the appropriate MongoDB Compass package for your platform
and install it.
DRIVERS
Client drivers for most programming languages are available at
https://docs.mongodb.com/manual/applications/drivers/. Use the shell
("mongo") for administrative tasks.
BUG REPORTS
See https://github.com/mongodb/mongo/wiki/Submit-Bug-Reports.
PACKAGING
Packages are created dynamically by the package.py script located in the
buildscripts directory. This will generate RPM and Debian packages.
DOCUMENTATION
https://docs.mongodb.com/manual/
CLOUD HOSTED MONGODB
https://www.mongodb.com/cloud/atlas
FORUMS
https://community.mongodb.com
A forum for technical questions about using MongoDB.
https://community.mongodb.com/c/server-dev
A forum for technical questions about building and developing MongoDB.
LEARN MONGODB
https://university.mongodb.com/
LICENSE
MongoDB is free and the source is available. Versions released prior to
October 16, 2018 are published under the AGPL. All versions released after
October 16, 2018, including patch fixes for prior versions, are published
under the Server Side Public License (SSPL) v1. See individual files for
details.
从中可以看到Build文档是docs/building.md
,这个文档内容比较多,此处不贴出,需要的可以去下载资源,解压后查看,其强调最好使用已经官方已经提供好的服务,编译比较困难。
building.md
非常重要,它是编译的主要依赖
原文:
Please note that prebuilt binaries are available on mongodb.org and may be the easiest way to get started, rather than building from source. 。
截图:
安装C编译环境
此处用到的C/C++,需要安装的C编译环境有 GCC
、G++
、Clang
、make
、cmake
等
apk add gcc g++ clang make cmake
安装Python环境
编译过程是使用Python写的,根据docs/building.md
文档说明,需要安装python及pip等,可依次安装
# 安装 py3
apk add python3
# 安装 pip
apk add py3-pip
安装编译相关的库文件
编译期间需要一些开发环境下使用的库文件,根据文档及经验,主要安装了以下文件
apk add musl-dev
apk add openssl-dev nss-dev gnutls-dev
apk add python3-dev
# 安装xz ,因为编译过程需要该包中的lzma工具
apk add xz xz-dev
# 安装 curl-dev ,因为编译时用到该开发包
apk add curl-dev
安装Python依赖
进入mongodb-src-r5.0.6
文件夹,运行文档中提供的命令,安装Python依赖
cd /apps/mongodb-src-r5.0.6/
python3 -m pip install -r etc/pip/compile-requirements.txt
编译
编译 mongod
服务
# 只编译 mongod
python3 buildscripts/scons.py DESTDIR=/apps/mongodb install-mongod
结果
经过大量努力,最终编译还是失败了,鉴于自己水平有限,此次尝试暂时搁置,待后期完善。期遇到的问题见 遇到的错误 章节。
总结
- 源码编译确实比较困难,正如官方所述。
- 抛弃Alpine发型版,改用官方支持的Linux发行版编译应该问题不大,待验证。
- 虽然尝试编译失败了,但是经验很珍贵。希望有大神尝试,并给出解决方案
遇到的错误
fatal error: Killed signal terminated program cc1plus compilation terminated.
该问题说明编译环境内存不足,我们是在Docker容器内编译,需要对该容器增加内存即可。Dokcer容器内存限制见文章>https://editor.csdn.net/md?not_checkout=1&articleId=123167831
注意:build.md
中原文提到内存信息,编译mongod 大概需要13GB内存,原文如下:
About 13 GB of free disk space for the core binaries (mongod, mongos, and mongo) and about 600 GB for the install-all target.
error: 'void* memset(void*, int, size_t)' clearing an object of non-trivial type 'class JS::Value'; use assignment or value-initialization instead [-Werror=class-memaccess]
该问题没有二次重现
- error: ‘res_nclose’ was not declared in this scope
该问题未找到解决方案
- fatal error: gnu/libc-version.h: No such file or directory
该问题在安装完 libc
最后
以上就是无奈野狼为你收集整理的Docker官方推荐操作系统镜像Alpine源码安装MongoDB启动新的Alpine容器查看Alpine版本及内核信息更新Alpine包管理器获取MomngoDB源码安装C编译环境安装Python环境安装编译相关的库文件安装Python依赖编译结果总结遇到的错误的全部内容,希望文章能够帮你解决Docker官方推荐操作系统镜像Alpine源码安装MongoDB启动新的Alpine容器查看Alpine版本及内核信息更新Alpine包管理器获取MomngoDB源码安装C编译环境安装Python环境安装编译相关的库文件安装Python依赖编译结果总结遇到的错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复