在 Debian Buster 上安装 MongoDB

Install MongoDB on Debian Buster

如何安装最新的MongoDB 3.4甚至3.6? 他们支持 Ubuntu,但我的服务器是 Debian Buster,我坚持使用 MongoDB 3.2.

我找到了构建脚本的解决方案,说明在这里:

https://github.com/patrikx3/docker-debian-testing-mongodb-stable

描述:

Debian Stretch / Buster / Bullseye / Testing MongoDB 和 MongoDB 工具构建稳定的构建器脚本,它的作用如下:

它基本上是为 Debian 的最新 MongoDB 构建的。

当前版本是 r4.0.x 构建(发布)。

警告 它将删除 ./scripts/build-server.sh 中的所有 mongodb* apt 包并替换 /etc/systemd/system/mongodb-server.service。

它安装所需的 apt 依赖项并生成 SystemD 服务并启用它。

检查构建是否有效(建筑物在下方)。它运行所有测试,所以如果它有效,那么它实际上确实有效。如果有错误,你当然不会部署到你的服务器上。因此,如果构建和测试有效,那么它会按原样放置二进制文件,您确定并完成了。

构建如下build-server.sh

#!/usr/bin/env bash
# based on https://github.com/mongodb/mongo/wiki/Build-Mongodb-From-Source

# the current directory
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# if an error exit right away, don't continue the build
set -e

# some info
echo
#echo "Works like command, use a tag: sudo ./scripts/build-server.sh r4.2.0"
echo "Works like command, use a tag: sudo ./scripts/build-server.sh r4.0.12"
echo

# check if we are root
if [[ $EUID -ne 0 ]]; then
   echo "This script must be ran via root 'sudo' command or using in 'sudo -i'."
   exit 1
fi

# require mongo branch
#if [ -z "" ]; then
#    echo "First argument must be the MONGODB_BRANCH for example 'v4.1'"
#    exit 1
#fi
#MONGODB_BRANCH=""

# require mongo release
#if [ -z "" ]; then
#    echo "The second argument must be the MONGODB_RELEASE for example 'r4.1.0'"
#    exit 1
#fi
#MONGODB_RELEASE=""

# require mongo release
if [ -z "" ]; then
    echo "The first argument must be the MONGODB_RELEASE for example 'r4.0.12'"
    exit 1
fi
MONGODB_RELEASE=""

# delete all mongo other programs, we self compile
apt remove --purge mongo*

# the required packages for debian
apt -y install libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libboost-thread-dev build-essential gcc python scons git glibc-source libssl-dev python-pip libffi-dev python-dev libcurl4-openssl-dev #libcurl-dev
pip install -U pip pyyaml typing


# generate build directory variable
BUILD=$DIR/../build

# delete previous build directory
rm -rf $BUILD/mongo

# generate new build directory
mkdir -p $BUILD

# the mongodb.conf and systemd services files in a directory variable
ROOT_FS=$DIR/../artifacts/root-filesystem

# find out how many cores we have and we use that many
if [ -z "$CORES" ]; then
    CORES=$(grep -c ^processor /proc/cpuinfo)
fi
echo Using $CORES cores

# go to the build directory
pushd $BUILD

    # clone the mongo by branch
    #git clone -b ${MONGODB_BRANCH} https://github.com/mongodb/mongo.git

    # clone the mongo by branch
    git clone https://github.com/mongodb/mongo.git

    # the mongo directory is a variables
    MONGO=$BUILD/mongo

    # go to the mongo directory
    pushd $MONGO

        # checkout the mongo release
        git checkout tags/${MONGODB_RELEASE}

        # hack to old version python pip cryptography from 1.7.2 to use the latest
        sed -i 's#cryptography == 1.7.2#\#cryptography == 1.7.2#g' buildscripts/requirements.txt
        # this is only because 4.0.12 uses 1.7.2 and
        # https://github.com/pyca/cryptography/issues/4193#issuecomment-381236459
        # support minimum latest (2.2)
        pip install cryptography

        # install the python requirements
        #pip install -r etc/pip/dev-requirements.txt
        pip install -r buildscripts/requirements.txt

        # somewhere in the build it says if we install this, it is faster to build
        pip2 install --user regex

        # build everything
        scons all --disable-warnings-as-errors -j $CORES --ssl

        # install the mongo programs all
        scons install --disable-warnings-as-errors -j $CORES --prefix /usr

        # create a copy of the old config
        #TIMESTAMP=$(($(date +%s%N)/1000000))
        #cp /etc/mongodb.conf /etc/mongodb.conf.$TIMESTAMP.save

        # copy the mongodb.conf configured and the systemd service file
        # dangerous!!! removed
        # cp -avr $ROOT_FS/. /

        MONGODB_SERVICE=etc/systemd/system/mongodb-server.service
        cp $ROOT_FS/$MONGODB_SERVICE /$MONGODB_SERVICE
        chown root:root /$MONGODB_SERVICE
        chmod o-rwx /$MONGODB_SERVICE

        # generate mongodb user and group
        useradd mongodb -d /var/lib/mongodb -s /bin/false || true

        # create the required mongodb database directory and add safety
        mkdir -p /var/lib/mongodb
        chmod o-rwx -R /var/lib/mongodb
        chown -R mongodb:mongodb /var/lib/mongodb

        # create the required mongodb log directory and add safety
        mkdir -p /var/log/mongodb
        chmod o-rwx -R /var/log/mongodb
        chown -R mongodb:mongodb /var/log/mongodb

        # create the required run socket directory and add safety
        mkdir -p /run/mongodb
        chmod o-rwx -R /run/mongodb
        chown -R mongodb:mongodb /run/mongodb

        # add safety to the mongodb config file
        chmod o-rwx /etc/mongodb.conf || true
        chown mongodb:mongodb /etc/mongodb.conf || true

        # reload systemd services
        systemctl daemon-reload

        # enable the mongodb-server
        systemctl enable mongodb-server

        # start the mongodb-server
        #service mongodb-server start

    # exit of the mongo directory
    popd

# exit the build directory
popd

# delete current build directory
rm -rf $BUILD/mongo

构建如下build-tools.sh

#!/usr/bin/env bash
# based on https://github.com/mongodb/mongo-tools

# the current directory
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# if an error exit right away, don't continue the build
set -e

# some info
echo
echo "Works like command: sudo ./scripts/build-tools.sh r4.0.12"
echo

# check if we are root
if [[ $EUID -ne 0 ]]; then
   echo "This script must be ran via root 'sudo' command or using in 'sudo -i'."
   exit 1
fi

# require mongo release
if [ -z "" ]; then
    echo "The first argument must be the MONGODB_RELEASE for example 'r4.0.12'"
    exit 1
fi
MONGODB_RELEASE=""

## delete all mongo other programs, we self compile
##apt remove --purge mongo*

## the required packages for debian
##apt -y install gcc python scons git glibc-source libssl-dev python-pip

apt -y install golang libpcap-dev

export GOROOT=$(go env GOROOT)


# generate build directory variable
BUILD=$DIR/../build/src/github.com/mongodb/

# delete previous build directory
rm -rf $BUILD/mongo-tools

# generate new build directory
mkdir -p $BUILD

# find out how many cores we have and we use that many
CORES=$(grep -c ^processor /proc/cpuinfo)

# go to the build directory
pushd $BUILD

    # clone the mongo by branch
    git clone https://github.com/mongodb/mongo-tools

    # the mongo directory is a variables
    MONGO_TOOLS=$BUILD/mongo-tools

    # go to the mongo directory
    pushd $MONGO_TOOLS

        # checkout the mongo release
        git checkout tags/${MONGODB_RELEASE}

        bash ./build.sh
        chown root:adm -R ./bin
        chmod o-rwx -R ./bin
        chmod ug+rx ./bin/*
        cp -r ./bin/. /usr/bin
#        for PROGRAM in bsondump mongodump mongoexport mongofiles mongoimport mongoreplay mongorestore mongostat mongotop
#        do
#            go build -o bin/${PROGRAM} -tags "ssl sasl" ${PROGRAM}/main/${PROGRAM}.go
#        done

    # exit of the mongo directory
    popd

# exit the build directory
popd

# delete current build directory
rm -rf $BUILD/mongo-tools
popd

# delete current build directory
rm -rf $BUILD/mongo-tools

我还不知道这是否是个好主意,但我只是通过添加 sid 存储库并使用 mongodb-server 软件包安装来安装它。对我来说,这会安装 3.4.18 版。

我创建了/etc/apt/sources.list.d/sid.list

deb http://deb.debian.org/debian/ sid main
deb-src http://deb.debian.org/debian/ sid main

然后

apt update
apt install mongodb-server

并通过连接 mongo.

验证其正常工作