§2023-07-26

the precompiled version of https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2204-7.0.0-rc8.tgz, will have Illegal instruction (core dumped)

Note: In order to compile C-based Python modules, you'll also need the Python and OpenSSL C headers. Run:

Fedora/RHEL - dnf install python3-devel openssl-devel
Ubuntu (20.04 and newer)/Debian (Bullseye and newer) - apt install python-dev-is-python3 libssl-dev
Ubuntu (18.04 and older)/Debian (Buster and older) - apt install python3.7-dev libssl-dev

  1. Requirements
$ sudo apt update && sudo apt -y upgrade
$ sudo apt install -y build-essential libcurl4-openssl-dev liblzma-dev libssl-dev python3-dev git 
  1. Python3
$ python3 --version
Python 3.10.6
$ sudo apt install -y python3.10-venv
$ python3 -m venv ~/PYTHON-3.10.6
$ source ~/PYTHON-3.10.6/bin/activate
$ which pip3
/home/alexlai/PYTHON-3.10.6/bin/pip3
(PYTHON-3.10.6) alexlai@hc4Jammy:~$ pip3 cache purge
WARNING: No matching packages
  1. git clone mongo
$ mkdir -p build && cd $_
$ git clone https://github.com/mongodb/mongo.git && cd mongo
$ git checkout r7.0.0-rc8 -b test
Updating files: 100% (10380/10380), done.
Switched to a new branch 'test'
  1. pip requirements

pip3 cache purge first

$ pip3 install -r etc/pip/compile-requirements.txt
...
Successfully installed Cheetah3-3.2.6.post1 PyYAML-6.0 anyio-3.7.1 boto3-1.28.11 botocore-1.31.11 certifi-2023.7.22 
cffi-1.15.1 charset-normalizer-2.0.12 cryptography-36.0.2 distro-1.8.0 dnspython-2.4.0 exceptiongroup-1.1.2 
gitdb-4.0.10 gitpython-3.1.32 h11-0.14.0 httpcore-0.17.3 idna-3.4 jmespath-1.0.1 mongo-ninja-python-1.11.1.5 
mongo-tooling-metrics-1.0.8 packaging-21.3 psutil-5.8.0 pycparser-2.21 pydantic-1.10.12 pymongo-4.3.3 
pymongo-auth-aws-1.1.0 pyparsing-3.1.0 python-dateutil-2.8.2 regex-2021.11.10 requests-2.26.0 requirements_parser-0.3.1 
s3transfer-0.6.1 setuptools-58.5.3 six-1.16.0 smmap-5.0.0 sniffio-1.3.0 types-PyYAML-6.0.12.11 
types-setuptools-57.4.18 typing-extensions-4.7.1 urllib3-1.26.16

if pip install psutil errors then sudo apt install gcc python3-dev will fix it.

  1. ~/scripts/buildMongo.sh as (chmod a+x buildMongo.sh)
#!/bin/bash

# -j number of CPUS, no plus 2, odroid-n2 -j 6, odroid-hc4 -j4, orangePi5 -j 8, odroid-h2 -j 4
# execute form git clone https://github.com/mongodb/mongo.git && cd mongo
# under python3 eviromental control
# git checkout r7.0.0-rc8 -b test
# time python3 buildscripts/scons.py install-core -j 4 --ssl --linker=gold CFLAGS="-march=armv8-a+crc -mtune=generic" --disable-warnings-as-errors >log 2>&1 &
# time python3 buildscripts/scons.py install-core -j 4 --ssl --linker=gold --disable-warnings-as-errors >log 2>&1 &
#
# real    510m26.910s
# user    1795m21.199s
# sys     97m27.014s
# But Illegal instruction (core dumped)
#
time python3 buildscripts/scons.py install-core -j 4 --ssl --linker=gold  CXXFLAGS="-march=x86-64 -mtune=generic -O2" --disable-warnings-as-errors >log 2>&1 &
#
#
#   install-mongod
#   install-mongos
#   install-core (includes only mongod and mongos)
#   install-servers (includes all server components)
#   install-devcore (includes mongod, mongos, and jstestshell (formerly mongo shell))
#   install-all (includes a complete end-user distribution and tests)
#    install-all-meta (absolutely everything that can be built and installed)
#
  1. make it
(PYTHON-3.10.6) alexlai@hc4Jammy:~/build/mongo$ ~/scripts/buildMongo.sh
...
g++ @/tmp/tmpvelkdbjc.lnk
Install file: "build/opt/mongo/s/mongos" as "build/install/bin/mongos"
Install file: "build/opt/mongo/db/mongod" as "build/install/bin/mongod"
scons: done building targets.

real    510m26.910s
user    1795m21.199s
sys     97m27.014s

ps aux ; and look for python3 buildscripts/scons.py ... and write down the pid i.e. 1332 then tail -f log to see the progress


¶ Result

alexlai@h2Jammy:~/build/mongo/build/install/bin$ ls -l
total 6743580
-rwxrwxr-x 2 alexlai alexlai 441948574426 21:58 mongod
-rwxrwxr-x 2 alexlai alexlai 248592991226 21:53 mongos
-rwxrw-r-- 2 alexlai alexlai       178226 13:29 resmoke.py
alexlai@h2Jammy:~/build/mongo/build/install/bin$ ./mongod --version
Illegal instruction (core dumped)

real    486m39.742s
user    1757m30.166s
sys     91m49.097s

alexlai@h2Jammy:~/build/mongo/build/install/bin$ ls
mongod  mongod.illegal  mongos  mongos.illegal  resmoke.py

$ ./mongod --version
db version v7.0.0-rc8
Build Info: {
    "version": "7.0.0-rc8",
    "gitVersion": "27da922959c12df48ae2ecf8aad0f37f42f71451",
    "openSSLVersion": "OpenSSL 3.0.2 15 Mar 2022",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}
alexlai@h2Jammy:~/build/mongo/build/install/bin$ ./mongos --version
mongos version v7.0.0-rc8
Build Info: {
    "version": "7.0.0-rc8",
    "gitVersion": "27da922959c12df48ae2ecf8aad0f37f42f71451",
    "openSSLVersion": "OpenSSL 3.0.2 15 Mar 2022",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}