Build from source code¶
This document guides you though the steps how to build Percona Server for MongoDB from source code.
Build options¶
Manual build¶
To build Percona Server for MongoDB manually, you need the following:
- A modern C++ compiler capable of compiling C++20. You may use GCC 11.3 or newer
- Amazon AWS Software Development Kit for C++ library
- Python 3.7.x and Pip modules.
- The set of dependencies for your operating system. The following table lists dependencies for Ubuntu 22.04 and Red Hat Enterprise 9 and compatible derivatives:
| Linux Distribution | Dependencies |
|---|---|
| Debian/Ubuntu | gcc g++ cmake curl libssl-dev libldap2-dev libkrb5-dev libcurl4-openssl-dev libsasl2-dev liblz4-dev libbz2-dev libsnappy-dev zlib1g-dev libzlcore-dev liblzma-dev e2fslibs-dev |
| RedHat Enterprise Linux/CentOS /Oracle Linux /Rocky Linux | gcc gcc-c++ cmake curl openssl-devel openldap-devel krb5-devel libcurl-devel cyrus-sasl-devel bzip2-devel zlib-devel lz4-devel xz-devel e2fsprogs-devel |
- About 13 GB of disk space for the core binaries (
mongod,mongos, andmongo) and about 600 GB for theinstall-alltarget.
Build steps¶
Install Python and Python modules¶
-
Make sure the
python3,python3-dev,python3-pipPython packages are installed on your machine. Otherwise, install them using the package manager of your operating system. -
Clone Percona Server for MongoDB repository
git clone https://github.com/percona/percona-server-mongodb.git -
Switch to the Percona Server for MongoDB branch that you are building and install Python3 modules
cd percona-server-mongodb && git checkout v7.0 python3 -m pip install --user -r etc/pip/dev-requirements.txt -
Define Percona Server for MongoDB version (7.0.4 for the time of writing this document)
echo '{"version": "7.0.4"}' > version.json
Install operating system dependencies¶
The following command installs the dependencies for Ubuntu 22.04:
sudo apt install -y gcc g++ cmake curl libssl-dev libldap2-dev libkrb5-dev libcurl4-openssl-dev libsasl2-dev liblz4-dev libbz2-dev libsnappy-dev zlib1g-dev libzlcore-dev liblzma-dev e2fslibs-dev
The following command installs the dependencies for Oracle Linux 9:
sudo yum -y install gcc gcc-c++ cmake curl openssl-devel openldap-devel krb5-devel libcurl-devel cyrus-sasl-devel bzip2-devel zlib-devel lz4-devel xz-devel e2fsprogs-devel
Build AWS Software Development Kit for C++ library¶
-
Clone the AWS Software Development Kit for C++ repository
git clone --recurse-submodules https://github.com/aws/aws-sdk-cpp.git -
Create a directory to store the AWS library
mkdir -p /tmp/lib/aws -
Declare an environment variable
AWS_LIBSfor this directoryexport AWS_LIBS=/tmp/lib/aws -
Percona Server for MongoDB is built with AWS SDK CPP 1.9.379 version. Switch to this version
cd aws-sdk-cpp && git checkout 1.9.379 -
It is recommended to keep build files outside the SDK directory. Create a build directory and navigate to it
mkdir build && cd build -
Generate build files using
cmakecmake .. -DCMAKE_BUILD_TYPE=Release '-DBUILD_ONLY=s3;transfer' -DBUILD_SHARED_LIBS=OFF -DMINIMIZE_SIZE=ON -DCMAKE_INSTALL_PREFIX="${AWS_LIBS}" -
Install the SDK
make install
Build Percona Server for MongoDB¶
-
Change directory to
percona-server-mongodbcd percona-server-mongodb -
Build Percona Server for MongoDB from
buildscripts/scons.pybuildscripts/scons.py --disable-warnings-as-errors --release --ssl --opt=on -j$(nproc --all) --use-sasl-client --wiredtiger --audit --inmemory --hotbackup CPPPATH="${AWS_LIBS}/include" LIBPATH="${AWS_LIBS}/lib ${AWS_LIBS}/lib64" install-mongod install-mongos
This command builds core components of the database. Other available targets for the
scons command are:
install-mongodinstall-mongosinstall-servers(includes mongod and mongos)install-core(includes mongod and mongos)install-devcore(includes mongod, mongos, and jstestshell (formerly mongo shell))install-all
The built binaries are in the percona-server-mongodb directory.
Use the build script¶
To automate the build process, Percona provides the build script. With this script you can either build binary tarballs or DEB/RPM packages to install a regular build of Percona Server for MongoDB from.
Prerequisites¶
To use the build script you need the following:
- Docker up and running on your machine
- About 200GB of disk space
Prepare the build environment¶
- Create the folder where all build actions take place. For the steps below we use the
/tmp/psmdb/testfolder. -
Navigate to the build folder and download the build script. Replace the
<tag>placeholder with the required version of Percona Server for MongoDB:wget https://raw.githubusercontent.com/percona/percona-server-mongodb/psmdb-<tag>/percona-packaging/scripts/psmdb_builder.sh -O psmdb_builder.sh
Build steps¶
Use the following instructions to build tarballs or packages:
Tarballs¶
To build tarballs, the steps are the following:
-
The following command builds tarballs of Percona Server for MongoDB 7.0.4-2 on Oracle Linux 8. Change the Docker image and the values for
--branch,--psm_ver,--psm_releaseflags to build tarballs of a different version and on a different operating system.docker run -ti -u root -v /tmp/psmdb:/tmp/psmdb oraclelinux:8 sh -c ' set -o xtrace cd /tmp/psmdb bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --install_deps=1 bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --repo=https://github.com/percona/percona-server-mongodb.git \ --branch=release-7.0.4-2 --psm_ver=7.0.4 --psm_release=2 --mongo_tools_tag=100.7.0 --get_sources=1 --build_tarball=1 'The command does the following:
- runs Docker daemon as the root user using the Oracle Linux 8 image
- mounts the build directory into the container
- establishes the shell session inside the container
- inside the container, navigates to the build directory and runs the build script to install dependencies
- runs the build script again to build the tarball for the PSMDB version 7.0.4-2
-
Check that tarballs are built:
ls -la /tmp/psmdb/test/tarball/Sample output
total 88292 -rw-r--r--. 1 root root 90398894 Jul 1 10:58 percona-server-mongodb-7.0.4-2.x86_64.glibc2.17.tar.gz
Packages¶
The steps are the following:
-
Build the source tarball. It serves as the base for source packages. It is important to build source tarball using the oldest supported operating system, which is Oracle Linux 8.
docker run -ti -u root -v /tmp/psmdb:/tmp/psmdb oraclelinux:8 sh -c ' set -o xtrace cd /tmp/psmdb bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --install_deps=1 bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --repo=https://github.com/percona/percona-server-mongodb.git --branch=release-67.0.4-2 --psm_ver=7.0.4 --psm_release=2 --mongo_tools_tag=100.7.0 --get_sources=1' -
Build source packages. These packages include the source code and patches and are used to build binary packages.
Note that to build source packages you still have to use the oldest supported operating system: Oracle Linux 8 for RPMs and Ubuntu 20.04 (Focal Fossa) for DEB packages.
docker run -ti -u root -v /tmp/psmdb:/tmp/psmdb ubuntu:bionic sh -c ' set -o xtrace cd /tmp/psmdb bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --install_deps=1 bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --repo=https://github.com/percona/percona-server-mongodb.git \ --branch=release-7.0.4-2 --psm_ver=7.0.4--psm_release=2 --mongo_tools_tag=100.7.0 --build_src_deb=1 'Check that source packages are created
ls -la /tmp/psmdb/test/source_deb/Sample output
rw-r--r--. 1 root root 90398894 Jul 1 11:45 percona-server-mongodb_7.0.4.orig.tar.gzdocker run -ti -u root -v /tmp/psmdb:/tmp/psmdb oraclelinux:8 sh -c ' set -o xtrace cd /tmp/psmdb bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --install_deps=1 bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --repo=https://github.com/percona/percona-server-mongodb.git \ --branch=release-7.0.4-2 --psm_ver=7.0.4--psm_release=2 --mongo_tools_tag=100.7.0 --build_src_rpm=1 'Check that source packages are created
ls -la /tmp/psmdb/test/srpm/rw-r--r--. 1 root root 90398894 Jul 1 11:45 percona-server-mongodb-7.0.4-2.generic.src.rpm -
Build Percona Server for MongoDB packages. Here you can use the operating system of your choice. In the commands below, we use Oracle Linux 9 for RPMs and Ubuntu 22.04 (Jammy Jellyfish) for DEB packages.
docker run -ti -u root -v /tmp/psmdb:/tmp/psmdb ubuntu:jammy sh -c ' set -o xtrace cd /tmp/psmdb bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --install_deps=1 bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --repo=https://github.com/percona/percona-server-mongodb.git \ --branch=release-7.0.4-2 --psm_ver=7.0.4--psm_release=2 --mongo_tools_tag=100.7.0 --build_deb=1 'Check that packages are created
ls -la /tmp/psmdb/test/deb/Sample output
rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-dbg_7.0.4-2.jammy_amd64.deb rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-mongos_7.0.4-2.jammy_amd64.deb rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-server_7.0.4-2.jammy_amd64.deb rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-tools_7.0.4-2.jammy_amd64.deb rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb_7.0.4-2.jammy_amd64.debdocker run -ti -u root -v /tmp/psmdb:/tmp/psmdb oraclelinux:9 sh -c ' set -o xtrace cd /tmp/psmdb bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --install_deps=1 bash -x ./psmdb_builder.sh --builddir=/tmp/psmdb/test --repo=https://github.com/percona/percona-server-mongodb.git \ --branch=release-7.0.4-2 --psm_ver=7.0.4 --psm_release=2 --mongo_tools_tag=100.7.0 --build_rpm=1 'Check that packages are created
ls -la /tmp/psmdb/test/deb/Sample output
rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-7.0.4-2.el9.x86_64.rpm rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-debugsource-7.0.4-2.el9.x86_64.rpm rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-mongos-7.0.4-2.el9.x86_64.rpm rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-mongos-debuginfo-7.0.4-2.el9.x86_64.rpm rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-server-7.0.4-2.el9.x86_64.rpm rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-server-debuginfo-7.0.4-2.el9.x86_64.rpm rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-tools-7.0.4-2.el9.x86_64.rpm rw-r--r--. 1 root root 90398894 Jul 1 13:16 percona-server-mongodb-tools-debuginfo-7.0.4-2.el9.x86_64.rpm