Ansible-builder failing

I am trying to create a EE using ansible-builder for my AAP environment. Here is the error i’m getting:

[user@ansible01 example_server_team_ee]$ ansible-builder build -v 3 --no-cache   -t localhost/example_server_team_ee:latest   --build-arg http_proxy="http://1.2.3.4:8080" --build-arg no_proxy="localhost,127.0.0.1,::1,.example.com"   --build-arg PIP_INDEX_URL="http://nexus.example.com/repository/pypi-proxy/simple"   --build-arg PIP_TRUSTED_HOST="nexus.example.com"
Ansible Builder is generating your execution environment build context.
File context/_build/requirements.yml is already up-to-date.
File context/_build/requirements.txt is already up-to-date.
File context/_build/bindep.txt is already up-to-date.
Creating context/_build/configs
File context/_build/configs/pip.conf is already up-to-date.
File context/_build/scripts/assemble is already up-to-date.
File context/_build/scripts/install-from-bindep is already up-to-date.
File context/_build/scripts/introspect.py is already up-to-date.
File context/_build/scripts/check_galaxy is already up-to-date.
File context/_build/scripts/check_ansible is already up-to-date.
File context/_build/scripts/pip_install is already up-to-date.
File context/_build/scripts/entrypoint is already up-to-date.
Ansible Builder is building your execution environment image. Tags: localhost/example_server_team_ee:latest
Running command:
  podman build -f context/Containerfile -t localhost/example_server_team_ee:latest --build-arg=http_proxy=http://10.0.140.205:8080 --build-arg=no_proxy=localhost,127.0.0.1,::1,.example.com --build-arg=PIP_INDEX_URL=http://nexus.example.com/repository/pypi-proxy/simple --build-arg=PIP_TRUSTED_HOST=nexus.example.com --no-cache context
[1/4] STEP 1/14: FROM registry.redhat.io/ansible-automation-platform-24/ee-minimal-rhel8:latest AS base
[1/4] STEP 2/14: USER root
--> b7e29ee89f0a
[1/4] STEP 3/14: ENV PIP_BREAK_SYSTEM_PACKAGES=1
--> e8693a9f28db
[1/4] STEP 4/14: ARG EE_BASE_IMAGE
--> e7388321bb0e
[1/4] STEP 5/14: ARG PYCMD
--> 470b95699de8
[1/4] STEP 6/14: ARG PKGMGR_PRESERVE_CACHE
--> 39413d8fbedd
[1/4] STEP 7/14: ARG ANSIBLE_GALAXY_CLI_COLLECTION_OPTS
--> bcf3faeb32e2
[1/4] STEP 8/14: ARG ANSIBLE_GALAXY_CLI_ROLE_OPTS
--> 1f240695f35f
[1/4] STEP 9/14: ARG PKGMGR
--> 602680b3883b
[1/4] STEP 10/14: COPY _build/scripts/ /output/scripts/
--> 8aba4bbfcdae
[1/4] STEP 11/14: COPY _build/scripts/entrypoint /opt/builder/bin/entrypoint
--> ab2f1eb13b9f
[1/4] STEP 12/14: ENV http_proxy="http://1.2.3.4:8080"
--> 1146de14ad3c
[1/4] STEP 13/14: ARG http_proxy
--> a3fe6ade6108
[1/4] STEP 14/14: RUN /output/scripts/pip_install $PYCMD
+ PYCMD=/usr/bin/python3
+ '[' -z /usr/bin/python3 ']'
+ '[' '!' -x /usr/bin/python3 ']'
+ /usr/bin/python3 -m ensurepip --root /
Looking in links: /tmp/tmpfjm5rh8a
Requirement already satisfied: setuptools in /usr/lib/python3.9/site-packages (50.3.2)
Requirement already satisfied: pip in /usr/lib/python3.9/site-packages (20.2.4)
+ '[' 0 -ne 0 ']'
+ exit 0
--> 68216146d09e
[3/4] STEP 1/16: FROM 68216146d09ebcf05a990a42281ef1d8f1708e54a98b3f11ad239ad6e7b54a51 AS builder
[3/4] STEP 2/16: ENV PIP_BREAK_SYSTEM_PACKAGES=1
--> 35f1ef4e550e
[3/4] STEP 3/16: WORKDIR /build
--> 9ab5a0f1e7bc
[3/4] STEP 4/16: ARG EE_BASE_IMAGE
--> 56f3f834aa0c
[3/4] STEP 5/16: ARG PYCMD
--> a201b70d3209
[3/4] STEP 6/16: ARG PKGMGR_PRESERVE_CACHE
--> 7bc1f84bce59
[3/4] STEP 7/16: ARG ANSIBLE_GALAXY_CLI_COLLECTION_OPTS
--> 36d909f29130
[3/4] STEP 8/16: ARG ANSIBLE_GALAXY_CLI_ROLE_OPTS
--> 872862c80a54
[3/4] STEP 9/16: ARG PKGMGR
--> b326509a7010
[3/4] STEP 10/16: RUN $PYCMD -m pip install --no-cache-dir bindep pyyaml packaging
WARNING: Running pip install with root privileges is generally not a good idea. Try `python3 -m pip install --user` instead.
Collecting bindep
  Downloading bindep-2.13.0-py3-none-any.whl (34 kB)
Requirement already satisfied: pyyaml in /usr/lib64/python3.9/site-packages (5.4.1)
Requirement already satisfied: packaging in /usr/lib/python3.9/site-packages (21.3)
Collecting Parsley
  Downloading Parsley-1.3-py2.py3-none-any.whl (88 kB)
Collecting pbr>=2
  Downloading pbr-7.0.1-py2.py3-none-any.whl (126 kB)
Collecting distro>=1.7
  Downloading distro-1.9.0-py3-none-any.whl (20 kB)
Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /usr/lib/python3.9/site-packages (from packaging) (3.0.9)
Requirement already satisfied: setuptools in /usr/lib/python3.9/site-packages (from pbr>=2->bindep) (50.3.2)
Installing collected packages: Parsley, pbr, distro, bindep
Successfully installed Parsley-1.3 bindep-2.13.0 distro-1.9.0 pbr-7.0.1
--> 4ccfe7c42aa8
[3/4] STEP 11/16: COPY _build/configs/pip.conf /etc/pip.conf
--> 3d6302769cb3
[3/4] STEP 12/16: COPY --from=galaxy /usr/share/ansible /usr/share/ansible
[4/4] STEP 1/22: FROM 68216146d09ebcf05a990a42281ef1d8f1708e54a98b3f11ad239ad6e7b54a51 AS final
[4/4] STEP 2/22: ENV PIP_BREAK_SYSTEM_PACKAGES=1
--> 97ebcbb1b87a
[4/4] STEP 3/22: ARG EE_BASE_IMAGE
--> 23cad3ecb17e
[4/4] STEP 4/22: ARG PYCMD
--> 7ee2b5d6bc7d
[4/4] STEP 5/22: ARG PKGMGR_PRESERVE_CACHE
--> d49d1a25f21f
[4/4] STEP 6/22: ARG ANSIBLE_GALAXY_CLI_COLLECTION_OPTS
--> 811bb287a78f
[4/4] STEP 7/22: ARG ANSIBLE_GALAXY_CLI_ROLE_OPTS
--> 97ea13e49551
[4/4] STEP 8/22: ARG PKGMGR
--> d487d6ab96f1
[4/4] STEP 9/22: RUN /output/scripts/check_ansible $PYCMD
+ PYCMD=/usr/bin/python3
+ '[' -z /usr/bin/python3 ']'
+ '[' '!' -x /usr/bin/python3 ']'
+ ansible --version
ansible [core 2.15.13]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = /home/runner/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.9.20 (main, Sep 26 2024, 20:59:47) [GCC 8.5.0 20210514 (Red Hat 8.5.0-22)] (/usr/bin/python3.9)
  jinja version = 3.1.6
  libyaml = True
+ '[' 0 -ne 0 ']'
+ ansible-runner --version
2.3.6
+ '[' 0 -ne 0 ']'
+ /usr/bin/python3 -c 'import ansible ; import ansible_runner'
+ '[' 0 -ne 0 ']'
+ exit 0
--> 83d888d9c3dd
[4/4] STEP 10/22: COPY --from=galaxy /usr/share/ansible /usr/share/ansible
[2/4] STEP 1/14: FROM 68216146d09ebcf05a990a42281ef1d8f1708e54a98b3f11ad239ad6e7b54a51 AS galaxy
[2/4] STEP 2/14: ARG EE_BASE_IMAGE
--> 8b38e2271a4f
[2/4] STEP 3/14: ARG PYCMD
--> be5ca1919009
[2/4] STEP 4/14: ARG PKGMGR_PRESERVE_CACHE
--> 0873248acc50
[2/4] STEP 5/14: ARG ANSIBLE_GALAXY_CLI_COLLECTION_OPTS
--> 025ad9cb7101
[2/4] STEP 6/14: ARG ANSIBLE_GALAXY_CLI_ROLE_OPTS
--> f5c22e20b328
[2/4] STEP 7/14: ARG PKGMGR
--> 8583277cac86
[2/4] STEP 8/14: COPY _build/configs/pip.conf /etc/pip.conf
--> 5bdf24b5bcc3
[2/4] STEP 9/14: RUN /output/scripts/check_galaxy
+ ansible-galaxy --version
ansible-galaxy [core 2.15.13]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/runner/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = /home/runner/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible-galaxy
  python version = 3.9.20 (main, Sep 26 2024, 20:59:47) [GCC 8.5.0 20210514 (Red Hat 8.5.0-22)] (/usr/bin/python3.9)
  jinja version = 3.1.6
  libyaml = True
+ '[' 0 -ne 0 ']'
+ exit 0
--> 5d573228d57e
[2/4] STEP 10/14: COPY _build /build
--> 71b584cda19c
[2/4] STEP 11/14: WORKDIR /build
--> 55f2ab3b12de
[2/4] STEP 12/14: RUN mkdir -p /usr/share/ansible
--> c574a44dd307
[2/4] STEP 13/14: RUN ansible-galaxy role install $ANSIBLE_GALAXY_CLI_ROLE_OPTS -r requirements.yml --roles-path "/usr/share/ansible/roles"
ERROR! Expecting requirements yaml to be a list or dictionary but got str
Error: building at STEP "RUN ansible-galaxy role install $ANSIBLE_GALAXY_CLI_ROLE_OPTS -r requirements.yml --roles-path "/usr/share/ansible/roles"": while running runtime: exit status 1

Here is my execution environment:

---
version: 3

dependencies:
  galaxy: [requirements.yml]
  python: [requirements.txt]
  system: [bindep.txt]

options:
  package_manager_path: /usr/bin/microdnf

images:
  base_image:
    name: registry.redhat.io/ansible-automation-platform-24/ee-minimal-rhel8:latest

additional_build_files:
  #we’ll copy your Nexus pip config into the image before any pip runs
  - src: _pip/pip.conf
    dest: configs                   # available at _build/configs/pip.conf during build

additional_build_steps:
  prepend_base:
    - ENV http_proxy="http://10.0.140.205:8080"
    - ARG http_proxy
  prepend_galaxy:
    - COPY _build/configs/pip.conf /etc/pip.conf

  prepend_builder:
    - COPY _build/configs/pip.conf /etc/pip.conf

  append_final:
    - RUN rm -f /etc/pip.conf || true
  • I am using ansible-builder 3.1.0 with the latest ansible on RHEL 9.6
  • We have nexus repo manager in place for pypi proxy and a general proxy which IS configured correctly.
  • Here is my requiorements.yml
---
roles: []
collections:
  - name: community.general
  - name: community.vmware
  - name: theforeman.foreman
  - name: venafi.machine_identity
  - name: cyberark.conjur
  - name: cyberark.pas
  - name: community.postgresql
  - name: community.windows
  - name: containers.podman
  - name: microsoft.ad
  - name: microsoft.iis
  - name: awx.awx
  - name: community.aws
  - name: community.proxmox

Here is my requiremetns.txt

#VMware
pyvmomi>=8.0.3.0.1
#Windows modules commonly need these
pywinrm>=0.4.3
pypsrp>=0.8.1
requests>=2.31.0
setuptools
#Proxmox collection often expects this
proxmoxer>=2.0.1
#Foreman / others typically work with requests, already included

I don’t understand why it’s failing.

I’m guessing this is just a typo in your post, but you have it listed as requiorements.yml, yet your dependency shows:

dependencies:
  galaxy: [requirements.yml]

Also, you may want to remove the empty Roles line, it is not needed:
roles: []

Yes that was typo in the post.

Removing the roles: didn’t help. It failed in the same spot.

hello, can you remove the Β« name: Β» part and just list the collections name with a - before in the requirements.yml ?
Also, you get inspiration from this page and embed the collection list directly ?

Building your first Execution Environment β€” Ansible Community Documentation.

Same error. I actually had red hat help me. but i’m not getting a quick response.

You’ve formatted your EE file incorrectly. Remove the brackets from around the filenames of the galaxy, python, and system dependencies.

dependencies:
  galaxy: requirements.yml
  python: requirements.txt
  system: bindep.txt
1 Like

I will try that out and let you know. I also found out I forgot to allow galaxy.ansible.com through our proxy…UGH.

ok, got that issue fixed. Now i’m getting this when running the builder -

Collecting pytest>=6.2.5
  Downloading pytest-8.4.1-py3-none-any.whl (365 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 365.5/365.5 kB 8.6 MB/s eta 0:00:00
Collecting vmware_vapi_runtime==2.61.2
  Downloading vmware_vapi_runtime-2.61.2-py3-none-any.whl (239 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 239.2/239.2 kB 9.8 MB/s eta 0:00:00
Requirement already satisfied: pyOpenSSL<24.3.0 in /usr/lib/python3.11/site-packages (from vmware_vapi_runtime==2.61.2->vmware-vcenter->-r /tmp/src/requirements.txt (line 17)) (24.1.0)
Requirement already satisfied: gssapi>=1.6.0 in /usr/local/lib64/python3.11/site-packages (from pyspnego[kerberos]>=0.8.0->-r /tmp/src/requirements.txt (line 23)) (1.8.2)
Collecting aiohappyeyeballs>=2.5.0
  Downloading aiohappyeyeballs-2.6.1-py3-none-any.whl (15 kB)
Collecting aiosignal>=1.4.0
  Downloading aiosignal-1.4.0-py3-none-any.whl (7.5 kB)
Collecting frozenlist>=1.1.1
  Downloading frozenlist-1.7.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (235 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 235.3/235.3 kB 10.2 MB/s eta 0:00:00
Collecting multidict<7.0,>=4.5
  Downloading multidict-6.6.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (246 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 246.7/246.7 kB 10.6 MB/s eta 0:00:00
Collecting propcache>=0.2.0
  Downloading propcache-0.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (213 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 213.5/213.5 kB 9.9 MB/s eta 0:00:00
Collecting yarl<2.0,>=1.17.0
  Downloading yarl-1.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (348 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 349.0/349.0 kB 8.5 MB/s eta 0:00:00
Requirement already satisfied: requests-ntlm>=1.1.0 in /usr/local/lib/python3.11/site-packages (from pywinrm>=0.4.3->-r /tmp/src/requirements.txt (line 33)) (1.1.0)
Requirement already satisfied: typing-extensions>=4.2 in /usr/lib/python3.11/site-packages (from aiosignal>=1.4.0->aiohttp->-r /tmp/src/requirements.txt (line 31)) (4.9.0)
Requirement already satisfied: pycparser in /usr/lib/python3.11/site-packages (from cffi>=1.12->cryptography>=3.1->-r /tmp/src/requirements.txt (line 19)) (2.20)
Requirement already satisfied: decorator in /usr/local/lib/python3.11/site-packages (from gssapi>=1.6.0->pyspnego[kerberos]>=0.8.0->-r /tmp/src/requirements.txt (line 23)) (5.1.1)
Collecting iniconfig>=1
  Downloading iniconfig-2.1.0-py3-none-any.whl (6.0 kB)
Requirement already satisfied: packaging>=20 in /usr/lib/python3.11/site-packages (from pytest>=6.2.5->pytest-mock->-r /tmp/src/requirements.txt (line 14)) (23.2)
Collecting pluggy<2,>=1.5
  Downloading pluggy-1.6.0-py3-none-any.whl (20 kB)
Collecting pygments>=2.7.2
  Downloading pygments-2.19.2-py3-none-any.whl (1.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 7.4 MB/s eta 0:00:00
Requirement already satisfied: ntlm-auth>=1.0.2 in /usr/local/lib/python3.11/site-packages (from requests-ntlm>=1.1.0->pywinrm>=0.4.3->-r /tmp/src/requirements.txt (line 33)) (1.5.0)
Requirement already satisfied: ply==3.11 in /usr/lib/python3.11/site-packages (from pycparser->cffi>=1.12->cryptography>=3.1->-r /tmp/src/requirements.txt (line 19)) (3.11)
Building wheels for collected packages: krb5
  Building wheel for krb5 (pyproject.toml): started
  Building wheel for krb5 (pyproject.toml): finished with status 'error'
  error: subprocess-exited-with-error

  Γ— Building wheel for krb5 (pyproject.toml) did not run successfully.
  β”‚ exit code: 1
  ╰─> [99 lines of output]
      Using krb5-config at 'krb5-config'
      Using libkrb5.so as Kerberos module for platform checks
      Compiling src/krb5/_ccache.pyx
      Compiling src/krb5/_ccache_mit.pyx
      Compiling src/krb5/_ccache_match.pyx
      Compiling src/krb5/_ccache_support_switch.pyx
      Compiling src/krb5/_cccol.pyx
      Compiling src/krb5/_chpw_message_mit.pyx
      Compiling src/krb5/_context.pyx
      Compiling src/krb5/_context_mit.pyx
      Compiling src/krb5/_creds.pyx
      Compiling src/krb5/_creds_marshal_mit.pyx
      Compiling src/krb5/_creds_mit.pyx
      Compiling src/krb5/_creds_opt.pyx
      Skipping src/krb5/_creds_opt_heimdal.pyx as it is not supported by the selected Kerberos implementation.
      Compiling src/krb5/_creds_opt_mit.pyx
      Compiling src/krb5/_creds_opt_set_in_ccache.pyx
      Compiling src/krb5/_creds_opt_set_pac_request.pyx
      Compiling src/krb5/_exceptions.pyx
      Compiling src/krb5/_keyblock.pyx
      Compiling src/krb5/_keyblock_mit.pyx
      Compiling src/krb5/_kt.pyx
      Compiling src/krb5/_kt_mit.pyx
      Skipping src/krb5/_kt_heimdal.pyx as it is not supported by the selected Kerberos implementation.
      Compiling src/krb5/_kt_have_content.pyx
      Compiling src/krb5/_principal.pyx
      Skipping src/krb5/_principal_heimdal.pyx as it is not supported by the selected Kerberos implementation.
      Compiling src/krb5/_set_password.pyx
      Compiling src/krb5/_string.pyx
      Compiling src/krb5/_string_mit.pyx
      /tmp/pip-build-env-5hqvjuie/overlay/lib/python3.11/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
      !!

              ********************************************************************************
              Please consider removing the following classifiers in favor of a SPDX license expression:

              License :: OSI Approved :: MIT License

              See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
              ********************************************************************************

      !!
        self._finalize_license_expression()
      running bdist_wheel
      running build
      running build_py
      creating build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/__init__.py -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_adpi.py -> build/lib.linux-x86_64-cpython-311/krb5
      running egg_info
      writing src/krb5.egg-info/PKG-INFO
      writing dependency_links to src/krb5.egg-info/dependency_links.txt
      writing top-level names to src/krb5.egg-info/top_level.txt
      reading manifest file 'src/krb5.egg-info/SOURCES.txt'
      reading manifest template 'MANIFEST.in'
      warning: no previously-included files found matching '.coverage'
      warning: no previously-included files found matching '.gitignore'
      warning: no previously-included files found matching '.pre-commit-config.yaml'
      warning: no previously-included files matching '*.pyc' found under directory 'tests'
      adding license file 'LICENSE'
      writing manifest file 'src/krb5.egg-info/SOURCES.txt'
      copying src/krb5/_ccache.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_ccache_match.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_ccache_mit.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_ccache_support_switch.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_cccol.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_chpw_message_mit.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_context.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_context_mit.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_creds.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_creds_marshal_mit.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_creds_mit.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_creds_opt.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_creds_opt_heimdal.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_creds_opt_mit.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_creds_opt_set_in_ccache.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_creds_opt_set_pac_request.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_exceptions.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_keyblock.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_keyblock_mit.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_kt.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_kt_have_content.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_kt_heimdal.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_kt_mit.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_principal.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_principal_heimdal.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_set_password.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_string.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/_string_mit.pyi -> build/lib.linux-x86_64-cpython-311/krb5
      copying src/krb5/py.typed -> build/lib.linux-x86_64-cpython-311/krb5
      running build_ext
      building 'krb5._ccache' extension
      creating build/temp.linux-x86_64-cpython-311/src/krb5
      gcc -pthread -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -D_GNU_SOURCE -fPIC -fwrapv -fPIC -Isrc/krb5 -I/usr/include/python3.11 -c src/krb5/_ccache.c -o build/temp.linux-x86_64-cpython-311/src/krb5/_ccache.o
      src/krb5/_ccache.c:34:10: fatal error: Python.h: No such file or directory
       #include "Python.h"
                ^~~~~~~~~~
      compilation terminated.
      error: command '/usr/bin/gcc' failed with exit code 1
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for krb5
Failed to build krb5
ERROR: Could not build wheels for krb5, which is required to install pyproject.toml-based projects
Error: building at STEP "RUN /output/scripts/assemble": while running runtime: exit status 1

I removed the krb5 stuff and got it working.