nginx-proxy-manager icon indicating copy to clipboard operation
nginx-proxy-manager copied to clipboard

Building wheel for certbot-dns-multi (pyproject.toml) did not run successfully.

Open Dennis864 opened this issue 9 months ago • 8 comments

Checklist

  • Have you pulled and found the error with jc21/nginx-proxy-manager:latest docker image?
    • Yes
  • Are you sure you're not using someone else's docker image?
    • Yes
  • Have you searched for similar issues (both open and closed)?
    • Yes

Describe the bug Starting nginx proxy manager on my debian running in docker works fine. Has 10 proxy host and 1 certificate requested via DNSMulti ipv64. When i try to copy my complete configuration files to my raspberry pi, also running it in docker i get an error during start which seems to be related to the DNSMulti configuration of the certificate. Starting blank works fine, but with my configuration copied i get the following error during start. The same applies when requesting a new certificate right after a fresh start of the container without configuration.

Log: nginxproxymanager-app-1 | [3/2/2025] [12:45:57 AM] [Certbot ] › ▶ start Installing dnsmulti... nginxproxymanager-app-1 | [3/2/2025] [12:45:57 AM] [Global ] › ⬤ debug CMD: . /opt/certbot/bin/activate && pip install --no-cache-dir certbot-dns-multi~=4.9 && deactivate nginxproxymanager-app-1 | [3/2/2025] [12:46:08 AM] [Certbot ] › ✖ error error: subprocess-exited-with-error nginxproxymanager-app-1 |
nginxproxymanager-app-1 | × Building wheel for certbot-dns-multi (pyproject.toml) did not run successfully. nginxproxymanager-app-1 | │ exit code: 1 nginxproxymanager-app-1 | ╰─> [27 lines of output] nginxproxymanager-app-1 | running bdist_wheel nginxproxymanager-app-1 | running build nginxproxymanager-app-1 | running build_py nginxproxymanager-app-1 | creating build/lib.linux-aarch64-cpython-311/certbot_dns_multi nginxproxymanager-app-1 | copying certbot_dns_multi/_version.py -> build/lib.linux-aarch64-cpython-311/certbot_dns_multi nginxproxymanager-app-1 | copying certbot_dns_multi/init.py -> build/lib.linux-aarch64-cpython-311/certbot_dns_multi nginxproxymanager-app-1 | creating build/lib.linux-aarch64-cpython-311/certbot_dns_multi/_internal nginxproxymanager-app-1 | copying certbot_dns_multi/_internal/dns_multi.py -> build/lib.linux-aarch64-cpython-311/certbot_dns_multi/_internal nginxproxymanager-app-1 | running egg_info nginxproxymanager-app-1 | writing certbot_dns_multi.egg-info/PKG-INFO nginxproxymanager-app-1 | writing dependency_links to certbot_dns_multi.egg-info/dependency_links.txt nginxproxymanager-app-1 | writing entry points to certbot_dns_multi.egg-info/entry_points.txt nginxproxymanager-app-1 | writing requirements to certbot_dns_multi.egg-info/requires.txt nginxproxymanager-app-1 | writing top-level names to certbot_dns_multi.egg-info/top_level.txt nginxproxymanager-app-1 | ERROR setuptools_scm._file_finders.git listing git files failed - pretending there aren't any nginxproxymanager-app-1 | reading manifest file 'certbot_dns_multi.egg-info/SOURCES.txt' nginxproxymanager-app-1 | reading manifest template 'MANIFEST.in' nginxproxymanager-app-1 | adding license file 'LICENSE.txt' nginxproxymanager-app-1 | writing manifest file 'certbot_dns_multi.egg-info/SOURCES.txt' nginxproxymanager-app-1 | creating build/lib.linux-aarch64-cpython-311/certbot_dns_multi/_internal/bridge nginxproxymanager-app-1 | copying certbot_dns_multi/_internal/bridge/go.mod -> build/lib.linux-aarch64-cpython-311/certbot_dns_multi/_internal/bridge nginxproxymanager-app-1 | copying certbot_dns_multi/_internal/bridge/go.sum -> build/lib.linux-aarch64-cpython-311/certbot_dns_multi/_internal/bridge nginxproxymanager-app-1 | copying certbot_dns_multi/_internal/bridge/main.c -> build/lib.linux-aarch64-cpython-311/certbot_dns_multi/_internal/bridge nginxproxymanager-app-1 | copying certbot_dns_multi/_internal/bridge/main.go -> build/lib.linux-aarch64-cpython-311/certbot_dns_multi/_internal/bridge nginxproxymanager-app-1 | running build_ext nginxproxymanager-app-1 | $ GOPATH=/tmp/tmphqs553fi go get -d nginxproxymanager-app-1 | error: [Errno 2] No such file or directory: 'go' nginxproxymanager-app-1 | [end of output] nginxproxymanager-app-1 |
nginxproxymanager-app-1 | note: This error originates from a subprocess, and is likely not a problem with pip. nginxproxymanager-app-1 | ERROR: Failed building wheel for certbot-dns-multi nginxproxymanager-app-1 |
nginxproxymanager-app-1 | [notice] A new release of pip is available: 24.3.1 -> 25.0.1 nginxproxymanager-app-1 | [notice] To update, run: pip install --upgrade pip nginxproxymanager-app-1 | ERROR: ERROR: Failed to build installable wheels for some pyproject.toml based projects (certbot-dns-multi) nginxproxymanager-app-1 | nginxproxymanager-app-1 | [3/2/2025] [12:46:08 AM] [Global ] › ✖ error Some plugins failed to install. Please check the logs above CommandError: Some plugins failed to install. Please check the logs above nginxproxymanager-app-1 | at /app/lib/certbot.js:39:14 nginxproxymanager-app-1 | at Immediate. (/app/node_modules/batchflow/lib/batchflow.js:80:9) nginxproxymanager-app-1 | at process.processImmediate (node:internal/timers:483:21) { nginxproxymanager-app-1 | previous: undefined, nginxproxymanager-app-1 | code: 1, nginxproxymanager-app-1 | public: false nginxproxymanager-app-1 | } nginxproxymanager-app-1 | [3/2/2025] [12:46:09 AM] [Migrate ] › ℹ info Current database version: none nginxproxymanager-app-1 | [3/2/2025] [12:46:09 AM] [Global ] › ⬤ debug CMD: [ -f '/etc/letsencrypt/credentials/credentials-1' ] || { mkdir -p /etc/letsencrypt/credentials 2> /dev/null; echo 'dns_multi_provider = ipv64

Nginx Proxy Manager Version v2.12.3

To Reproduce Steps to reproduce the behavior:

  1. Go to 'SSL Certificates'
  2. Click on 'Add SSL Certificate'
  3. Click on 'Lets encrypt'
  4. Enter domain
  5. Click on 'Use a dns challenge'
  6. Choose 'DNSMulti' provider
  7. Use following config: 'https://go-acme.github.io/lego/dns/ipv64/index.html'
  8. Click on save

Expected behavior Normal start without errors after copying my configuration or at least no problems when requesting a new one as described in "to reproduce".

Operating System Raspberry pi 4, 4GB RAM, 64GB SD Card,

Raspberry Pi OS: PRETTY_NAME="Debian GNU/Linux 12 (bookworm)" NAME="Debian GNU/Linux" VERSION_ID="12" VERSION="12 (bookworm)" VERSION_CODENAME=bookworm

Docker: Client: Docker Engine - Community Version: 28.0.1 API version: 1.48 Go version: go1.23.6 Git commit: 068a01e Built: Wed Feb 26 10:40:57 2025 OS/Arch: linux/arm64 Context: default

Server: Docker Engine - Community Engine: Version: 28.0.1 API version: 1.48 (minimum version 1.24) Go version: go1.23.6 Git commit: bbd0a17 Built: Wed Feb 26 10:40:57 2025 OS/Arch: linux/arm64 Experimental: false containerd: Version: 1.7.25 GitCommit: bcc810d6b9066471b0b6fa75f557a15a1cbf31bb runc: Version: 1.2.4 GitCommit: v1.2.4-0-g6c52b3f docker-init: Version: 0.19.0 GitCommit: de40ad0

Dennis864 avatar Mar 02 '25 01:03 Dennis864

For anyone with the same issue on Raspberry Pi (OS) or arm64. I am using the following workaround, which works for me. Create and use a Dockerfile to startup nginx with the following content:

FROM docker.io/jc21/nginx-proxy-manager:latest

RUN apt-get update && apt-get install -y wget curl python3-dev
RUN wget https://go.dev/dl/go1.22.1.linux-arm64.tar.gz
RUN tar -C /usr/local -xzf go1.22.1.linux-arm64.tar.gz
RUN rm go1.22.1.linux-arm64.tar.gz
ENV PATH="/usr/local/go/bin:${PATH}"

The issue seems to be that neither go, nor python3 is installed in the image which this Dockerfile solves. The issuance of an certificate took a very long time for me, so be patient. Probably because of the very long installation time of the certbot dns multi plugin.

Dennis864 avatar Mar 03 '25 22:03 Dennis864

For anyone with the same issue on Raspberry Pi (OS) or arm64. I am using the following workaround, which works for me. Create and use a Dockerfile to startup nginx with the following content:

FROM docker.io/jc21/nginx-proxy-manager:latest

RUN apt-get update && apt-get install -y wget curl python3-dev
RUN wget https://go.dev/dl/go1.22.1.linux-arm64.tar.gz
RUN tar -C /usr/local -xzf go1.22.1.linux-arm64.tar.gz
RUN rm go1.22.1.linux-arm64.tar.gz
ENV PATH="/usr/local/go/bin:${PATH}"

The issue seems to be that neither go, nor python3 is installed in the image which this Dockerfile solves. The issuance of an certificate took a very long time for me, so be patient. Probably because of the very long installation time of the certbot dns multi plugin.

I can confirm that your solution is working on a RPI4. Thanks a lot!

rarnken avatar Mar 04 '25 09:03 rarnken

For anyone with the same issue on Raspberry Pi (OS) or arm64. I am using the following workaround, which works for me. Create and use a Dockerfile to startup nginx with the following content:

FROM docker.io/jc21/nginx-proxy-manager:latest

RUN apt-get update && apt-get install -y wget curl python3-dev
RUN wget https://go.dev/dl/go1.22.1.linux-arm64.tar.gz
RUN tar -C /usr/local -xzf go1.22.1.linux-arm64.tar.gz
RUN rm go1.22.1.linux-arm64.tar.gz
ENV PATH="/usr/local/go/bin:${PATH}"

The issue seems to be that neither go, nor python3 is installed in the image which this Dockerfile solves. The issuance of an certificate took a very long time for me, so be patient. Probably because of the very long installation time of the certbot dns multi plugin.

Did not work for me. I still get the go error unfortunately.

Alby407 avatar Jul 01 '25 00:07 Alby407

the issue is still existing =(

CommandError:   error: subprocess-exited-with-error
  
  × Building wheel for certbot-dns-multi (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [48 lines of output]
      /tmp/pip-build-env-fsi589he/overlay/lib/python3.11/site-packages/_distutils_hack/__init__.py:53: UserWarning: Reliance on distutils from stdlib is deprecated. Users must rely on setuptools to provide the distutils module. Avoid importing distutils or import setuptools first, and avoid setting SETUPTOOLS_USE_DISTUTILS=stdlib. Register concerns at https://github.com/pypa/setuptools/issues/new?template=distutils-deprecation.yml
        warnings.warn(
      /tmp/pip-build-env-fsi589he/overlay/lib/python3.11/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated
      !!
      
              ********************************************************************************
              Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).
      
              By 2026-Feb-18, you need to update your project and remove deprecated calls
              or your builds will no longer be supported.
      
              See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
              ********************************************************************************
      
      !!
        corresp(dist, value, root_dir)
      pip_system_certs: ERROR: truststore not available
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-aarch64-3.11
      creating build/lib.linux-aarch64-3.11/certbot_dns_multi
      copying certbot_dns_multi/_version.py -> build/lib.linux-aarch64-3.11/certbot_dns_multi
      copying certbot_dns_multi/__init__.py -> build/lib.linux-aarch64-3.11/certbot_dns_multi
      package init file 'certbot_dns_multi/_internal/__init__.py' not found (or not a regular file)
      creating build/lib.linux-aarch64-3.11/certbot_dns_multi/_internal
      copying certbot_dns_multi/_internal/dns_multi.py -> build/lib.linux-aarch64-3.11/certbot_dns_multi/_internal
      package init file 'certbot_dns_multi/_internal/bridge/__init__.py' not found (or not a regular file)
      running egg_info
      writing certbot_dns_multi.egg-info/PKG-INFO
      writing dependency_links to certbot_dns_multi.egg-info/dependency_links.txt
      writing entry points to certbot_dns_multi.egg-info/entry_points.txt
      writing requirements to certbot_dns_multi.egg-info/requires.txt
      writing top-level names to certbot_dns_multi.egg-info/top_level.txt
      ERROR setuptools_scm._file_finders.git listing git files failed - pretending there aren't any
      reading manifest file 'certbot_dns_multi.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      adding license file 'LICENSE.txt'
      writing manifest file 'certbot_dns_multi.egg-info/SOURCES.txt'
      creating build/lib.linux-aarch64-3.11/certbot_dns_multi/_internal/bridge
      copying certbot_dns_multi/_internal/bridge/go.mod -> build/lib.linux-aarch64-3.11/certbot_dns_multi/_internal/bridge
      copying certbot_dns_multi/_internal/bridge/go.sum -> build/lib.linux-aarch64-3.11/certbot_dns_multi/_internal/bridge
      copying certbot_dns_multi/_internal/bridge/main.c -> build/lib.linux-aarch64-3.11/certbot_dns_multi/_internal/bridge
      copying certbot_dns_multi/_internal/bridge/main.go -> build/lib.linux-aarch64-3.11/certbot_dns_multi/_internal/bridge
      running build_ext
      $ GOPATH=/tmp/tmpsquk296x go get -d
      error: [Errno 2] No such file or directory: 'go'
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for certbot-dns-multi
ERROR: Failed to build installable wheels for some pyproject.toml based projects (certbot-dns-multi)

    at /app/lib/utils.js:16:13
    at ChildProcess.exithandler (node:child_process:430:5)
    at ChildProcess.emit (node:events:524:28)
    at maybeClose (node:internal/child_process:1104:16)
    at ChildProcess._handle.onexit (node:internal/child_process:304:5)

lastsamurai26 avatar Jul 23 '25 12:07 lastsamurai26

having the same with dns_multi_provider = ipv64

AlexKusnezov avatar Aug 18 '25 15:08 AlexKusnezov

Issue #4529 appears to be the same.

The solution from https://github.com/NginxProxyManager/nginx-proxy-manager/issues/4408#issuecomment-2695752968 is in principle still working but requires a more recent version of the Go compiler (https://go.dev/dl/go1.24.5.linux-arm64.tar.gz worked for me).

suhlatwork avatar Aug 28 '25 19:08 suhlatwork

https://v64.tech/t/nginx-proxy-manager-dnschallenge-ipv64-debian-13-fail/4177/7

mathiaslehmann avatar Nov 09 '25 22:11 mathiaslehmann

https://v64.tech/t/nginx-proxy-manager-dnschallenge-ipv64-debian-13-fail/4177/7

Seems GoLang does not come preinstalled on the nginx image. The steps described here were the solution! 🎉 Keep in mind to increase resources like RAM and CPU temporarily.

apt install golang
pip install --no-build-isolation --no-cache-dir certbot-dns-multi

kenetrix avatar Nov 20 '25 21:11 kenetrix