Whatever you Ubuntu version is, one day you might meet some issues with mlocate/updatedb.mlocate.
  • huge I/O on disk
  • OOMkiller will kill it
  • and so on

I found a recent mlocate version with instruction to build it. So let give it a try! We will build it first

It is listed in my daily crontab (file = /etc/cron.daily/mlocate )

I found a PKGBUILD from https://gitea.artixlinux.org/artix/packages/src/branch/master/mlocate/trunk/PKGBUILD and wanted to give it a try

Translating its content to my own needs, I did
export srcdir=$PWD/mlocate-build

# Create some folder to download sources
mkdir mlocate-build && cd $srcdir

git clone https://pagure.io/mlocate.git && cd mlocate/ && git checkout c98bf6595703456558a6f9c163c746cdaa9e591f

cd $srcdir
git clone git://git.savannah.gnu.org/gnulib.git && cd gnulib/ && git checkout 5861339993f3014cfad1b94fc7fe366fc2573598

cd $srcdir/mlocate
#sed -i '/^groupname /s/mlocate/locate/' Makefile.am # I will not run this one because mlocate group exists on my computer. No need to replace it with a new group
../gnulib/gnulib-tool --import
autoreconf --install
# Configure
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var/lib
# Build

# Time to prepare package
make DESTDIR=/tmp/mlocate-build install

# 111 = Group ID for mlocate group on my PC
chgrp 111 /tmp/mlocate-build/usr/bin/locate
chmod 2755 /tmp/mlocate-build/usr/bin/locate
# Create a symbolic link
ln -s /tmp/mlocate-build/usr/bin/updatedb /tmp/mlocate-build/usr/bin/updatedb.mlocate

Test it before installing it

  1. As a simple user -- from a terminal session -- , write some random file
    echo "hello world" > /TMP_MinGW32/sources/Nabilla.txt
  2. As root -- from a terminal session --, launch it and monitoring it. Below command is taken from /etc/cron.daily/mlocate on my computer
    flock --nonblock /run/mlocate.daily.lock /usr/bin/ionice -c3 /tmp/mlocate-build/usr/bin/updatedb
    Important: Stay in front of your computer, open your monitoring tool to check: CPU, I/O, RAM and so on. This is important to check that consumption is low!!! On my computer it took 3 minutes to refresh database /var/lib/mlocate/mlocate.db
  3. Query locate to see if it can find your new file
    /tmp/mlocate-build/usr/bin/locate Nabilla
    . It returned my new random file as expected. (/TMP_MinGW32/sources/Nabilla.txt)
Let's destroy the symbolic link now
rm -vf /tmp/mlocate-build/usr/bin/updatedb.mlocate

Install it!

  • First we need to destroy the symbolic link /usr/bin/updatedb -> /etc/alternatives/updatedb. We just need to delete the symbolic link
    rm -vf  /usr/bin/updatedb
  • Time to copy our binaries
    cp -avf  /tmp/mlocate-build/usr/* /usr/
  • Let's create the new link
    ln -s /usr/bin/updatedb /usr/bin/updatedb.mlocate
  • We just need to add some rights
    chgrp 111 /usr/bin/locate 
    chmod 2755 /usr/bin/locate