Read the Docs build information Build id: 3986304 Project: canonical-lxd Version: default Commit: cef09524c4d2cf33c170659dde47ceed98eb9c4e Date: 2026-05-05T09:17:49.566103Z State: cancelled Success: False [rtd-command-info] start-time: 2026-05-05T09:17:50.586401Z, end-time: 2026-05-05T09:17:52.015632Z, duration: 1, exit-code: 0 git clone --depth 1 https://github.com/canonical/lxd . Cloning into '.'... [rtd-command-info] start-time: 2026-05-05T09:17:52.104801Z, end-time: 2026-05-05T09:17:53.958970Z, duration: 1, exit-code: 0 git fetch origin --force --prune --prune-tags --depth 50 refs/heads/stable-5.21:refs/remotes/origin/stable-5.21 From https://github.com/canonical/lxd * [new branch] stable-5.21 -> origin/stable-5.21 [rtd-command-info] start-time: 2026-05-05T09:17:54.623157Z, end-time: 2026-05-05T09:17:54.774952Z, duration: 0, exit-code: 0 git checkout --force origin/stable-5.21 Note: switching to 'origin/stable-5.21'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at cef0952 build(deps): bump the gomod group with 2 updates (#18230) [rtd-command-info] start-time: 2026-05-05T09:17:54.877640Z, end-time: 2026-05-05T09:17:54.915612Z, duration: 0, exit-code: 0 cat doc/.readthedocs.yaml # .readthedocs.yaml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details # Required version: 2 # Set the version of Python and other tools you might need build: os: ubuntu-24.04 tools: golang: "1.25" python: "3.12" jobs: post_checkout: - git fetch --unshallow || true # Cancel building pull requests when there are no changes in the doc directory. # If there are no changes (git diff exits with 0), we force the command to return with 183. # This is a special exit code on Read the Docs that will cancel the build immediately. # https://docs.readthedocs.io/en/stable/build-customization.html#cancel-build-based-on-a-condition - | if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/main -- 'doc/' '.readthedocs.yaml'; then exit 183; fi pre_build: - go build -ldflags "-s -w" -o trimpath -o lxc.bin ./lxc # Build documentation in the docs/ directory with Sphinx sphinx: builder: dirhtml configuration: doc/conf.py fail_on_warning: true # If using Sphinx, optionally build your docs in additional formats such as PDF formats: - pdf # Optionally declare the Python requirements required to build your docs python: install: - requirements: doc/requirements.txt [rtd-command-info] start-time: 2026-05-05T09:17:55.002432Z, end-time: 2026-05-05T09:18:20.961330Z, duration: 25, exit-code: 0 git fetch --unshallow || true From https://github.com/canonical/lxd * [new tag] lxd-0.1 -> lxd-0.1 * [new tag] lxd-0.10 -> lxd-0.10 * [new tag] lxd-0.11 -> lxd-0.11 * [new tag] lxd-0.12 -> lxd-0.12 * [new tag] lxd-0.13 -> lxd-0.13 * [new tag] lxd-0.14 -> lxd-0.14 * [new tag] lxd-0.15 -> lxd-0.15 * [new tag] lxd-0.16 -> lxd-0.16 * [new tag] lxd-0.17 -> lxd-0.17 * [new tag] lxd-0.18 -> lxd-0.18 * [new tag] lxd-0.19 -> lxd-0.19 * [new tag] lxd-0.2 -> lxd-0.2 * [new tag] lxd-0.20 -> lxd-0.20 * [new tag] lxd-0.21 -> lxd-0.21 * [new tag] lxd-0.22 -> lxd-0.22 * [new tag] lxd-0.23 -> lxd-0.23 * [new tag] lxd-0.24 -> lxd-0.24 * [new tag] lxd-0.25 -> lxd-0.25 * [new tag] lxd-0.26 -> lxd-0.26 * [new tag] lxd-0.27 -> lxd-0.27 * [new tag] lxd-0.3 -> lxd-0.3 * [new tag] lxd-0.4 -> lxd-0.4 * [new tag] lxd-0.5 -> lxd-0.5 * [new tag] lxd-0.6 -> lxd-0.6 * [new tag] lxd-0.7 -> lxd-0.7 * [new tag] lxd-0.8 -> lxd-0.8 * [new tag] lxd-0.8.1 -> lxd-0.8.1 * [new tag] lxd-0.9 -> lxd-0.9 * [new tag] lxd-2.0.0 -> lxd-2.0.0 * [new tag] lxd-2.0.0.beta1 -> lxd-2.0.0.beta1 * [new tag] lxd-2.0.0.beta2 -> lxd-2.0.0.beta2 * [new tag] lxd-2.0.0.beta3 -> lxd-2.0.0.beta3 * [new tag] lxd-2.0.0.beta4 -> lxd-2.0.0.beta4 * [new tag] lxd-2.0.0.rc1 -> lxd-2.0.0.rc1 * [new tag] lxd-2.0.0.rc2 -> lxd-2.0.0.rc2 * [new tag] lxd-2.0.0.rc3 -> lxd-2.0.0.rc3 * [new tag] lxd-2.0.0.rc4 -> lxd-2.0.0.rc4 * [new tag] lxd-2.0.0.rc5 -> lxd-2.0.0.rc5 * [new tag] lxd-2.0.0.rc6 -> lxd-2.0.0.rc6 * [new tag] lxd-2.0.0.rc7 -> lxd-2.0.0.rc7 * [new tag] lxd-2.0.0.rc8 -> lxd-2.0.0.rc8 * [new tag] lxd-2.0.0.rc9 -> lxd-2.0.0.rc9 * [new tag] lxd-2.1 -> lxd-2.1 * [new tag] lxd-2.10 -> lxd-2.10 * [new tag] lxd-2.10.1 -> lxd-2.10.1 * [new tag] lxd-2.11 -> lxd-2.11 * [new tag] lxd-2.12 -> lxd-2.12 * [new tag] lxd-2.13 -> lxd-2.13 * [new tag] lxd-2.14 -> lxd-2.14 * [new tag] lxd-2.15 -> lxd-2.15 * [new tag] lxd-2.16 -> lxd-2.16 * [new tag] lxd-2.17 -> lxd-2.17 * [new tag] lxd-2.18 -> lxd-2.18 * [new tag] lxd-2.19 -> lxd-2.19 * [new tag] lxd-2.2 -> lxd-2.2 * [new tag] lxd-2.20 -> lxd-2.20 * [new tag] lxd-2.21 -> lxd-2.21 * [new tag] lxd-2.3 -> lxd-2.3 * [new tag] lxd-2.4 -> lxd-2.4 * [new tag] lxd-2.4.1 -> lxd-2.4.1 * [new tag] lxd-2.5 -> lxd-2.5 * [new tag] lxd-2.6 -> lxd-2.6 * [new tag] lxd-2.6.1 -> lxd-2.6.1 * [new tag] lxd-2.6.2 -> lxd-2.6.2 * [new tag] lxd-2.7 -> lxd-2.7 * [new tag] lxd-2.8 -> lxd-2.8 * [new tag] lxd-2.9 -> lxd-2.9 * [new tag] lxd-2.9.1 -> lxd-2.9.1 * [new tag] lxd-2.9.2 -> lxd-2.9.2 * [new tag] lxd-2.9.3 -> lxd-2.9.3 * [new tag] lxd-3.0.0 -> lxd-3.0.0 * [new tag] lxd-3.0.0.beta1 -> lxd-3.0.0.beta1 * [new tag] lxd-3.0.0.beta2 -> lxd-3.0.0.beta2 * [new tag] lxd-3.0.0.beta3 -> lxd-3.0.0.beta3 * [new tag] lxd-3.0.0.beta4 -> lxd-3.0.0.beta4 * [new tag] lxd-3.0.0.beta5 -> lxd-3.0.0.beta5 * [new tag] lxd-3.0.0.beta6 -> lxd-3.0.0.beta6 * [new tag] lxd-3.0.0.beta7 -> lxd-3.0.0.beta7 * [new tag] lxd-3.1 -> lxd-3.1 * [new tag] lxd-3.10 -> lxd-3.10 * [new tag] lxd-3.11 -> lxd-3.11 * [new tag] lxd-3.12 -> lxd-3.12 * [new tag] lxd-3.13 -> lxd-3.13 * [new tag] lxd-3.14 -> lxd-3.14 * [new tag] lxd-3.15 -> lxd-3.15 * [new tag] lxd-3.16 -> lxd-3.16 * [new tag] lxd-3.17 -> lxd-3.17 * [new tag] lxd-3.18 -> lxd-3.18 * [new tag] lxd-3.19 -> lxd-3.19 * [new tag] lxd-3.2 -> lxd-3.2 * [new tag] lxd-3.20 -> lxd-3.20 * [new tag] lxd-3.21 -> lxd-3.21 * [new tag] lxd-3.22 -> lxd-3.22 * [new tag] lxd-3.23 -> lxd-3.23 * [new tag] lxd-3.3 -> lxd-3.3 * [new tag] lxd-3.4 -> lxd-3.4 * [new tag] lxd-3.5 -> lxd-3.5 * [new tag] lxd-3.6 -> lxd-3.6 * [new tag] lxd-3.7 -> lxd-3.7 * [new tag] lxd-3.8 -> lxd-3.8 * [new tag] lxd-3.9 -> lxd-3.9 * [new tag] lxd-4.0.0 -> lxd-4.0.0 * [new tag] lxd-4.1 -> lxd-4.1 * [new tag] lxd-4.10 -> lxd-4.10 * [new tag] lxd-4.11 -> lxd-4.11 * [new tag] lxd-4.12 -> lxd-4.12 * [new tag] lxd-4.13 -> lxd-4.13 * [new tag] lxd-4.14 -> lxd-4.14 * [new tag] lxd-4.15 -> lxd-4.15 * [new tag] lxd-4.16 -> lxd-4.16 * [new tag] lxd-4.17 -> lxd-4.17 * [new tag] lxd-4.18 -> lxd-4.18 * [new tag] lxd-4.19 -> lxd-4.19 * [new tag] lxd-4.2 -> lxd-4.2 * [new tag] lxd-4.20 -> lxd-4.20 * [new tag] lxd-4.21 -> lxd-4.21 * [new tag] lxd-4.22 -> lxd-4.22 * [new tag] lxd-4.23 -> lxd-4.23 * [new tag] lxd-4.24 -> lxd-4.24 * [new tag] lxd-4.3 -> lxd-4.3 * [new tag] lxd-4.4 -> lxd-4.4 * [new tag] lxd-4.5 -> lxd-4.5 * [new tag] lxd-4.6 -> lxd-4.6 * [new tag] lxd-4.7 -> lxd-4.7 * [new tag] lxd-4.8 -> lxd-4.8 * [new tag] lxd-4.9 -> lxd-4.9 * [new tag] lxd-5.0.0 -> lxd-5.0.0 * [new tag] lxd-5.1 -> lxd-5.1 * [new tag] lxd-5.10 -> lxd-5.10 * [new tag] lxd-5.11 -> lxd-5.11 * [new tag] lxd-5.12 -> lxd-5.12 * [new tag] lxd-5.13 -> lxd-5.13 * [new tag] lxd-5.14 -> lxd-5.14 * [new tag] lxd-5.15 -> lxd-5.15 * [new tag] lxd-5.16 -> lxd-5.16 * [new tag] lxd-5.17 -> lxd-5.17 * [new tag] lxd-5.18 -> lxd-5.18 * [new tag] lxd-5.19 -> lxd-5.19 * [new tag] lxd-5.2 -> lxd-5.2 * [new tag] lxd-5.20 -> lxd-5.20 * [new tag] lxd-5.21.0 -> lxd-5.21.0 * [new tag] lxd-5.21.1 -> lxd-5.21.1 * [new tag] lxd-5.21.2 -> lxd-5.21.2 * [new tag] lxd-5.21.3 -> lxd-5.21.3 * [new tag] lxd-5.21.4 -> lxd-5.21.4 * [new tag] lxd-5.3 -> lxd-5.3 * [new tag] lxd-5.4 -> lxd-5.4 * [new tag] lxd-5.5 -> lxd-5.5 * [new tag] lxd-5.6 -> lxd-5.6 * [new tag] lxd-5.7 -> lxd-5.7 * [new tag] lxd-5.8 -> lxd-5.8 * [new tag] lxd-5.9 -> lxd-5.9 * [new tag] lxd-6.1 -> lxd-6.1 * [new tag] lxd-6.2 -> lxd-6.2 * [new tag] lxd-6.3 -> lxd-6.3 * [new tag] lxd-6.4 -> lxd-6.4 * [new tag] lxd-6.5 -> lxd-6.5 * [new tag] lxd-6.6 -> lxd-6.6 * [new tag] lxd-6.7 -> lxd-6.7 * [new tag] lxd-6.8 -> lxd-6.8 * [new tag] v5.21.0 -> v5.21.0 [rtd-command-info] start-time: 2026-05-05T09:18:21.047775Z, end-time: 2026-05-05T09:18:21.085884Z, duration: 0, exit-code: 0 if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/main -- 'doc/' '.readthedocs.yaml'; then exit 183; fi [rtd-command-info] start-time: 2026-05-05T09:18:25.604607Z, end-time: 2026-05-05T09:18:25.664062Z, duration: 0, exit-code: 0 asdf global golang 1.25.4 [rtd-command-info] start-time: 2026-05-05T09:18:29.156800Z, end-time: 2026-05-05T09:18:29.214887Z, duration: 0, exit-code: 0 asdf global python 3.12.12 [rtd-command-info] start-time: 2026-05-05T09:18:29.584645Z, end-time: 2026-05-05T09:18:30.231929Z, duration: 0, exit-code: 0 python -mvirtualenv $READTHEDOCS_VIRTUALENV_PATH created virtual environment CPython3.12.12.final.0-64 in 402ms creator CPython3Posix(dest=/home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default, clear=False, no_vcs_ignore=False, global=False) seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/docs/.local/share/virtualenv) added seed packages: pip==23.1, setuptools==67.6.1, wheel==0.40.0 activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator [rtd-command-info] start-time: 2026-05-05T09:18:30.317342Z, end-time: 2026-05-05T09:18:35.838083Z, duration: 5, exit-code: 0 python -m pip install --upgrade --no-cache-dir pip setuptools Requirement already satisfied: pip in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (23.1) Collecting pip Downloading pip-26.1.1-py3-none-any.whl (1.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.8/1.8 MB 18.9 MB/s eta 0:00:00 Requirement already satisfied: setuptools in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (67.6.1) Collecting setuptools Downloading setuptools-82.0.1-py3-none-any.whl (1.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 35.1 MB/s eta 0:00:00 Installing collected packages: setuptools, pip Attempting uninstall: setuptools Found existing installation: setuptools 67.6.1 Uninstalling setuptools-67.6.1: Successfully uninstalled setuptools-67.6.1 Attempting uninstall: pip Found existing installation: pip 23.1 Uninstalling pip-23.1: Successfully uninstalled pip-23.1 Successfully installed pip-26.1.1 setuptools-82.0.1 [rtd-command-info] start-time: 2026-05-05T09:18:35.928580Z, end-time: 2026-05-05T09:18:40.613539Z, duration: 4, exit-code: 0 python -m pip install --upgrade --no-cache-dir sphinx Collecting sphinx Downloading sphinx-9.1.0-py3-none-any.whl.metadata (5.8 kB) Collecting sphinxcontrib-applehelp>=1.0.7 (from sphinx) Downloading sphinxcontrib_applehelp-2.0.0-py3-none-any.whl.metadata (2.3 kB) Collecting sphinxcontrib-devhelp>=1.0.6 (from sphinx) Downloading sphinxcontrib_devhelp-2.0.0-py3-none-any.whl.metadata (2.3 kB) Collecting sphinxcontrib-htmlhelp>=2.0.6 (from sphinx) Downloading sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl.metadata (2.3 kB) Collecting sphinxcontrib-jsmath>=1.0.1 (from sphinx) Downloading sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl.metadata (1.4 kB) Collecting sphinxcontrib-qthelp>=1.0.6 (from sphinx) Downloading sphinxcontrib_qthelp-2.0.0-py3-none-any.whl.metadata (2.3 kB) Collecting sphinxcontrib-serializinghtml>=1.1.9 (from sphinx) Downloading sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl.metadata (2.4 kB) Collecting Jinja2>=3.1 (from sphinx) Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB) Collecting Pygments>=2.17 (from sphinx) Downloading pygments-2.20.0-py3-none-any.whl.metadata (2.5 kB) Collecting docutils<0.23,>=0.21 (from sphinx) Downloading docutils-0.22.4-py3-none-any.whl.metadata (15 kB) Collecting snowballstemmer>=2.2 (from sphinx) Downloading snowballstemmer-3.0.1-py3-none-any.whl.metadata (7.9 kB) Collecting babel>=2.13 (from sphinx) Downloading babel-2.18.0-py3-none-any.whl.metadata (2.2 kB) Collecting alabaster>=0.7.14 (from sphinx) Downloading alabaster-1.0.0-py3-none-any.whl.metadata (2.8 kB) Collecting imagesize>=1.3 (from sphinx) Downloading imagesize-2.0.0-py2.py3-none-any.whl.metadata (1.5 kB) Collecting requests>=2.30.0 (from sphinx) Downloading requests-2.33.1-py3-none-any.whl.metadata (4.8 kB) Collecting roman-numerals>=1.0.0 (from sphinx) Downloading roman_numerals-4.1.0-py3-none-any.whl.metadata (3.3 kB) Collecting packaging>=23.0 (from sphinx) Downloading packaging-26.2-py3-none-any.whl.metadata (3.5 kB) Collecting MarkupSafe>=2.0 (from Jinja2>=3.1->sphinx) Downloading markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.7 kB) Collecting charset_normalizer<4,>=2 (from requests>=2.30.0->sphinx) Downloading charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (40 kB) Collecting idna<4,>=2.5 (from requests>=2.30.0->sphinx) Downloading idna-3.13-py3-none-any.whl.metadata (8.0 kB) Collecting urllib3<3,>=1.26 (from requests>=2.30.0->sphinx) Downloading urllib3-2.6.3-py3-none-any.whl.metadata (6.9 kB) Collecting certifi>=2023.5.7 (from requests>=2.30.0->sphinx) Downloading certifi-2026.4.22-py3-none-any.whl.metadata (2.5 kB) Downloading sphinx-9.1.0-py3-none-any.whl (3.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.9/3.9 MB 185.7 MB/s 0:00:00 Downloading docutils-0.22.4-py3-none-any.whl (633 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 633.2/633.2 kB 982.0 MB/s 0:00:00 Downloading alabaster-1.0.0-py3-none-any.whl (13 kB) Downloading babel-2.18.0-py3-none-any.whl (10.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.2/10.2 MB 439.1 MB/s 0:00:00 Downloading imagesize-2.0.0-py2.py3-none-any.whl (9.4 kB) Downloading jinja2-3.1.6-py3-none-any.whl (134 kB) Downloading markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (22 kB) Downloading packaging-26.2-py3-none-any.whl (100 kB) Downloading pygments-2.20.0-py3-none-any.whl (1.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 947.8 MB/s 0:00:00 Downloading requests-2.33.1-py3-none-any.whl (64 kB) Downloading charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (216 kB) Downloading idna-3.13-py3-none-any.whl (68 kB) Downloading urllib3-2.6.3-py3-none-any.whl (131 kB) Downloading certifi-2026.4.22-py3-none-any.whl (135 kB) Downloading roman_numerals-4.1.0-py3-none-any.whl (7.7 kB) Downloading snowballstemmer-3.0.1-py3-none-any.whl (103 kB) Downloading sphinxcontrib_applehelp-2.0.0-py3-none-any.whl (119 kB) Downloading sphinxcontrib_devhelp-2.0.0-py3-none-any.whl (82 kB) Downloading sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl (98 kB) Downloading sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl (5.1 kB) Downloading sphinxcontrib_qthelp-2.0.0-py3-none-any.whl (88 kB) Downloading sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl (92 kB) Installing collected packages: urllib3, sphinxcontrib-serializinghtml, sphinxcontrib-qthelp, sphinxcontrib-jsmath, sphinxcontrib-htmlhelp, sphinxcontrib-devhelp, sphinxcontrib-applehelp, snowballstemmer, roman-numerals, Pygments, packaging, MarkupSafe, imagesize, idna, docutils, charset_normalizer, certifi, babel, alabaster, requests, Jinja2, sphinx Successfully installed Jinja2-3.1.6 MarkupSafe-3.0.3 Pygments-2.20.0 alabaster-1.0.0 babel-2.18.0 certifi-2026.4.22 charset_normalizer-3.4.7 docutils-0.22.4 idna-3.13 imagesize-2.0.0 packaging-26.2 requests-2.33.1 roman-numerals-4.1.0 snowballstemmer-3.0.1 sphinx-9.1.0 sphinxcontrib-applehelp-2.0.0 sphinxcontrib-devhelp-2.0.0 sphinxcontrib-htmlhelp-2.1.0 sphinxcontrib-jsmath-1.0.1 sphinxcontrib-qthelp-2.0.0 sphinxcontrib-serializinghtml-2.0.0 urllib3-2.6.3 [rtd-command-info] start-time: 2026-05-05T09:18:40.695705Z, end-time: 2026-05-05T09:18:47.012922Z, duration: 6, exit-code: 0 python -m pip install --exists-action=w --no-cache-dir -r doc/requirements.txt Collecting canonical-sphinx==0.5.1 (from -r doc/requirements.txt (line 4)) Downloading canonical_sphinx-0.5.1-py3-none-any.whl.metadata (5.8 kB) Collecting myst-parser==4.0.1 (from -r doc/requirements.txt (line 7)) Downloading myst_parser-4.0.1-py3-none-any.whl.metadata (5.5 kB) Collecting sphinx-autobuild==2025.08.25 (from -r doc/requirements.txt (line 8)) Downloading sphinx_autobuild-2025.8.25-py3-none-any.whl.metadata (8.5 kB) Collecting sphinx-design==0.7.0 (from -r doc/requirements.txt (line 9)) Downloading sphinx_design-0.7.0-py3-none-any.whl.metadata (5.5 kB) Collecting sphinx-notfound-page==1.1.0 (from -r doc/requirements.txt (line 10)) Downloading sphinx_notfound_page-1.1.0-py3-none-any.whl.metadata (2.9 kB) Collecting sphinx-reredirects==1.1.0 (from -r doc/requirements.txt (line 11)) Downloading sphinx_reredirects-1.1.0-py3-none-any.whl.metadata (4.7 kB) Collecting sphinx-tabs==3.4.7 (from -r doc/requirements.txt (line 12)) Downloading sphinx_tabs-3.4.7-py3-none-any.whl.metadata (6.3 kB) Collecting sphinxcontrib-jquery==4.1 (from -r doc/requirements.txt (line 13)) Downloading sphinxcontrib_jquery-4.1-py2.py3-none-any.whl.metadata (2.6 kB) Collecting sphinxext-opengraph==0.13.0 (from -r doc/requirements.txt (line 14)) Downloading sphinxext_opengraph-0.13.0-py3-none-any.whl.metadata (2.7 kB) Collecting sphinx-config-options==0.1.0 (from -r doc/requirements.txt (line 17)) Downloading sphinx_config_options-0.1.0-py3-none-any.whl.metadata (3.1 kB) Collecting sphinx-related-links==0.1.2 (from -r doc/requirements.txt (line 18)) Downloading sphinx_related_links-0.1.2-py3-none-any.whl.metadata (2.5 kB) Collecting sphinx-roles==0.1.0 (from -r doc/requirements.txt (line 19)) Downloading sphinx_roles-0.1.0-py3-none-any.whl.metadata (1.5 kB) Collecting sphinx-terminal==1.0.3 (from -r doc/requirements.txt (line 20)) Downloading sphinx_terminal-1.0.3-py3-none-any.whl.metadata (2.9 kB) Collecting sphinx-youtube-links==0.1.0 (from -r doc/requirements.txt (line 21)) Downloading sphinx_youtube_links-0.1.0-py3-none-any.whl.metadata (1.5 kB) Collecting packaging==26.0 (from -r doc/requirements.txt (line 24)) Downloading packaging-26.0-py3-none-any.whl.metadata (3.3 kB) Collecting sphinxcontrib-svg2pdfconverter==2.0.0 (from sphinxcontrib-svg2pdfconverter[CairoSVG]==2.0.0->-r doc/requirements.txt (line 25)) Downloading sphinxcontrib_svg2pdfconverter-2.0.0-py3-none-any.whl.metadata (3.3 kB) Collecting sphinx-last-updated-by-git==0.3.8 (from -r doc/requirements.txt (line 26)) Downloading sphinx_last_updated_by_git-0.3.8-py3-none-any.whl.metadata (7.1 kB) Collecting sphinx-sitemap==2.9.0 (from -r doc/requirements.txt (line 27)) Downloading sphinx_sitemap-2.9.0-py3-none-any.whl.metadata (3.4 kB) Collecting vale==3.13.0 (from -r doc/requirements.txt (line 30)) Downloading vale-3.13.0.0-py3-none-any.whl.metadata (3.0 kB) Collecting gitpython==3.1.46 (from -r doc/requirements.txt (line 33)) Downloading gitpython-3.1.46-py3-none-any.whl.metadata (13 kB) Collecting linkify-it-py==2.0.3 (from -r doc/requirements.txt (line 34)) Downloading linkify_it_py-2.0.3-py3-none-any.whl.metadata (8.5 kB) Collecting pyyaml==6.0.3 (from -r doc/requirements.txt (line 35)) Downloading pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.metadata (2.4 kB) Collecting sphinx-copybutton==0.5.2 (from -r doc/requirements.txt (line 36)) Downloading sphinx_copybutton-0.5.2-py3-none-any.whl.metadata (3.2 kB) Collecting sphinx-remove-toctrees==1.0.0.post1 (from -r doc/requirements.txt (line 37)) Downloading sphinx_remove_toctrees-1.0.0.post1-py3-none-any.whl.metadata (5.8 kB) Collecting watchfiles==1.1.1 (from -r doc/requirements.txt (line 38)) Downloading watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB) Requirement already satisfied: Sphinx>=7.1.2 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) (9.1.0) Collecting furo (from canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) Downloading furo-2025.12.19-py3-none-any.whl.metadata (4.9 kB) Collecting docutils<0.22,>=0.19 (from myst-parser==4.0.1->-r doc/requirements.txt (line 7)) Downloading docutils-0.21.2-py3-none-any.whl.metadata (2.8 kB) Requirement already satisfied: jinja2 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from myst-parser==4.0.1->-r doc/requirements.txt (line 7)) (3.1.6) Collecting markdown-it-py~=3.0 (from myst-parser==4.0.1->-r doc/requirements.txt (line 7)) Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB) Collecting mdit-py-plugins>=0.4.1,~=0.4 (from myst-parser==4.0.1->-r doc/requirements.txt (line 7)) Downloading mdit_py_plugins-0.5.0-py3-none-any.whl.metadata (2.8 kB) Collecting Sphinx>=7.1.2 (from canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) Downloading sphinx-8.2.3-py3-none-any.whl.metadata (7.0 kB) Collecting colorama>=0.4.6 (from sphinx-autobuild==2025.08.25->-r doc/requirements.txt (line 8)) Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB) Collecting starlette>=0.35 (from sphinx-autobuild==2025.08.25->-r doc/requirements.txt (line 8)) Downloading starlette-1.0.0-py3-none-any.whl.metadata (6.3 kB) Collecting uvicorn>=0.25 (from sphinx-autobuild==2025.08.25->-r doc/requirements.txt (line 8)) Downloading uvicorn-0.46.0-py3-none-any.whl.metadata (6.7 kB) Collecting websockets>=11 (from sphinx-autobuild==2025.08.25->-r doc/requirements.txt (line 8)) Downloading websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.metadata (6.8 kB) Requirement already satisfied: pygments in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from sphinx-tabs==3.4.7->-r doc/requirements.txt (line 12)) (2.20.0) Collecting Sphinx>=7.1.2 (from canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) Downloading sphinx-7.4.7-py3-none-any.whl.metadata (6.1 kB) Requirement already satisfied: requests in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from sphinx-related-links==0.1.2->-r doc/requirements.txt (line 18)) (2.33.1) Collecting beautifulsoup4 (from sphinx-related-links==0.1.2->-r doc/requirements.txt (line 18)) Downloading beautifulsoup4-4.14.3-py3-none-any.whl.metadata (3.8 kB) Collecting gitdb<5,>=4.0.1 (from gitpython==3.1.46->-r doc/requirements.txt (line 33)) Downloading gitdb-4.0.12-py3-none-any.whl.metadata (1.2 kB) Collecting uc-micro-py (from linkify-it-py==2.0.3->-r doc/requirements.txt (line 34)) Downloading uc_micro_py-2.0.0-py3-none-any.whl.metadata (2.2 kB) Collecting anyio>=3.0.0 (from watchfiles==1.1.1->-r doc/requirements.txt (line 38)) Downloading anyio-4.13.0-py3-none-any.whl.metadata (4.5 kB) Collecting cairosvg>=1.0 (from sphinxcontrib-svg2pdfconverter[CairoSVG]==2.0.0->-r doc/requirements.txt (line 25)) Downloading cairosvg-2.9.0-py3-none-any.whl.metadata (2.7 kB) Collecting smmap<6,>=3.0.1 (from gitdb<5,>=4.0.1->gitpython==3.1.46->-r doc/requirements.txt (line 33)) Downloading smmap-5.0.3-py3-none-any.whl.metadata (4.6 kB) Collecting mdurl~=0.1 (from markdown-it-py~=3.0->myst-parser==4.0.1->-r doc/requirements.txt (line 7)) Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB) Requirement already satisfied: sphinxcontrib-applehelp in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from Sphinx>=7.1.2->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) (2.0.0) Requirement already satisfied: sphinxcontrib-devhelp in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from Sphinx>=7.1.2->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) (2.0.0) Requirement already satisfied: sphinxcontrib-jsmath in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from Sphinx>=7.1.2->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) (1.0.1) Requirement already satisfied: sphinxcontrib-htmlhelp>=2.0.0 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from Sphinx>=7.1.2->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) (2.1.0) Requirement already satisfied: sphinxcontrib-serializinghtml>=1.1.9 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from Sphinx>=7.1.2->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) (2.0.0) Requirement already satisfied: sphinxcontrib-qthelp in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from Sphinx>=7.1.2->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) (2.0.0) Requirement already satisfied: snowballstemmer>=2.2 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from Sphinx>=7.1.2->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) (3.0.1) Requirement already satisfied: babel>=2.13 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from Sphinx>=7.1.2->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) (2.18.0) Collecting alabaster~=0.7.14 (from Sphinx>=7.1.2->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) Downloading alabaster-0.7.16-py3-none-any.whl.metadata (2.9 kB) Requirement already satisfied: imagesize>=1.3 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from Sphinx>=7.1.2->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) (2.0.0) Requirement already satisfied: idna>=2.8 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from anyio>=3.0.0->watchfiles==1.1.1->-r doc/requirements.txt (line 38)) (3.13) Collecting typing_extensions>=4.5 (from anyio>=3.0.0->watchfiles==1.1.1->-r doc/requirements.txt (line 38)) Downloading typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB) Collecting cairocffi (from cairosvg>=1.0->sphinxcontrib-svg2pdfconverter[CairoSVG]==2.0.0->-r doc/requirements.txt (line 25)) Downloading cairocffi-1.7.1-py3-none-any.whl.metadata (3.3 kB) Collecting cssselect2 (from cairosvg>=1.0->sphinxcontrib-svg2pdfconverter[CairoSVG]==2.0.0->-r doc/requirements.txt (line 25)) Downloading cssselect2-0.9.0-py3-none-any.whl.metadata (2.9 kB) Collecting defusedxml (from cairosvg>=1.0->sphinxcontrib-svg2pdfconverter[CairoSVG]==2.0.0->-r doc/requirements.txt (line 25)) Downloading defusedxml-0.7.1-py2.py3-none-any.whl.metadata (32 kB) Collecting pillow (from cairosvg>=1.0->sphinxcontrib-svg2pdfconverter[CairoSVG]==2.0.0->-r doc/requirements.txt (line 25)) Downloading pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (8.8 kB) Collecting tinycss2 (from cairosvg>=1.0->sphinxcontrib-svg2pdfconverter[CairoSVG]==2.0.0->-r doc/requirements.txt (line 25)) Downloading tinycss2-1.5.1-py3-none-any.whl.metadata (3.0 kB) Requirement already satisfied: MarkupSafe>=2.0 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from jinja2->myst-parser==4.0.1->-r doc/requirements.txt (line 7)) (3.0.3) Requirement already satisfied: charset_normalizer<4,>=2 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from requests->sphinx-related-links==0.1.2->-r doc/requirements.txt (line 18)) (3.4.7) Requirement already satisfied: urllib3<3,>=1.26 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from requests->sphinx-related-links==0.1.2->-r doc/requirements.txt (line 18)) (2.6.3) Requirement already satisfied: certifi>=2023.5.7 in /home/docs/checkouts/readthedocs.org/user_builds/canonical-lxd/envs/default/lib/python3.12/site-packages (from requests->sphinx-related-links==0.1.2->-r doc/requirements.txt (line 18)) (2026.4.22) Collecting click>=7.0 (from uvicorn>=0.25->sphinx-autobuild==2025.08.25->-r doc/requirements.txt (line 8)) Downloading click-8.3.3-py3-none-any.whl.metadata (2.6 kB) Collecting h11>=0.8 (from uvicorn>=0.25->sphinx-autobuild==2025.08.25->-r doc/requirements.txt (line 8)) Downloading h11-0.16.0-py3-none-any.whl.metadata (8.3 kB) Collecting soupsieve>=1.6.1 (from beautifulsoup4->sphinx-related-links==0.1.2->-r doc/requirements.txt (line 18)) Downloading soupsieve-2.8.3-py3-none-any.whl.metadata (4.6 kB) Collecting cffi>=1.1.0 (from cairocffi->cairosvg>=1.0->sphinxcontrib-svg2pdfconverter[CairoSVG]==2.0.0->-r doc/requirements.txt (line 25)) Downloading cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.metadata (2.6 kB) Collecting pycparser (from cffi>=1.1.0->cairocffi->cairosvg>=1.0->sphinxcontrib-svg2pdfconverter[CairoSVG]==2.0.0->-r doc/requirements.txt (line 25)) Downloading pycparser-3.0-py3-none-any.whl.metadata (8.2 kB) Collecting webencodings (from cssselect2->cairosvg>=1.0->sphinxcontrib-svg2pdfconverter[CairoSVG]==2.0.0->-r doc/requirements.txt (line 25)) Downloading webencodings-0.5.1-py2.py3-none-any.whl.metadata (2.1 kB) Collecting sphinx-basic-ng>=1.0.0.beta2 (from furo->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) Downloading sphinx_basic_ng-1.0.0b2-py3-none-any.whl.metadata (1.5 kB) Collecting accessible-pygments>=0.0.5 (from furo->canonical-sphinx==0.5.1->-r doc/requirements.txt (line 4)) Downloading accessible_pygments-0.0.5-py3-none-any.whl.metadata (10 kB) Downloading canonical_sphinx-0.5.1-py3-none-any.whl (1.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 93.1 MB/s 0:00:00 Downloading myst_parser-4.0.1-py3-none-any.whl (84 kB) Downloading sphinx_autobuild-2025.8.25-py3-none-any.whl (12 kB) Downloading sphinx_design-0.7.0-py3-none-any.whl (2.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 293.6 MB/s 0:00:00 Downloading sphinx_notfound_page-1.1.0-py3-none-any.whl (8.2 kB) Downloading sphinx_reredirects-1.1.0-py3-none-any.whl (6.4 kB) Downloading sphinx_tabs-3.4.7-py3-none-any.whl (9.7 kB) Downloading sphinxcontrib_jquery-4.1-py2.py3-none-any.whl (121 kB) Downloading sphinxext_opengraph-0.13.0-py3-none-any.whl (1.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.0/1.0 MB 956.5 MB/s 0:00:00 Downloading sphinx_config_options-0.1.0-py3-none-any.whl (23 kB) Downloading sphinx_related_links-0.1.2-py3-none-any.whl (19 kB) Downloading sphinx_roles-0.1.0-py3-none-any.whl (17 kB) Downloading sphinx_terminal-1.0.3-py3-none-any.whl (20 kB) Downloading sphinx_youtube_links-0.1.0-py3-none-any.whl (17 kB) Downloading packaging-26.0-py3-none-any.whl (74 kB) Downloading sphinxcontrib_svg2pdfconverter-2.0.0-py3-none-any.whl (8.3 kB) Downloading sphinx_last_updated_by_git-0.3.8-py3-none-any.whl (8.6 kB) Downloading sphinx_sitemap-2.9.0-py3-none-any.whl (6.2 kB) Downloading vale-3.13.0.0-py3-none-any.whl (5.9 kB) Downloading gitpython-3.1.46-py3-none-any.whl (208 kB) Downloading linkify_it_py-2.0.3-py3-none-any.whl (19 kB) Downloading pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (807 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 807.9/807.9 kB 872.1 MB/s 0:00:00 Downloading sphinx_copybutton-0.5.2-py3-none-any.whl (13 kB) Downloading sphinx_remove_toctrees-1.0.0.post1-py3-none-any.whl (5.2 kB) Downloading watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (456 kB) Downloading docutils-0.21.2-py3-none-any.whl (587 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 587.4/587.4 kB 904.4 MB/s 0:00:00 Downloading gitdb-4.0.12-py3-none-any.whl (62 kB) Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB) Downloading mdit_py_plugins-0.5.0-py3-none-any.whl (57 kB) Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB) Downloading smmap-5.0.3-py3-none-any.whl (24 kB) Downloading sphinx-7.4.7-py3-none-any.whl (3.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.4/3.4 MB 486.5 MB/s 0:00:00 Downloading alabaster-0.7.16-py3-none-any.whl (13 kB) Downloading anyio-4.13.0-py3-none-any.whl (114 kB) Downloading cairosvg-2.9.0-py3-none-any.whl (45 kB) Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB) Downloading starlette-1.0.0-py3-none-any.whl (72 kB) Downloading typing_extensions-4.15.0-py3-none-any.whl (44 kB) Downloading uvicorn-0.46.0-py3-none-any.whl (70 kB) Downloading click-8.3.3-py3-none-any.whl (110 kB) Downloading h11-0.16.0-py3-none-any.whl (37 kB) Downloading websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (184 kB) Downloading beautifulsoup4-4.14.3-py3-none-any.whl (107 kB) Downloading soupsieve-2.8.3-py3-none-any.whl (37 kB) Downloading cairocffi-1.7.1-py3-none-any.whl (75 kB) Downloading cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl (219 kB) Downloading cssselect2-0.9.0-py3-none-any.whl (15 kB) Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB) Downloading furo-2025.12.19-py3-none-any.whl (339 kB) Downloading accessible_pygments-0.0.5-py3-none-any.whl (1.4 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.4/1.4 MB 980.4 MB/s 0:00:00 Downloading sphinx_basic_ng-1.0.0b2-py3-none-any.whl (22 kB) Downloading pillow-12.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (7.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.1/7.1 MB 540.7 MB/s 0:00:00 Downloading pycparser-3.0-py3-none-any.whl (48 kB) Downloading tinycss2-1.5.1-py3-none-any.whl (28 kB) Downloading webencodings-0.5.1-py2.py3-none-any.whl (11 kB) Downloading uc_micro_py-2.0.0-py3-none-any.whl (6.4 kB) Installing collected packages: webencodings, websockets, vale, uc-micro-py, typing_extensions, tinycss2, soupsieve, smmap, pyyaml, pycparser, pillow, packaging, mdurl, h11, docutils, defusedxml, colorama, click, alabaster, accessible-pygments, uvicorn, Sphinx, markdown-it-py, linkify-it-py, gitdb, cssselect2, cffi, beautifulsoup4, anyio, watchfiles, starlette, sphinxext-opengraph, sphinxcontrib-svg2pdfconverter, sphinxcontrib-jquery, sphinx-youtube-links, sphinx-tabs, sphinx-roles, sphinx-reredirects, sphinx-remove-toctrees, sphinx-related-links, sphinx-notfound-page, sphinx-last-updated-by-git, sphinx-design, sphinx-copybutton, sphinx-config-options, sphinx-basic-ng, mdit-py-plugins, gitpython, cairocffi, sphinx-terminal, sphinx-sitemap, sphinx-autobuild, myst-parser, furo, cairosvg, canonical-sphinx Attempting uninstall: packaging Found existing installation: packaging 26.2 Uninstalling packaging-26.2: Successfully uninstalled packaging-26.2 Attempting uninstall: docutils Found existing installation: docutils 0.22.4 Uninstalling docutils-0.22.4: Successfully uninstalled docutils-0.22.4 Attempting uninstall: alabaster Found existing installation: alabaster 1.0.0 Uninstalling alabaster-1.0.0: Successfully uninstalled alabaster-1.0.0 Attempting uninstall: Sphinx Found existing installation: Sphinx 9.1.0 Uninstalling Sphinx-9.1.0: Successfully uninstalled Sphinx-9.1.0 Successfully installed Sphinx-7.4.7 accessible-pygments-0.0.5 alabaster-0.7.16 anyio-4.13.0 beautifulsoup4-4.14.3 cairocffi-1.7.1 cairosvg-2.9.0 canonical-sphinx-0.5.1 cffi-2.0.0 click-8.3.3 colorama-0.4.6 cssselect2-0.9.0 defusedxml-0.7.1 docutils-0.21.2 furo-2025.12.19 gitdb-4.0.12 gitpython-3.1.46 h11-0.16.0 linkify-it-py-2.0.3 markdown-it-py-3.0.0 mdit-py-plugins-0.5.0 mdurl-0.1.2 myst-parser-4.0.1 packaging-26.0 pillow-12.2.0 pycparser-3.0 pyyaml-6.0.3 smmap-5.0.3 soupsieve-2.8.3 sphinx-autobuild-2025.8.25 sphinx-basic-ng-1.0.0b2 sphinx-config-options-0.1.0 sphinx-copybutton-0.5.2 sphinx-design-0.7.0 sphinx-last-updated-by-git-0.3.8 sphinx-notfound-page-1.1.0 sphinx-related-links-0.1.2 sphinx-remove-toctrees-1.0.0.post1 sphinx-reredirects-1.1.0 sphinx-roles-0.1.0 sphinx-sitemap-2.9.0 sphinx-tabs-3.4.7 sphinx-terminal-1.0.3 sphinx-youtube-links-0.1.0 sphinxcontrib-jquery-4.1 sphinxcontrib-svg2pdfconverter-2.0.0 sphinxext-opengraph-0.13.0 starlette-1.0.0 tinycss2-1.5.1 typing_extensions-4.15.0 uc-micro-py-2.0.0 uvicorn-0.46.0 vale-3.13.0.0 watchfiles-1.1.1 webencodings-0.5.1 websockets-16.0 [rtd-command-info] start-time: 2026-05-05T09:18:47.178135Z, end-time: 2026-05-05T09:19:12.770582Z, duration: 25, exit-code: 0 go build -ldflags "-s -w" -o trimpath -o lxc.bin ./lxc go: downloading go1.25.8 (linux/amd64) go: downloading github.com/google/uuid v1.6.0 go: downloading github.com/mitchellh/mapstructure v1.5.0 go: downloading github.com/sirupsen/logrus v1.9.4 go: downloading github.com/gorilla/websocket v1.5.1 go: downloading github.com/spf13/cobra v1.10.2 go: downloading go.yaml.in/yaml/v2 v2.4.4 go: downloading golang.org/x/crypto v0.50.0 go: downloading golang.org/x/sys v0.43.0 go: downloading golang.org/x/term v0.42.0 go: downloading github.com/zitadel/oidc/v3 v3.47.5 go: downloading github.com/fvbommel/sortorder v1.1.0 go: downloading github.com/olekukonko/tablewriter v0.0.5 go: downloading github.com/gosexy/gettext v0.0.0-20160830220431-74466a0a0c4a go: downloading github.com/flosch/pongo2 v0.0.0-20200913210552-0d938eb266f3 go: downloading github.com/pkg/xattr v0.4.12 go: downloading github.com/pkg/sftp v1.13.10 go: downloading golang.org/x/oauth2 v0.36.0 go: downloading golang.org/x/text v0.36.0 go: downloading golang.org/x/net v0.53.0 go: downloading github.com/spf13/pflag v1.0.10 go: downloading github.com/cpuguy83/go-md2man/v2 v2.0.7 go: downloading go.yaml.in/yaml/v3 v3.0.4 go: downloading github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 go: downloading github.com/robfig/cron/v3 v3.0.1 go: downloading github.com/mattn/go-runewidth v0.0.21 go: downloading github.com/go-jose/go-jose/v4 v4.1.4 go: downloading github.com/muhlemmer/gu v0.3.1 go: downloading github.com/zitadel/schema v1.3.2 go: downloading github.com/zitadel/logging v0.7.0 go: downloading github.com/gorilla/securecookie v1.1.2 go: downloading github.com/kr/fs v0.1.0 go: downloading github.com/russross/blackfriday/v2 v2.1.0 go: downloading github.com/clipperhouse/uax29/v2 v2.7.0 go: downloading go.opentelemetry.io/otel v1.43.0 go: downloading go.opentelemetry.io/otel/trace v1.43.0 go: downloading go.opentelemetry.io/otel/metric v1.43.0 go: downloading github.com/go-logr/logr v1.4.3 go: downloading github.com/go-logr/stdr v1.2.2 go: downloading go.opentelemetry.io/auto/sdk v1.2.1 go: downloading github.com/cespare/xxhash/v2 v2.3.0 [rtd-command-info] start-time: 2026-05-05T09:19:12.849786Z, end-time: 2026-05-05T09:19:12.889199Z, duration: 0, exit-code: 0 cat doc/conf.py import datetime import os import yaml ############################ # LXD custom initializations # ############################ import sys import subprocess from git import Repo, InvalidGitRepositoryError import filecmp import ast import re sys.path.insert(0, os.path.abspath('.')) from redirects import redirects sys.path.append('.sphinx/') # Set global version variable used in objects.inv to numeric version defined in flex.go with open("../shared/version/flex.go") as fd: match = re.search(r'var Version = "([^"]+)"', fd.read()) version = match.group(1) if match else "unknown" ####################### # Project information # ####################### # Project name project = 'LXD' author = 'LXD contributors' # Sidebar documentation title; best kept reasonably short # To disable the title, set to an empty string. html_title = project + ' documentation ' + version # Copyright string; shown at the bottom of the page copyright = '2014-%s AGPL-3.0, %s' % (datetime.date.today().year, author) # Documentation website URL # Use RTD canonical URL to ensure duplicate pages have a single canonical URL # that includes the version (such as /latest/); helps SEO. # See: https://docs.readthedocs.com/platform/stable/canonical-urls.html and # https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_baseurl # Second argument is for local builds where READTHEDOCS_CANONICAL_URL is not available html_baseurl = os.environ.get('READTHEDOCS_CANONICAL_URL', '/') # NOTE: The Open Graph Protocol (OGP) enhances page display in a social graph # and is used by social media platforms; see https://ogp.me/ ogp_site_url = html_baseurl # Preview name of the documentation website ogp_site_name = html_title # Preview image URL ogp_image = 'https://documentation.ubuntu.com/lxd/stable-5.21/_static/lxd_tag.png' # Product favicon; shown in bookmarks, browser tabs, etc. html_favicon = '_static/favicon.ico' # Dictionary of values to pass into the Sphinx context for all pages: # https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-html_context html_context = { # Product page URL; can be different from product docs URL 'product_page': 'canonical.com/lxd', # Product tag image; the orange part of your logo, shown in the page header 'product_tag': '_static/lxd_tag.png', # Your Discourse instance URL # NOTE: If set, adding ':discourse: 123' to an .rst file # will add a link to Discourse topic 123 at the bottom of the page. 'discourse': 'https://discourse.ubuntu.com/c/lxd/', # LXD docs refer to two different Discourse instances 'discourse_prefix': { 'ubuntu': 'https://discourse.ubuntu.com/t/', 'lxc': 'https://discuss.linuxcontainers.org/t/' }, # Your Mattermost channel URL 'mattermost': '', # Your Matrix channel URL 'matrix': 'https://matrix.to/#/#documentation:ubuntu.com', # Your documentation GitHub repository URL # NOTE: If set, links for viewing the documentation source files # and creating GitHub issues are added at the bottom of each page. 'github_url': 'https://github.com/canonical/lxd', # Docs branch in the repo; used in links for viewing the source files 'repo_default_branch': 'main', # Docs location in the repo; used in links for viewing the source files 'repo_folder': '/doc/', # Enables the Previous / Next buttons at the bottom of pages # NOTE: Valid options are none, prev, next, both 'sequential_nav': 'both', # Enables listing contributors on individual pages # This feature is deprecated and will be removed in the future 'display_contributors': False, # Required for feedback button 'github_issues': 'enabled', } html_extra_path = ['_extra'] # Enables the pencil icon to edit pages on GitHub, shown at the top of each page html_theme_options = { 'source_edit_link': html_context['github_url'] } # Project slug # Required if your project is hosted on documentation.ubuntu.com slug = 'lxd' ####################### # Sitemap configuration: https://sphinx-sitemap.readthedocs.io/ ####################### # sphinx-sitemap uses html_baseurl (set earlier in this file) to generate the full URL for each page: sitemap_url_scheme = '{link}' # Include `lastmod` dates in the sitemap: sitemap_show_lastmod = True # Exclude generated pages from the sitemap: sitemap_excludes = [ '404/', 'genindex/', 'search/', ] # TODO: Add more pages to sitemap_excludes if needed. Wildcards are supported. # For example, to exclude module pages generated by autodoc, add '_modules/*'. ####################### # Template and asset locations ####################### html_static_path = ['_static'] templates_path = ['_templates'] ############# # Redirects # ############# # To set up redirects in the Read the Docs project dashboard: # https://docs.readthedocs.io/en/stable/guides/redirects.html # redirects = {} # NOTE: The above line is commented out because LXD imports redirects from redirects.py # instead of setting it here ########################### # Link checker exceptions # ########################### # A regex list of URLs that are ignored by 'make linkcheck' # Always ignore these links linkcheck_ignore = [ r"https?://localhost.*", r"https?://127\.0\.0\.1.*", r"^/.*/api/", # These links often/always fail both locally and in GitHub CI r"https://ceph\.io.*", r"https://.*\.sourceforge\.net.*", r"https://www\.gnu\.org.*", # These links often fail due to infra issues r"https://.*\.canonical\.com.*", r"https://snapcraft\.io.*", r"https://ubuntu\.com.*", r"https://.*\.launchpad\.net.*", # Ignore so that we can link change log in release notes before a release is ready r"https://github\.com/canonical/lxd/compare.*", r'https://kubernetes\.io/.*', ] # Ignore these links in GitHub CI due to site restrictions causing failures # In local checks, they are not ignored and should pass if os.environ.get('CI') == 'true': linkcheck_ignore.extend([ r"https://www\.hpe\.com.*", r"https://www\.schlachter\.tech.*", r"https://www\.dell\.com.*", ]) # Pages on which to ignore anchors # (This list will be appended to linkcheck_anchors_ignore_for_url) linkcheck_anchors_ignore_for_url = [ r'https://github\.com/.*', r'https://snapcraft\.io/docs/.*', 'https://docs.docker.com/network/packet-filtering-firewalls/', 'https://maas.io/docs/how-to-manage-machines', 'https://web.libera.chat' ] linkcheck_exclude_documents = [r'.*/manpages/.*'] # Increase linkcheck rate limit timeout max; default when unset is 300 # https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-linkcheck_timeout linkcheck_rate_limit_timeout = 600 # Increase linkcheck retries; default when unset is 1 # https://www.sphinx-doc.org/en/master/usage/configuration.html#confval-linkcheck_retries linkcheck_retries = 3 ######################## # Configuration extras # ######################## extensions = [ 'canonical_sphinx', 'notfound.extension', 'sphinx_design', 'sphinx_reredirects', 'sphinx_tabs.tabs', 'sphinxcontrib.jquery', 'sphinxext.opengraph', 'sphinx_config_options', 'sphinx_related_links', 'sphinx_roles', 'sphinx_terminal', 'sphinx_youtube_links', 'sphinxcontrib.cairosvgconverter', 'sphinx_last_updated_by_git', 'sphinx.ext.intersphinx', 'sphinx_sitemap', 'sphinx_remove_toctrees', 'myst_parser', ] # Additional MyST syntax myst_enable_extensions = { 'substitution', 'deflist', 'linkify', 'attrs_block', } # Exclude from processing exclude_patterns = [ 'html', 'README.md', 'config_options_cheat_sheet.md' ] # Adds custom CSS files, located under 'html_static_path' html_css_files = [ 'lxd_custom.css', 'cookie-banner.css', ] # Adds custom JavaScript files, located under 'html_static_path' html_js_files = ['js/bundle.js'] # Feedback button at the top; enabled by default # To disable the button, uncomment the line below: # disable_feedback_button = True # Specifies a reST snippet to be prepended to each .rst file # Defines a :center: role that centers table cell content. # Defines a :h2: role that styles content for use with PDF generation. # Defines woke-ignore and vale-ignore roles that can be used to mark content to be # ignored by vale and woke checks rst_prolog = """ .. role:: center :class: align-center .. role:: h2 :class: hclass2 .. role:: woke-ignore :class: woke-ignore .. role:: vale-ignore :class: vale-ignore """ ############################################################ ### Misc LXD custom configuration ############################################################ # Use custom 404 page text notfound_context = { 'title': 'Page not found', 'body': '

Page not found

\n\n

Sorry, but the documentation page that you are looking for was not found.

\n\n

Documentation changes over time, and pages are moved around. We try to redirect you to the updated content where possible, but unfortunately, that didn\'t work this time (maybe because the content you were looking for does not exist in this version of the documentation).

\n

You can try to use the navigation to locate the content you\'re looking for, or search for a similar page.

\n', } # Prevents making links from URLs that do not start with a protocol myst_linkify_fuzzy_links = False # Auto-generate HTML anchors down to heading level 7 # https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#auto-generated-header-anchors myst_heading_anchors = 7 if os.path.exists('./substitutions.yaml'): with open('./substitutions.yaml', 'r') as fd: myst_substitutions = yaml.safe_load(fd.read()) if os.path.exists('./related_topics.yaml'): with open('./related_topics.yaml', 'r') as fd: myst_substitutions.update(yaml.safe_load(fd.read())) # Add configuration for intersphinx mapping intersphinx_mapping = { 'cloud-init': ('https://cloudinit.readthedocs.io/en/latest/', None), 'imagebuilder': ('https://canonical-lxd-imagebuilder.readthedocs-hosted.com/en/latest/', None), 'snap': ('https://snapcraft.io/docs/', None), } if ('LOCAL_SPHINX_BUILD' in os.environ) and (os.environ['LOCAL_SPHINX_BUILD'] == 'True'): swagger_url_scheme = '/api/#{{path}}' else: swagger_url_scheme = '/lxd/stable-5.21/api/#{{path}}' myst_url_schemes = { 'http': None, 'https': None, 'swagger': swagger_url_scheme, } remove_from_toctrees = ['reference/manpages/lxc/*.md'] # Download and link swagger-ui files if not os.path.isdir('.sphinx/deps/swagger-ui'): Repo.clone_from('https://github.com/swagger-api/swagger-ui', '.sphinx/deps/swagger-ui', depth=1) os.makedirs('_static/swagger-ui/', exist_ok=True) if not os.path.islink('_static/swagger-ui/swagger-ui-bundle.js'): os.symlink('../../.sphinx/deps/swagger-ui/dist/swagger-ui-bundle.js', '_static/swagger-ui/swagger-ui-bundle.js') if not os.path.islink('_static/swagger-ui/swagger-ui-standalone-preset.js'): os.symlink('../../.sphinx/deps/swagger-ui/dist/swagger-ui-standalone-preset.js', '_static/swagger-ui/swagger-ui-standalone-preset.js') if not os.path.islink('_static/swagger-ui/swagger-ui.css'): os.symlink('../../.sphinx/deps/swagger-ui/dist/swagger-ui.css', '_static/swagger-ui/swagger-ui.css') ### MAN PAGES ### # Find path to lxc client (different for local builds and on RTD) if ('LOCAL_SPHINX_BUILD' in os.environ and os.environ['LOCAL_SPHINX_BUILD'] == 'True'): path = str(subprocess.check_output(['go', 'env', 'GOPATH'], encoding='utf-8').strip()) lxc = os.path.join(path, 'bin', 'lxc') if os.path.isfile(lxc): print('Using ' + lxc + ' to generate man pages.') else: print('Cannot find lxc in ' + lxc) exit(2) else: lxc = '../lxc.bin' # Generate man pages content os.makedirs('.sphinx/deps/manpages', exist_ok=True) if (os.path.isfile(lxc)): subprocess.run([lxc, 'manpage', '.sphinx/deps/manpages/', '--format=md'], check=True) else: print('No man page content generated.') # Preprocess man pages content for page in [x for x in os.listdir('.sphinx/deps/manpages') if os.path.isfile(os.path.join('.sphinx/deps/manpages/', x))]: # replace underscores with slashes to create a directory structure pagepath = page.replace('_', '/') # for each generated page, add an anchor, fix the title, and adjust the # heading levels with open(os.path.join('.sphinx/deps/manpages/', page), 'r') as mdfile: content = mdfile.readlines() os.makedirs(os.path.dirname(os.path.join('.sphinx/deps/manpages/', pagepath)), exist_ok=True) with open(os.path.join('.sphinx/deps/manpages/', pagepath), 'w') as mdfile: mdfile.write('(' + page + ')=\n') for line in content: if line.startswith('###### Auto generated'): continue elif line.startswith('## '): mdfile.write('# `' + line[3:].rstrip() + '`\n') elif line.startswith('##'): mdfile.write(line[1:]) else: mdfile.write(line) # remove the input page (unless the file path doesn't change) if '_' in page: os.remove(os.path.join('.sphinx/deps/manpages/', page)) # Complete and copy man pages content for folder, subfolders, files in os.walk('.sphinx/deps/manpages'): # for each subfolder, add toctrees to the parent page that # include the subpages for subfolder in subfolders: with open(os.path.join(folder, subfolder + '.md'), 'a') as parent: parent.write('```{toctree}\n:titlesonly:\n:glob:\n:hidden:\n\n' + subfolder + '/*\n```\n') # for each file, if the content is different to what has been generated # before, copy the file to the reference/manpages folder # (copying all would mess up the incremental build) for f in files: sourcefile = os.path.join(folder, f) targetfile = os.path.join('reference/manpages/', os.path.relpath(folder, '.sphinx/deps/manpages'), f) if (not os.path.isfile(targetfile) or not filecmp.cmp(sourcefile, targetfile, shallow=False)): os.makedirs(os.path.dirname(targetfile), exist_ok=True) os.system('cp ' + sourcefile + ' ' + targetfile) ### End MAN PAGES ### ############################################################ ### Custom PDF/LaTeX configuration ############################################################ # Use LXD's custom LaTeX template because the one from canonical-sphinx introduces # a bug with white-on-white text on most pages with open(".sphinx/latex_elements_template.txt", "rt") as file: latex_config = file.read() latex_elements = ast.literal_eval(latex_config.replace("$PROJECT", project)) [rtd-command-info] start-time: None, end-time: None, duration: None, exit-code: None python -m sphinx -T -W --keep-going -b dirhtml -d _build/doctrees -D language=en . $READTHEDOCS_OUTPUT/html