Skip to main content

Install LibreTranslate on a VM

··429 words·3 mins

I usually run the mastodon instance on a VM with two cores and 4GB of RAM. That is plenty of power for the simple tasks a single-user instance has to do.

Preface / preparations #

But for the installation of LibreTranslate I enhanced (after powering off the VM) the cores to 4 and the RAM to 8GB.

While installing the needed python packages I ran out of space on the /tmp filesystem (which was just a tmpfs filesystem). We could increase the RAM to 10GB or 12GB but for me it worked by only using 8GB of RAM for this VM.

Modify /etc/fstab and increase /tmp #

To increase /tmp we log into the VM and modify the file /etc/fstab.

tmpfs /tmp tmpfs size=6G,nr_inodes=10k 0 0)

Install some needed packages #

I had much prepared/installed already, but cmake was still missing.

$ paru -S cmake

The installation of LibreTranslate #

Create a dedicated user for the service #

$ sudo useradd --create-home --home-dir /var/lib/libretranslate libretranslate

Change to the new user:

$ sudo su - libretranslate
$ python -m venv venv
$ source venv/bin/activate
$ pip install --prefer-binary libretranslate
$ argospm update

Install every language possible #

$ for lang in $(argospm search | cut -d: -f1 ); do echo argospm install $lang;done

Remove echo from that command to actually install them (the command above prints the commands needed to install the languages; you can only install one at a time).

If you only want to translate to English, use this instead #

$ for lang in $(argospm search | grep -E "^translate-.._en.*"| awk '{ print $2 }' | xargs); do echo argospm install translate-${lang}_en; done

Also remove echo to actually install these translation packages.

Let mastodon know of the LibreTranslate installation #

$ cd /var/lib/mastodon

Add to .env.production:

ALLOWED_PRIVATE_ADDRESSES=127.0.0.1
LIBRE_TRANSLATE_ENDPOINT=http://127.0.0.1:5000

Create a systemd unit file to automatically start LibreTranslate #

File: /etc/systemd/system/libretranslate.service

[Unit]
Description=LibreTranslate
After=network.target

[Service]
User=libretranslate
Group=libretranslate
WorkingDirectory=/var/lib/libretranslate/
ExecStart=/var/lib/libretranslate/venv/bin/python /var/lib/libretranslate/venv/bin/libretranslate --host 0.0.0.0 --port 5000 --suggestions --req-limit 20 --update-models
Restart=always
#CPUQuota=50%

[Install]
WantedBy=multi-user.target

Start LibreTranslate #

First, tell systemd of the new unit file:

$ sudo systemctl daemon-reload

Enable and start the service:

$ sudo systemctl enable --now libretranslate.service

Restart Mastodon to let it know of the translation service #

$ sudo systemctl restart mastodon-web.service

Remove the extra space from /tmp #

Comment or remove the line in /etc/fstab

#tmpfs /tmp tmpfs size=6G,nr_inodes=10k 0 0)

Reduce the VMs specs back to normal #

I set the VM back to two cores and 4GB of RAM. Poweroff the VM with sudo poweroff or sudo systemctl poweroff and change the values back to normal. Start the VM again and all services should come online.