Installing mongodb over Ubuntu 22.04

I got mongodb 5.0.9 installed on ubuntu 22.05… but boy… it was a hassle.

First you have to remove the libssl1.1 dep from:


mongodb-org-mongos_5.0.9_amd64.deb

mongodb-org-server_5.0.9_amd64.deb

mongodb-org-shell_5.0.9_amd64.deb

My bash script (that’s added below) will open the ‘nano’ editor and offer you to edit the control file specifying the deps. Your are looking for a line like this (starting with “Depends” and containing a reference to “libssl1.1”):


Depends: libc6 (>= 2.29), libcurl4 (>= 7.16.2), libgcc-s1 (>= 4.2), liblzma5 (>= 5.1.1alpha+20110809), libssl1.1 (>= 1.1.1)

Remove the reference to libssl1.1 and save & quit. It should look like this:


Depends: libc6 (>= 2.29), libcurl4 (>= 7.16.2), libgcc-s1 (>= 4.2), liblzma5 (>= 5.1.1alpha+20110809)

The script will automagically repackage the files and generate you a new package with ‘-newpackage.deb’ attached to its name:


mongodb-org-mongos_5.0.9_amd64.deb-newpackage.deb

mongodb-org-server_5.0.9_amd64.deb-newpackage.deb

mongodb-org-shell_5.0.9_amd64.deb-newpackage.deb

Now put them in a folder and install them manually with dpkg:


sudo dpkg -i *.deb

After that run:


sudo apt install --no-install-recommends mongodb-org mongodb-org-database mongodb-org-tools mongodb-mongosh-shared-openssl3

Hint: You don’t need ‘mongodb-mongosh’ from the deps as it’s being replaced by ‘mongodb-mongosh-shared-openssl3’.

Afterwards I couldn’t start the mongod service:


Jun 11 18:14:11 systemd[1]: Started MongoDB Database Server.

Jun 11 18:14:11 systemd[48437]: mongod.service: Failed to determine user credentials: No such process

Jun 11 18:14:11 systemd[48437]: mongod.service: Failed at step USER spawning /usr/bin/mongod: No such process

Jun 11 18:14:11 systemd[1]: mongod.service: Main process exited, code=exited, status=217/USER

Jun 11 18:14:11 systemd[1]: mongod.service: Failed with result 'exit-code'.

Which was because of a missing user (after looking at ‘/etc/systemd/system/mongod.service’), so I added it:


sudo adduser mongodb

Edit, try, fail, repeat:


Jun 11 18:15:53 systemd[1]: Started MongoDB Database Server.

Jun 11 18:15:53 mongod[48504]: /usr/bin/mongod: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

Jun 11 18:15:53 systemd[1]: mongod.service: Main process exited, code=exited, status=127/n/a

Jun 11 18:15:53 systemd[1]: mongod.service: Failed with result 'exit-code'.

Missing libcrypto from ssl 1.1…

I didn’t have the 3.0 on the system, fix that:


sudo apt-get install libssl-dev

Now search for the file:


sudo find / -type f -name libcrypto.so*

link it:


sudo ln -s /usr/lib/x86_64-linux-gnu/libcrypto.so.3 /usr/lib/x86_64-linux-gnu/libcrypto.so.3 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1

And we got the same error for ssl1.1…


Jun 11 18:23:59 mongod[48822]: /usr/bin/mongod: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

Search, link, start…


sudo find / -type f -name libssl.so.*


sudo ln -s /usr/lib/x86_64-linux-gnu/libssl.so.3 /usr/lib/x86_64-linux-gnu/libssl.so.1.1

And error (obviously - it’s 3.0, not 1.1…):


Jun 11 18:26:29 systemd[1]: Started MongoDB Database Server.

Jun 11 18:26:29 mongod[48845]: /usr/bin/mongod: /lib/x86_64-linux-gnu/libcrypto.so.1.1: version `OPENSSL_1_1_0' not found (required by /usr/bin/mongod)

Jun 11 18:26:29 mongod[48845]: /usr/bin/mongod: /lib/x86_64-linux-gnu/libssl.so.1.1: version `OPENSSL_1_1_0' not found (required by /usr/bin/mongod)

Jun 11 18:26:29 mongod[48845]: /usr/bin/mongod: /lib/x86_64-linux-gnu/libssl.so.1.1: version `OPENSSL_1_1_1' not found (required by /usr/bin/mongod)

But didn’t I see a snap with 1.1 libs on the system when running the find commands? - Sure did!


$ sudo find / -type f -name libcrypto.so*

/usr/lib/x86_64-linux-gnu/libcrypto.so.3

/snap/core20/1518/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1


$ sudo find / -type f -name libssl.so.*

/usr/lib/x86_64-linux-gnu/libssl.so.3

/snap/core20/1518/usr/lib/x86_64-linux-gnu/libssl.so.1.1

Let’s remove the previous link and they those…


$ sudo rm /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /usr/lib/x86_64-linux-gnu/libssl.so.1.1

$ sudo ln -s /snap/core20/1518/usr/lib/x86_64-linux-gnu/libssl.so.1.1 /usr/lib/x86_64-linux-gnu/libssl.so.1.1

$ sudo ln -s /snap/core20/1518/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1

SUCCESS:


$ sudo service mongod start && sudo service mongod status

● mongod.service - MongoDB Database Server

Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled)

Active: active (running) since Sat 2022-06-11 18:32:20 CEST; 49ms ago

Docs: https://docs.mongodb.org/manual

Main PID: 48894 (mongod)

Memory: 760.0K

CPU: 16ms

CGroup: /system.slice/mongod.service

└─48894 /usr/bin/mongod --config /etc/mongod.conf

Jun 11 18:32:20 systemd[1]: Started MongoDB Database Server.

Script:

#!/bin/bash
# name: debedit.sh
# author: showp1984
# description: unpacks, edits control file and repacks deb-files with gz or xz compression
# prerequisites: xz-utils && nano
# No guarantees. Use at your own peril.

unset DECOMPXZ
unset DECOMPGZ
FILES="{post,pre}{inst,rm} conffiles md5sums control"

echo "Uncompressing deb..."
ar x $*

FILEXZ="control.tar.xz"
if [ -f "$FILEXZ" ]; then
    DECOMPXZ=1
    echo "Found: $FILEXZ | using XZ decomp..."
    tar --xz -xvf $FILEXZ
fi

FILEGZ="control.tar.gz"
if [ -f "$FILEGZ" ]; then
    DECOMPGZ=1
    echo "$FILEGZ exists."
    tar xzf $FILEGZ
fi

nano control

if [[ "$DECOMPXZ" == 1 ]]; then
    echo "Repacking $FILEXZ..."
    tar --ignore-failed-read -cvJf $FILEXZ $FILES

    echo "Repacking deb with xz files..."
    ar rcs "${*}-newpackage.deb" debian-binary $FILEXZ data.tar.xz
fi

if [[ "$DECOMPGZ" == 1 ]]; then
    echo "Repacking $FILEGZ..."
    tar --ignore-failed-read -cvzf $FILEGZ $FILES

    echo "Repacking deb with gz files..."
    ar rcs "${*}-newpackage.deb" debian-binary $FILEGZ data.tar.gz
fi

echo "Cleanup..."
rm -r control md5sums debian-binary control.tar.xz data.tar.xz control.tar.gz data.tar.gz postrm preinst prerm conffiles postinst

echo "Done!"
5 Likes