@kmccormick
I think I might have some more info now. in short I was simply trying to test out the Catalog MFE so I’ve removed others like Discovery and that got the course listing to work again.
but now if I want to use catalog mfe I need to install edx-search 4.4.0 like:
from tutor import hooks
INSTALL_SEARCH_440 = r"""
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
pip install "edx-search==4.4.0"
"""
hooks.Filters.ENV_PATCHES.add_items([
("openedx-dockerfile-post-python-requirements", INSTALL_SEARCH_440),
("openedx-dev-dockerfile-post-python-requirements", INSTALL_SEARCH_440),
])
but this gives an error building the openedx image:
tutor images build openedx
Building image docker.io/overhangio/openedx:21.0.0-indigo
docker buildx build --tag=docker.io/overhangio/openedx:21.0.0-indigo --output=type=docker --cache-from=type=registry,ref=docker.io/overhangio/openedx:21.0.0-indigo-cache /home/tutor/.local/share/tutor/env/build/openedx
[+] Building 6.5s (27/66) docker-container:max3cpu
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 12.68kB 0.0s
=> resolve image config for docker-image://docker.io/docker/dockerfile:1 0.3s
=> CACHED docker-image://docker.io/docker/dockerfile:1@sha256:b6afd42430b15f2d2a4c5a02b919e98a525b785b1aaff16747d2f623364e39b6 0.0s
=> => resolve docker.io/docker/dockerfile:1@sha256:b6afd42430b15f2d2a4c5a02b919e98a525b785b1aaff16747d2f623364e39b6 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:22.04 1.2s
=> [internal] load metadata for ghcr.io/astral-sh/uv:0.9.18 2.1s
=> [internal] load metadata for docker.io/powerman/dockerize:0.19.0 2.4s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> importing cache manifest from docker.io/overhangio/openedx:21.0.0-indigo-cache 1.4s
=> => inferred cache manifest type: application/vnd.oci.image.manifest.v1+json 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 8.92kB 0.0s
=> FROM ghcr.io/astral-sh/uv:0.9.18@sha256:5713fa8217f92b80223bc83aac7db36ec80a84437dbc0d04bbc659cae030d8c9 0.0s
=> => resolve ghcr.io/astral-sh/uv:0.9.18@sha256:5713fa8217f92b80223bc83aac7db36ec80a84437dbc0d04bbc659cae030d8c9 0.0s
=> [minimal 1/3] FROM docker.io/library/ubuntu:22.04@sha256:c7eb020043d8fc2ae0793fb35a37bff1cf33f156d4d4b12ccc7f3ef8706c38b1 0.0s
=> => resolve docker.io/library/ubuntu:22.04@sha256:c7eb020043d8fc2ae0793fb35a37bff1cf33f156d4d4b12ccc7f3ef8706c38b1 0.0s
=> [code 3/4] ADD --keep-git-dir=true https://github.com/openedx/edx-platform.git#release/ulmo.1 . 1.1s
=> FROM docker.io/powerman/dockerize:0.19.0@sha256:a34158d699e065609fc845e7cdc1e070f185afdbca317fe4931aaea04818f8bf 0.0s
=> => resolve docker.io/powerman/dockerize:0.19.0@sha256:a34158d699e065609fc845e7cdc1e070f185afdbca317fe4931aaea04818f8bf 0.0s
=> CACHED [minimal 2/3] RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/var/lib/apt,sharing=locked apt update && apt install -y build-essential curl g 0.0s
=> CACHED [minimal 3/3] COPY --from=ghcr.io/astral-sh/uv:0.9.18 /uv /usr/local/bin/uv 0.0s
=> CACHED [code 1/4] RUN mkdir -p /openedx/edx-platform 0.0s
=> CACHED [code 2/4] WORKDIR /openedx/edx-platform 0.0s
=> CACHED [code 3/4] ADD --keep-git-dir=true https://github.com/openedx/edx-platform.git#release/ulmo.1 . 0.0s
=> CACHED [code 4/4] RUN git config --global user.email "tutor@overhang.io" && git config --global user.name "Tutor" 0.0s
=> CACHED [edx-platform 1/1] COPY --from=code /openedx/edx-platform / 0.0s
=> CACHED [python 1/4] RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/var/lib/apt,sharing=locked apt update && apt install -y libssl-dev zlib1g-dev l 0.0s
=> CACHED [python 2/4] RUN git clone https://github.com/pyenv/pyenv /opt/pyenv --branch v2.3.36 --depth 1 0.0s
=> CACHED [python 3/4] RUN /opt/pyenv/bin/pyenv install 3.11.8 0.0s
=> CACHED [python 4/4] RUN /opt/pyenv/versions/3.11.8/bin/python -m venv /openedx/venv 0.0s
=> CACHED [python-requirements 1/7] RUN --mount=type=cache,target=/var/cache/apt,sharing=locked --mount=type=cache,target=/var/lib/apt,sharing=locked apt update && apt install -y software-p 0.0s
=> CACHED [python-requirements 2/7] RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared uv pip install setuptools==69.1.1 pip==24.0 wheel==0.43.0 0.0s
=> ERROR [python-requirements 3/7] RUN --mount=type=bind,from=edx-platform,source=/requirements/edx/base.txt,target=/openedx/edx-platform/requirements/edx/base.txt --mount=type=bind,from=edx-platfo 1.3s
------
> [python-requirements 3/7] RUN --mount=type=bind,from=edx-platform,source=/requirements/edx/base.txt,target=/openedx/edx-platform/requirements/edx/base.txt --mount=type=bind,from=edx-platform,source=/requirements/edx/assets.txt,target=/openedx/edx-platform/requirements/edx/assets.txt --mount=type=cache,target=/openedx/.cache/pip,sharing=shared uv pip install -r /openedx/edx-platform/requirements/edx/base.txt -r /openedx/edx-platform/requirements/edx/assets.txt:
0.140 Using Python 3.11.8 environment at: /openedx/venv
1.257 × Failed to build `loremipsum==1.0.5`
1.257 ├─▶ The build backend returned an error
1.257 ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit
1.257 status: 1)
1.257
1.257 [stderr]
1.257 Traceback (most recent call last):
1.257 File "<string>", line 14, in <module>
1.257 File
1.257 "/openedx/.cache/pip/builds-v0/.tmpgTeYXs/lib/python3.11/site-packages/setuptools/build_meta.py",
1.257 line 333, in get_requires_for_build_wheel
1.257 return self._get_build_requires(config_settings, requirements=[])
1.257 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1.257 File
1.257 "/openedx/.cache/pip/builds-v0/.tmpgTeYXs/lib/python3.11/site-packages/setuptools/build_meta.py",
1.257 line 301, in _get_build_requires
1.257 self.run_setup()
1.257 File
1.257 "/openedx/.cache/pip/builds-v0/.tmpgTeYXs/lib/python3.11/site-packages/setuptools/build_meta.py",
1.257 line 520, in run_setup
1.257 super().run_setup(setup_script=setup_script)
1.257 File
1.257 "/openedx/.cache/pip/builds-v0/.tmpgTeYXs/lib/python3.11/site-packages/setuptools/build_meta.py",
1.257 line 317, in run_setup
1.257 exec(code, locals())
1.257 File "<string>", line 13, in <module>
1.257 File
1.257 "/openedx/.cache/pip/sdists-v9/pypi/loremipsum/1.0.5/LKbpG553hq161wdZGTyob/src/loremipsum/__init__.py",
1.257 line 61, in <module>
1.257 from .generator import Generator, DictionaryError, SampleError
1.257 File
1.257 "/openedx/.cache/pip/sdists-v9/pypi/loremipsum/1.0.5/LKbpG553hq161wdZGTyob/src/loremipsum/generator.py",
1.257 line 8, in <module>
1.257 from pkg_resources import resource_string
1.257 ModuleNotFoundError: No module named 'pkg_resources'
1.257
1.257 hint: This error likely indicates that `loremipsum@1.0.5` depends
1.257 on `pkg_resources`, but doesn't declare it as a build dependency. If
1.257 `loremipsum` is a first-party package, consider adding `pkg_resources`
1.257 to its `build-system.requires`. Otherwise, either add it to your
1.257 `pyproject.toml` under:
1.257
1.257 [tool.uv.extra-build-dependencies]
1.257 loremipsum = ["pkg_resources"]
1.257
1.257 or `uv pip install pkg_resources` into the environment and re-run with
1.257 `--no-build-isolation`.
------
Dockerfile:91
--------------------
90 | # Install base requirements and asset-building requirements
91 | >>> RUN --mount=type=bind,from=edx-platform,source=/requirements/edx/base.txt,target=/openedx/edx-platform/requirements/edx/base.txt \
92 | >>> --mount=type=bind,from=edx-platform,source=/requirements/edx/assets.txt,target=/openedx/edx-platform/requirements/edx/assets.txt \
93 | >>> --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
94 | >>> $PIP_COMMAND install -r /openedx/edx-platform/requirements/edx/base.txt -r /openedx/edx-platform/requirements/edx/assets.txt
95 |
--------------------
ERROR: failed to build: failed to solve: process "/bin/sh -c $PIP_COMMAND install -r /openedx/edx-platform/requirements/edx/base.txt -r /openedx/edx-platform/requirements/edx/assets.txt" did not complete successfully: exit code: 1
Error: Command failed with status 1: docker buildx build --tag=docker.io/overhangio/openedx:21.0.0-indigo --output=type=docker --cache-from=type=registry,ref=docker.io/overhangio/openedx:21.0.0-indigo-cache /home/tutor/.local/share/tutor/env/build/openedx
But without edx-search==4.4.0 then I’m missing the endpoint unstable/v0/course_list_search thus I’m getting a 404 when listing courses, that’s why everything is empty:
lms-1 | [pid: 14|app: 0|req: 23/46] 172.18.0.2 () {68 vars in 4107 bytes} [Mon Feb 9 09:15:38 2026] POST /search/unstable/v0/course_list_search/ => generated 9770 bytes in 69 msecs (HTTP/1.1 404) 10 headers in 597 bytes (1 switches on core 0)
caddy-1 | {"level":"error","ts":1770628538.3851182,"logger":"http.log.access.log0","msg":"handled request","request":{"remote_ip":"x.x.x.x","remote_port":"53475","client_ip":"x.x.x.x","proto":"HTTP/3.0","method":"POST","host":"lms.domain.tld","uri":"/search/unstable/v0/course_list_search/","tls":{"resumed":true,"version":772,"cipher_suite":4865,"proto":"h3","server_name":"lms.domain.tld"}},"bytes_read":367,"user_id":"","duration":0.069913141,"size":3356,"status":404}