Getting issue while installing openwisp

Open
#4,750 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
25/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
python
Domain
build-system

Research direction

Start with the reported Ansible reproduction using hosts, playbook.yml, and the ansible-playbook command, then inspect the failed installation of Pillow 9.1.1 under Python 3.12. Confirm whether the setuptools build-environment error can be reproduced and determine what change would allow the openwisp-controller dependency installation to complete.

Written by the indexing model from the issue text.

Description

downstream Needs Triage
setuptools version

68.1.2

Python version

3.12

OS

Ubuntu 24.4

Additional environment information

No response

Description

TASK [openwisp.openwisp2 : Install openwisp2 controller and its dependencies] *******************************************************************************
FAILED - RETRYING: [192.168.144.170]: Install openwisp2 controller and its dependencies (5 retries left).
FAILED - RETRYING: [192.168.144.170]: Install openwisp2 controller and its dependencies (4 retries left).
FAILED - RETRYING: [192.168.144.170]: Install openwisp2 controller and its dependencies (3 retries left).
FAILED - RETRYING: [192.168.144.170]: Install openwisp2 controller and its dependencies (2 retries left).
FAILED - RETRYING: [192.168.144.170]: Install openwisp2 controller and its dependencies (1 retries left).
fatal: [192.168.144.170]: FAILED! => {"attempts": 5, "changed": false, "cmd": ["/opt/openwisp2/env/bin/pip3", "install", "-U", "openwisp-controller~=1.0.1", "service_identity"], "msg": "stdout: Collecting openwisp-controller~=1.0.1\n Using cached openwisp_controller-1.0.3-py2.py3-none-any.whl.metadata (139 kB)\nCollecting service_identity\n Using cached service_identity-24.2.0-py3-none-any.whl.metadata (5.1 kB)\nCollecting django-sortedm2m~=3.1.1 (from openwisp-controller~=1.0.1)\n Using cached django_sortedm2m-3.1.1-py2.py3-none-any.whl.metadata (19 kB)\nCollecting django-reversion~=4.0.1 (from openwisp-controller~=1.0.1)\n Using cached django_reversion-4.0.2-py3-none-any.whl.metadata (3.6 kB)\nCollecting django-x509~=1.1.0 (from openwisp-controller~=1.0.1)\n Using cached django_x509-1.1-py2.py3-none-any.whl.metadata (19 kB)\nCollecting django-taggit~=2.1.0 (from openwisp-controller~=1.0.1)\n Using cached django_taggit-2.1.0-py3-none-any.whl.metadata (3.5 kB)\nCollecting django-loci~=1.0.1 (from openwisp-controller~=1.0.1)\n Using cached django_loci-1.0.1-py2.py3-none-any.whl.metadata (16 kB)\nCollecting django-flat-json-widget~=0.2.0 (from openwisp-controller~=1.0.1)\n Using cached django_flat_json_widget-0.2-py2.py3-none-any.whl.metadata (5.1 kB)\nCollecting openwisp-utils~=1.0.1 (from openwisp-utils[rest]=1.0.1->openwisp-controller=1.0.1)\n Using cached openwisp_utils-1.0.5-py2.py3-none-any.whl.metadata (63 kB)\nCollecting netjsonconfig~=1.0.1 (from openwisp-controller~=1.0.1)\n Using cached netjsonconfig-1.0.2-py2.py3-none-any.whl.metadata (3.8 kB)\nCollecting openwisp-users~=1.0.0 (from openwisp-controller~=1.0.1)\n Using cached openwisp_users-1.0.2-py2.py3-none-any.whl.metadata (44 kB)\nCollecting openwisp-notifications~=1.0.0 (from openwisp-controller~=1.0.1)\n Using cached openwisp_notifications-1.0.3-py2.py3-none-any.whl.metadata (55 kB)\nCollecting openwisp-ipam~=1.0.0 (from openwisp-controller~=1.0.1)\n Using cached openwisp_ipam-1.0-py2.py3-none-any.whl.metadata (24 kB)\nCollecting djangorestframework-gis~=0.18.0 (from openwisp-controller~=1.0.1)\n Using cached djangorestframework_gis-0.18-py2.py3-none-any.whl.metadata (29 kB)\nCollecting paramiko~=2.10.3 (from paramiko[ed25519]=2.10.3->openwisp-controller=1.0.1)\n Using cached paramiko-2.10.6-py2.py3-none-any.whl.metadata (4.6 kB)\nCollecting scp~=0.14.2 (from openwisp-controller~=1.0.1)\n Using cached scp-0.14.5-py2.py3-none-any.whl.metadata (4.3 kB)\nCollecting celery~=5.2.3 (from openwisp-controller~=1.0.1)\n Using cached celery-5.2.7-py3-none-any.whl.metadata (20 kB)\nCollecting django-cache-memoize~=0.1 (from openwisp-controller~=1.0.1)\n Using cached django_cache_memoize-0.2.0-py3-none-any.whl.metadata (15 kB)\nCollecting shortuuid~=1.0.1 (from openwisp-controller~=1.0.1)\n Using cached shortuuid-1.0.13-py3-none-any.whl.metadata (5.8 kB)\nRequirement already satisfied: netaddr~=0.8.0 in /usr/lib/python3/dist-packages (from openwisp-controller~=1.0.1) (0.8.0)\nRequirement already satisfied: attrs>=19.1.0 in /opt/openwisp2/env/lib/python3.12/site-packages (from service_identity) (24.2.0)\nRequirement already satisfied: cryptography in /usr/lib/python3/dist-packages (from service_identity) (41.0.7)\nCollecting pyasn1 (from service_identity)\n Using cached pyasn1-0.6.1-py3-none-any.whl.metadata (8.4 kB)\nCollecting pyasn1-modules (from service_identity)\n Using cached pyasn1_modules-0.4.1-py3-none-any.whl.metadata (3.5 kB)\nRequirement already satisfied: pytz>=2021.3 in /usr/lib/python3/dist-packages (from celery~=5.2.3->openwisp-controller~=1.0.1) (2024.1)\nCollecting billiard<4.0,>=3.6.4.0 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n Using cached billiard-3.6.4.0-py3-none-any.whl.metadata (4.5 kB)\nCollecting kombu<6.0,>=5.2.3 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n Using cached kombu-5.4.2-py3-none-any.whl.metadata (3.2 kB)\nCollecting vine<6.0,>=5.0.0 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n Using cached vine-5.1.0-py3-none-any.whl.metadata (2.7 kB)\nRequirement already satisfied: click<9.0,>=8.0.3 in /usr/lib/python3/dist-packages (from celery~=5.2.3->openwisp-controller~=1.0.1) (8.1.6)\nCollecting click-didyoumean>=0.0.3 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n Using cached click_didyoumean-0.3.1-py3-none-any.whl.metadata (3.9 kB)\nCollecting click-repl>=0.2.0 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n Using cached click_repl-0.3.0-py3-none-any.whl.metadata (3.6 kB)\nCollecting click-plugins>=1.1.1 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n Using cached click_plugins-1.1.1-py2.py3-none-any.whl.metadata (6.4 kB)\nCollecting django<4.1.0,>=3.0 (from django-loci~=1.0.1->openwisp-controller~=1.0.1)\n Using cached Django-4.0.10-py3-none-any.whl.metadata (4.1 kB)\nCollecting channels~=3.0.4 (from django-loci~=1.0.1->openwisp-controller~=1.0.1)\n Using cached channels-3.0.5-py3-none-any.whl.metadata (1.3 kB)\nCollecting django-leaflet~=0.28.0 (from django-loci~=1.0.1->openwisp-controller~=1.0.1)\n Using cached django_leaflet-0.28.3-py3-none-any.whl.metadata (16 kB)\nCollecting Pillow~=9.1.0 (from django-loci~=1.0.1->openwisp-controller~=1.0.1)\n Using cached Pillow-9.1.1.tar.gz (49.8 MB)\n Preparing metadata (setup.py): started\n Preparing metadata (setup.py): finished with status 'error'\n\n:stderr: error: subprocess-exited-with-error\n \n × python setup.py egg_info did not run successfully.\n │ exit code: 1\n ╰─> [3 lines of output]\n /opt/openwisp2/env/lib/python3.12/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\n warnings.warn(\n ERROR: Can not execute setup.py since setuptools is not available in the build environment.\n [end of output]\n \n note: This error originates from a subprocess, and is likely not a problem with pip.\nerror: metadata-generation-failed\n\n× Encountered error while generating package metadata.\n╰─> See above for output.\n\nnote: This is an issue with the package mentioned above, not pip.\nhint: See above for details.\n"}

How to Reproduce

sudo apt install ansible-core
sudo apt install python3-pip
sudo apt install sshpass
sudo apt install curl
sudo apt install git
pip install Jinja2>=2.11 --break-system-packages
sudo ssh-keyscan -H 127.0.0.1 >> ~/.ssh/known_hosts
sudo ssh-keyscan -H 192.168.211.132 >> ~/.ssh/known_hosts
sudo ssh-keyscan -H localhost >> ~/.ssh/known_hosts
PermitRootLogin yes line in the /etc/ssh/sshd_config
should be able to ssh its own ip and also be added to sudoers
ansible-galaxy collection install "community.general:>=3.6.0" --force
ansible-galaxy collection install "ansible.posix" --force
ansible-galaxy install openwisp.openwisp2 --force
mkdir ~/openwisp2-ansible-playbook
cd ~/openwisp2-ansible-playbook

place below content in hosts file:

[openwisp2]
192.168.211.132

place below content in playbook.yml file

  • hosts: openwisp2
    roles:

    • openwisp.openwisp2

    the following line is needed only when an IP address is used as the inventory hostname

    vars:
    postfix_myhostname: localhost
          
    #ansible-playbook -i hosts playbook.yml -b -k -K --become-method=su
    ansible-playbook -i hosts playbook.yml -u ctadmin -k --become -K
    ======================================== OR
    now create playbook with :

  • hosts: openwisp2
    become: "{{ become | default('yes') }}"
    roles:

    • openwisp.openwisp2
      vars:
      openwisp2_radius: true
      openwisp2_freeradius_install: true

    set to false when you don't want to register openwisp-radius

    API endpoints.

    openwisp2_radius_urls: true
          
    =============================================================

Other detail
TASK [openwisp.openwisp2 : Install openwisp2 controller and its dependencies] *******************************************************************************
FAILED - RETRYING: [192.168.144.170]: Install openwisp2 controller and its dependencies (5 retries left).
FAILED - RETRYING: [192.168.144.170]: Install openwisp2 controller and its dependencies (4 retries left).
FAILED - RETRYING: [192.168.144.170]: Install openwisp2 controller and its dependencies (3 retries left).
FAILED - RETRYING: [192.168.144.170]: Install openwisp2 controller and its dependencies (2 retries left).
FAILED - RETRYING: [192.168.144.170]: Install openwisp2 controller and its dependencies (1 retries left).
fatal: [192.168.144.170]: FAILED! => {"attempts": 5, "changed": false, "cmd": ["/opt/openwisp2/env/bin/pip3", "install", "-U", "openwisp-controller~=1.0.1", "service_identity"], "msg": "stdout: Collecting openwisp-controller~=1.0.1\n  Using cached openwisp_controller-1.0.3-py2.py3-none-any.whl.metadata (139 kB)\nCollecting service_identity\n  Using cached service_identity-24.2.0-py3-none-any.whl.metadata (5.1 kB)\nCollecting django-sortedm2m~=3.1.1 (from openwisp-controller~=1.0.1)\n  Using cached django_sortedm2m-3.1.1-py2.py3-none-any.whl.metadata (19 kB)\nCollecting django-reversion~=4.0.1 (from openwisp-controller~=1.0.1)\n  Using cached django_reversion-4.0.2-py3-none-any.whl.metadata (3.6 kB)\nCollecting django-x509~=1.1.0 (from openwisp-controller~=1.0.1)\n  Using cached django_x509-1.1-py2.py3-none-any.whl.metadata (19 kB)\nCollecting django-taggit~=2.1.0 (from openwisp-controller~=1.0.1)\n  Using cached django_taggit-2.1.0-py3-none-any.whl.metadata (3.5 kB)\nCollecting django-loci~=1.0.1 (from openwisp-controller~=1.0.1)\n  Using cached django_loci-1.0.1-py2.py3-none-any.whl.metadata (16 kB)\nCollecting django-flat-json-widget~=0.2.0 (from openwisp-controller~=1.0.1)\n  Using cached django_flat_json_widget-0.2-py2.py3-none-any.whl.metadata (5.1 kB)\nCollecting openwisp-utils~=1.0.1 (from openwisp-utils[rest]~=1.0.1->openwisp-controller~=1.0.1)\n  Using cached openwisp_utils-1.0.5-py2.py3-none-any.whl.metadata (63 kB)\nCollecting netjsonconfig~=1.0.1 (from openwisp-controller~=1.0.1)\n  Using cached netjsonconfig-1.0.2-py2.py3-none-any.whl.metadata (3.8 kB)\nCollecting openwisp-users~=1.0.0 (from openwisp-controller~=1.0.1)\n  Using cached openwisp_users-1.0.2-py2.py3-none-any.whl.metadata (44 kB)\nCollecting openwisp-notifications~=1.0.0 (from openwisp-controller~=1.0.1)\n  Using cached openwisp_notifications-1.0.3-py2.py3-none-any.whl.metadata (55 kB)\nCollecting openwisp-ipam~=1.0.0 (from openwisp-controller~=1.0.1)\n  Using cached openwisp_ipam-1.0-py2.py3-none-any.whl.metadata (24 kB)\nCollecting djangorestframework-gis~=0.18.0 (from openwisp-controller~=1.0.1)\n  Using cached djangorestframework_gis-0.18-py2.py3-none-any.whl.metadata (29 kB)\nCollecting paramiko~=2.10.3 (from paramiko[ed25519]~=2.10.3->openwisp-controller~=1.0.1)\n  Using cached paramiko-2.10.6-py2.py3-none-any.whl.metadata (4.6 kB)\nCollecting scp~=0.14.2 (from openwisp-controller~=1.0.1)\n  Using cached scp-0.14.5-py2.py3-none-any.whl.metadata (4.3 kB)\nCollecting celery~=5.2.3 (from openwisp-controller~=1.0.1)\n  Using cached celery-5.2.7-py3-none-any.whl.metadata (20 kB)\nCollecting django-cache-memoize~=0.1 (from openwisp-controller~=1.0.1)\n  Using cached django_cache_memoize-0.2.0-py3-none-any.whl.metadata (15 kB)\nCollecting shortuuid~=1.0.1 (from openwisp-controller~=1.0.1)\n  Using cached shortuuid-1.0.13-py3-none-any.whl.metadata (5.8 kB)\nRequirement already satisfied: netaddr~=0.8.0 in /usr/lib/python3/dist-packages (from openwisp-controller~=1.0.1) (0.8.0)\nRequirement already satisfied: attrs>=19.1.0 in /opt/openwisp2/env/lib/python3.12/site-packages (from service_identity) (24.2.0)\nRequirement already satisfied: cryptography in /usr/lib/python3/dist-packages (from service_identity) (41.0.7)\nCollecting pyasn1 (from service_identity)\n  Using cached pyasn1-0.6.1-py3-none-any.whl.metadata (8.4 kB)\nCollecting pyasn1-modules (from service_identity)\n  Using cached pyasn1_modules-0.4.1-py3-none-any.whl.metadata (3.5 kB)\nRequirement already satisfied: pytz>=2021.3 in /usr/lib/python3/dist-packages (from celery~=5.2.3->openwisp-controller~=1.0.1) (2024.1)\nCollecting billiard<4.0,>=3.6.4.0 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n  Using cached billiard-3.6.4.0-py3-none-any.whl.metadata (4.5 kB)\nCollecting kombu<6.0,>=5.2.3 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n  Using cached kombu-5.4.2-py3-none-any.whl.metadata (3.2 kB)\nCollecting vine<6.0,>=5.0.0 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n  Using cached vine-5.1.0-py3-none-any.whl.metadata (2.7 kB)\nRequirement already satisfied: click<9.0,>=8.0.3 in /usr/lib/python3/dist-packages (from celery~=5.2.3->openwisp-controller~=1.0.1) (8.1.6)\nCollecting click-didyoumean>=0.0.3 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n  Using cached click_didyoumean-0.3.1-py3-none-any.whl.metadata (3.9 kB)\nCollecting click-repl>=0.2.0 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n  Using cached click_repl-0.3.0-py3-none-any.whl.metadata (3.6 kB)\nCollecting click-plugins>=1.1.1 (from celery~=5.2.3->openwisp-controller~=1.0.1)\n  Using cached click_plugins-1.1.1-py2.py3-none-any.whl.metadata (6.4 kB)\nCollecting django<4.1.0,>=3.0 (from django-loci~=1.0.1->openwisp-controller~=1.0.1)\n  Using cached Django-4.0.10-py3-none-any.whl.metadata (4.1 kB)\nCollecting channels~=3.0.4 (from django-loci~=1.0.1->openwisp-controller~=1.0.1)\n  Using cached channels-3.0.5-py3-none-any.whl.metadata (1.3 kB)\nCollecting django-leaflet~=0.28.0 (from django-loci~=1.0.1->openwisp-controller~=1.0.1)\n  Using cached django_leaflet-0.28.3-py3-none-any.whl.metadata (16 kB)\nCollecting Pillow~=9.1.0 (from django-loci~=1.0.1->openwisp-controller~=1.0.1)\n  Using cached Pillow-9.1.1.tar.gz (49.8 MB)\n  Preparing metadata (setup.py): started\n  Preparing metadata (setup.py): finished with status 'error'\n\n:stderr:   error: subprocess-exited-with-error\n  \n  × python setup.py egg_info did not run successfully.\n  │ exit code: 1\n  ╰─> [3 lines of output]\n      /opt/openwisp2/env/lib/python3.12/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\n        warnings.warn(\n      ERROR: Can not execute `setup.py` since setuptools is not available in the build environment.\n      [end of output]\n  \n  note: This error originates from a subprocess, and is likely not a problem with pip.\nerror: metadata-generation-failed\n\n× Encountered error while generating package metadata.\n╰─> See above for output.\n\nnote: This is an issue with the package mentioned above, not pip.\nhint: See above for details.\n"}

Dominant language
Python
Stars
2.9k
Forks
1.4k
Avg merge
1d 1h
Merged PRs (30d)
1

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from pypa/setuptools

All issues in pypa/setuptools

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.