Runtime Management

The runtimes are managed with asdf and are activated in this project via the .tool-versions. If you have not yet installed asdf, then chapter Introduce asdf may be of help to you.

Get started

If you have asdf installed you can install the runtimes of this project by:

$ cd /path/to/searxng
$ asdf install          # will install runtimes listed in .tool-versions

Manage Versions

If you want to perform a test with special runtime versions of nodejs, python or shellcheck, you can patch the .tool-versions:

--- a/.tool-versions
+++ b/.tool-versions
@@ -1,2 +1,2 @@
-python 3.12.0
-shellcheck 0.9.0
+python 3.11.6
+shellcheck 0.8.0

To install use asdf install again. If the runtime tools have changed, any existing (nodejs and python) environments should be cleaned up with a make clean.

$ asdf install
$ make clean test

Introduce asdf

To download asdf and install asdf:

$ git clone ~/.asdf --branch <version>
$ echo '. "$HOME/.asdf/"' >> ~/.bashrc
$ echo '. "$HOME/.asdf/completions/asdf.bash"' >> ~/.bashrc

Start a new shell and try to install plugins:

$ asdf plugin-list-all | grep -E '(golang|python|nodejs|shellcheck).git'

$ asdf plugin add golang
$ asdf plugin add nodejs
$ asdf plugin add python
$ asdf plugin add shellcheck

Each plugin has dependencies, to compile runtimes visit the URLs from above and look out for the dependencies you need to install on your OS, on Debian for the runtimes listed above you will need:

$ sudo apt update
$ sudo apt install \
       dirmngr gpg curl gawk coreutils build-essential libssl-dev zlib1g-dev \
       libbz2-dev libreadline-dev libsqlite3-dev \
       libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

With dependencies installed you can install/compile runtimes:

$ asdf install golang latest
$ asdf install nodejs latest
$ asdf install python latest
$ asdf install shellcheck latest

Python will be compiled and will take a while.

In the repository the version is defined in .tool-versions. Outside the repository, its recommended that the runtime should use the versions of the OS (Fallback to System Version) / if not already done register the system versions global:

$ cd /
$ asdf global golang system
$ asdf global nodejs system
$ asdf global python system
$ asdf global shellcheck system