Prosody fails after upgrading Ubuntu 24.04 to 26.04

Short answer

Prosody runs on whatever /usr/bin/lua points to. On a Jitsi server that is Lua 5.2, and Ubuntu 26.04 no longer ships the Lua 5.2 libraries Prosody needs, starting with LuaFileSystem. Installing lua5.4 is not enough, because lua5.2 keeps /usr/bin/lua with a higher priority. Point the lua-interpreter alternative at Lua 5.4, re-enable the Prosody and Jitsi repositories with the 26.04 Prosody suite, upgrade and restart. You do not need luarocks or a compiler.

Symptoms

You upgraded a Jitsi server installed from the Debian packages from Ubuntu 24.04 to 26.04. Meetings no longer connect, and Prosody fails to start:

Text
prosody[1157]: A problem occurred while reading the config file /etc/prosody/prosody.cfg.lua
prosody[1157]: Error: /usr/share/lua/5.2/prosody/core/configmanager.lua:346: Error expanding wildcard pattern in Include "conf.d/*.cfg.lua" - LuaFileSystem not available
systemd[1]: prosody.service: Main process exited, code=exited, status=1/FAILURE

The 5.2 in the path is the clue. Depending on which command you run, the same problem can also show up as:

Text
lua: /usr/share/lua/5.2/prosody/util/startup.lua:343: module 'lfs' not found:
Text
lua: /usr/bin/prosody:49: module 'prosody.loader' not found:
Text
Prosody is no longer compatible with Lua 5.1

The upgrade also commented out the Jitsi and Prosody apt repositories, so apt update no longer offers Jitsi or Prosody updates.

Cause

The prosody and prosodyctl commands start with #!/usr/bin/env lua. They run on whichever Lua /usr/bin/lua points to, and Debian picks that by priority:

Package /usr/bin/lua priority
lua5.2 120
lua5.1 (installed with luarocks) 110
lua5.4 20

Jitsi’s install guide told you to install lua5.2, so on Ubuntu 24.04 your Prosody ran on Lua 5.2. Ubuntu 26.04 still has lua5.2 itself, but the libraries Prosody needs (lua-filesystem, lua-sec, lua-socket, lua-expat) are now built only for Lua 5.1, 5.3 and 5.4. The first one Prosody asks for is LuaFileSystem, so that is the error you see.

Two more things keep the server stuck:

  • Installing lua5.4 does not help on its own. With priority 20 it never wins over lua5.2.
  • Removing lua5.2 is not enough either. Prosody recommends luarocks, which brings lua5.1 with priority 110, and Prosody 13 refuses to run on Lua 5.1.

Jitsi removed the lua5.2 step from the handbook on 2026-10-05 and closed issue #17924 with PR #17928, which drops a Lua module that was missing for Lua 5.4. Neither change switches an existing server to Lua 5.4. You do that by hand.

Fix

Take a snapshot or backup of the server first. All commands run on the Jitsi server.

1. Re-enable the Jitsi and Prosody repositories

do-release-upgrade disables third-party sources. Open both files:

Terminal
ls /etc/apt/sources.list.d/
sudoedit /etc/apt/sources.list.d/jitsi-stable.list
sudoedit /etc/apt/sources.list.d/prosody-debian-packages.list

Use the names you see if they differ, and rename any file the upgrade gave a .disabled ending. In each file, remove the # in front of the deb line. In the Prosody file, also change the release name from noble to resolute. The two lines should end up like this:

Text
deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/
deb [signed-by=/usr/share/keyrings/prosody-debian-packages.key] http://packages.prosody.im/debian resolute main

Keep the signed-by path your file already has. The Jitsi line has no release name, so it needs no other change. A Jitsi maintainer confirmed in the issue that re-enabling it is safe.

2. Switch Prosody to Lua 5.4

Terminal
sudo apt update
sudo apt install lua5.4
sudo update-alternatives --set lua-interpreter /usr/bin/lua5.4

The last command puts the alternative in manual mode, so later package installs cannot move /usr/bin/lua back to 5.1 or 5.2.

3. Upgrade the packages and restart

Terminal
sudo apt full-upgrade
sudo dpkg --configure -a
sudo systemctl restart prosody jicofo jitsi-videobridge2

This replaces the 24.04 Prosody build (13.0.7-1~noble2) with the 26.04 one (13.0.7-1~resolute2) and finishes any Jitsi package the upgrade left half configured.

4. Optional: remove Lua 5.2

Nothing in a current Jitsi install needs it:

Terminal
sudo apt purge lua5.2

Already ran the luarocks steps?

If you followed the forum recipe, modules you built with luarocks sit in /usr/local and override the packaged ones. Check:

Terminal
ls /usr/local/lib/lua/5.4 /usr/local/share/lua/5.4 2>/dev/null

If Prosody runs, you can leave them. If you see odd module errors later, remove them with sudo luarocks remove <name> and rely on the packages from step 3.

Java

Ubuntu 26.04 still has OpenJDK 17, and it adds 21. Current Jicofo and videobridge packages accept either, so the upgrade needs no Java change. Debian 13 dropped OpenJDK 17; there you need Jitsi 2.0.10888 or newer, which runs on Java 21.

Verify

Terminal
readlink -f /usr/bin/lua
sudo prosodyctl about | grep -E 'Lua version|LuaFileSystem'
sudo prosodyctl check config
systemctl is-active prosody jicofo jitsi-videobridge2

The first command prints /usr/bin/lua5.4. prosodyctl about shows Lua 5.4 and a LuaFileSystem version, and each service prints active. check config lists the loaded config files. On a stock Jitsi install it ends with Problems found because of the deprecated cross_domain_bosh option, which is harmless; it may also warn about DNS or certificates. What matters is that no Lua error appears. Then join a meeting at https://meet.example.com from three devices.

If it still fails

  • module 'X' not found: find which package gives Lua 5.4 that module with apt-cache search lua- | grep -i X, then install it.
  • Prosody is no longer compatible with Lua 5.1: /usr/bin/lua moved to 5.1. Run the update-alternatives --set command from step 2 again.
  • Prosody starts but users get “You have been disconnected”: read our disconnect fixes and sudo journalctl -u prosody -u jicofo --since "10 min ago".
  • apt full-upgrade wants to remove jitsi-meet: stop and check that both repositories from step 1 load without errors in sudo apt update.

What we have checked

On 2026-10-06 we ran the steps in Ubuntu 26.04.1 containers:

  • With the 24.04 Prosody build and lua5.2 left over, Prosody failed with module 'lfs' not found. Installing lua5.4 left /usr/bin/lua on 5.2.
  • After update-alternatives --set lua-interpreter /usr/bin/lua5.4, prosodyctl check config passed on Lua 5.4. It still passed after upgrading to the 26.04 Prosody build and removing lua5.2.
  • A fresh apt install jitsi-meet (2.0.11248) failed with lua5.2 installed, and failed with no Lua step at all because luarocks pulled in Lua 5.1. With Lua 5.4 pinned first, it installed cleanly and Prosody started all its services.
  • With Lua 5.4 and jitsi-meet-tokens installed, the JWT modules loaded without errors on 26.04. On 24.04 the same setup fails with module 'inspect' not found, so stay on Lua 5.2 there until a stable release includes PR #17928.

What we have not confirmed yet

  • We have not run a real do-release-upgrade on a production Jitsi server. A container cannot run one, so the repository step is based on the issue thread and Ubuntu’s documentation.
  • The reporter in #17924 was unsure which Prosody build was installed after several reinstalls.

Sources

Need a hand?

If Prosody still will not start, contact our engineers with the output of sudo prosodyctl about and sudo journalctl -u prosody --since "10 min ago". Our support plans cover OS upgrades of Jitsi servers.

Collect debug info

These commands gather what an engineer needs to diagnose a Jitsi server. Copy them, run them, and keep the output.

Terminal
# Run on the server, from your docker-jitsi-meet folder

# 1. Every service should be "running" (or "healthy")
docker compose ps

# 2. Which images and release tags are running
docker compose images

# 3. Recent logs from the core services
docker compose logs --tail=200 web prosody jicofo jvb

# 4. The settings most fixes depend on
grep -E '^(PUBLIC_URL|JVB_ADVERTISE_IPS|ENABLE_LETSENCRYPT|ENABLE_AUTH|AUTH_TYPE)=' .env

# 5. Is anything listening for media on UDP 10000?
sudo ss -ulnp | grep 10000

Installed with the Debian packages instead of Docker? Read the service logs with:

Terminal
sudo journalctl -u prosody -u jicofo -u jitsi-videobridge2 --since "1 hour ago"

Remove passwords, secrets and tokens before you share any output.

Send the output to an engineer

Frequently asked questions

Why does installing lua5.4 not fix it?

Debian packages pick /usr/bin/lua by priority. lua5.2 registers with priority 120 and lua5.4 with 20, so while lua5.2 is installed /usr/bin/lua stays on 5.2. Set it by hand with sudo update-alternatives --set lua-interpreter /usr/bin/lua5.4.

Should I remove the Include line from prosody.cfg.lua?

No. The Include line is valid and loads your Jitsi host config from conf.d. The error only means the Lua running Prosody cannot load LuaFileSystem.

Do I need luarocks, gcc or the steps from the Jitsi forum?

Not on Ubuntu 26.04. Every Lua module Jitsi needs is packaged for Lua 5.4 there. Modules built with luarocks go to /usr/local and override the packaged ones, which makes later upgrades harder to debug.

Does this affect the Docker images?

No. docker-jitsi-meet brings its own Prosody and Lua inside the container, so upgrading the host OS does not touch them.

Is this fixed upstream?

Partly. Jitsi closed issue #17924 with PR #17928 on 2026-10-05 and removed the lua5.2 step from the handbook the same day. Servers that already have lua5.2 still need the alternative switched by hand.

Stuck, or would rather not do this by hand?

Deploy it in one click

A private Jitsi server in your own AWS account with SSL, your domain and optional recording, transcription and JWT. Free 15 minute trial.

Start free trial

Talk to a Jitsi engineer

Setup, fixes, branding, recording, scaling. Tell us what is happening and we reply with a plan and a quote.

Get expert help

Related

Recently updated