oraios/serena · error · RuntimeError

Unsupported Linux architecture: {machine}

Error message

Unsupported Linux architecture: {machine}

What it means

Raised during lua-language-server download when platform.machine() reports a Linux architecture that has no prebuilt release asset (anything other than x86_64/amd64 or aarch64/arm64). The library only ships binaries for x64 and arm64 Linux.

Source

Thrown at src/solidlsp/language_servers/lua_ls.py:133

        return None

    @staticmethod
    def _download_lua_ls(solidlsp_settings: SolidLSPSettings) -> str:
        """Download and install lua-language-server if not present."""
        lua_settings = solidlsp_settings.get_ls_specific_settings(LanguageServerId.LUA)
        lua_ls_version = lua_settings.get("lua_language_server_version", DEFAULT_LUA_LS_VERSION)
        system = platform.system()
        machine = platform.machine().lower()

        # Map platform and architecture to download URL
        if system == "Linux":
            if machine in ["x86_64", "amd64"]:
                download_name = f"lua-language-server-{lua_ls_version}-linux-x64.tar.gz"
            elif machine in ["aarch64", "arm64"]:
                download_name = f"lua-language-server-{lua_ls_version}-linux-arm64.tar.gz"
            else:
                raise RuntimeError(f"Unsupported Linux architecture: {machine}")
        elif system == "Darwin":
            if machine in ["x86_64", "amd64"]:
                download_name = f"lua-language-server-{lua_ls_version}-darwin-x64.tar.gz"
            elif machine in ["arm64", "aarch64"]:
                download_name = f"lua-language-server-{lua_ls_version}-darwin-arm64.tar.gz"
            else:
                raise RuntimeError(f"Unsupported macOS architecture: {machine}")
        elif system == "Windows":
            if machine in ["amd64", "x86_64"]:
                download_name = f"lua-language-server-{lua_ls_version}-win32-x64.zip"
            else:
                raise RuntimeError(f"Unsupported Windows architecture: {machine}")
        else:
            raise RuntimeError(f"Unsupported operating system: {system}")

        download_url = f"https://github.com/LuaLS/lua-language-server/releases/download/{lua_ls_version}/{download_name}"

        install_dir = _lua_ls_install_dir(LuaLanguageServer.ls_resources_dir(solidlsp_settings), lua_ls_version)

View on GitHub (pinned to 7fcbca7e62)

Solutions

  1. Use a 64-bit x86_64 or arm64 Linux environment (rebuild container with --platform linux/amd64 or linux/arm64)
  2. Build lua-language-server from source (LuaLS/lua-language-server) and place the binary in the expected install_dir so the download step is skipped
  3. Install lua-language-server system-wide (e.g. via package manager) and point the server config at it
  4. On 32-bit ARM, install a 64-bit OS (Raspberry Pi OS arm64) if hardware supports it

Example fix

// before
FROM --platform=linux/arm/v7 python:3.11  # armv7l -> unsupported
// after
FROM --platform=linux/arm64 python:3.11
Defensive patterns

Strategy: validation

Validate before calling

import platform
machine = platform.machine().lower()
if platform.system() == "Linux" and machine not in ("x86_64", "amd64", "aarch64", "arm64"):
    raise SystemExit(f"lua-language-server has no prebuilt binary for linux/{machine}; use amd64/arm64 or build from source")

Try / catch

try:
    server = create_lua_server()
except RuntimeError as e:
    if "Unsupported Linux architecture" in str(e):
        fallback_to_source_built_binary()  # point config at a locally built lua-language-server
    else:
        raise

Prevention

When it happens

Trigger: Running _download_lua_ls (via _setup_runtime_dependency) on Linux with machine values like armv7l, i686/i386, riscv64, ppc64le, or s390x.

Common situations: Raspberry Pi on 32-bit Raspberry Pi OS (armv7l), older 32-bit x86 servers, Alpine/s390x mainframe CI, QEMU-emulated architectures in Docker builds.

Related errors


AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29). Data as JSON: /api/errors/b45ba9de058ac78c. Report an issue: GitHub.