tink-crypto / tink-py

Python implementation of Tink
https://developers.google.com/tink
Apache License 2.0
33 stars 2 forks source link

Installing tink Python library with pip requires Bazel #36

Open romanini-ciandt opened 5 days ago

romanini-ciandt commented 5 days ago

Describe the bug:

The bug I'll describe has been reported before in an archived tink repo, it was closed and it is not solved yet.

In summary, pip install tink doesn't work if you don't have Bazel installed in your environment, but I don't see Bazel listed as a requirement in Tink PYPI page. The only requirement described in that page is: Requires: Python >=3.8

(venv) [root@workspace]# pip install tink --no-cache
Collecting tink
  Downloading tink-1.10.0.tar.gz (211 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.4/211.4 kB 7.8 MB/s eta 0:00:00
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  error: subprocess-exited-with-error

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [6 lines of output]
      running egg_info
      writing tink.egg-info/PKG-INFO
      writing dependency_links to tink.egg-info/dependency_links.txt
      writing requirements to tink.egg-info/requires.txt
      writing top-level names to tink.egg-info/top_level.txt
      error: Could not find bazel executable. Please install bazel to compile the Tink Python package.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

What was the expected behavior?

I would expect a successful Tink installation, like the following test in cloud shell (which contains bazel):

leonardo_romanini@cloudshell:~$ pip3 install tink
Defaulting to user installation because normal site-packages is not writeable
Collecting tink
  Downloading tink-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (7.8 kB)
Requirement already satisfied: absl-py>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from tink) (2.1.0)
Requirement already satisfied: protobuf!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0.dev0,>=3.20.2 in /usr/local/lib/python3.10/dist-packages (from tink) (4.25.3)
Downloading tink-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 23.8 MB/s eta 0:00:00
Installing collected packages: tink

How can we reproduce the bug?

I'm trying to use Tink in Google's Cloud Foundation Toolkit image

docker run -it gcr.io/cloud-foundation-cicd/cft/developer-tools:1 /bin/bash
python -m venv ./venv
source venv/bin/activate
pip install tink==1.10.0

Can you tell us more about your development environment?

Python 3.12.3 pip 24.0 Alpine Linux v3.20

morambro commented 5 days ago

Hi @romanini-ciandt, thanks for flagging this.

The issue is that Tink binary wheels are built for manylinux as of 1.10.0 (and most likely 1.11.0), and Alpine Linux requires musllinux (https://packaging.python.org/en/latest/specifications/platform-compatibility-tags/#musllinux).

Running pip debug --verbose in the container reveals that indeed no .*manylinux.* tag is is considered compatible.

# pip debug --verbose | grep 312
  cp312-cp312-musllinux_1_2_x86_64
  cp312-cp312-musllinux_1_1_x86_64
  cp312-cp312-musllinux_1_0_x86_64
  cp312-cp312-linux_x86_64
  cp312-abi3-musllinux_1_2_x86_64
  cp312-abi3-musllinux_1_1_x86_64
  cp312-abi3-musllinux_1_0_x86_64
  cp312-abi3-linux_x86_64
  cp312-none-musllinux_1_2_x86_64
  cp312-none-musllinux_1_1_x86_64
  cp312-none-musllinux_1_0_x86_64
  cp312-none-linux_x86_64
  py312-none-musllinux_1_2_x86_64
  py312-none-musllinux_1_1_x86_64
  py312-none-musllinux_1_0_x86_64
  py312-none-linux_x86_64
  cp312-none-any
  py312-none-any

So pip tries to build the sdist, and fails because Bazel is not installed (protoc seems available).

romanini-ciandt commented 4 days ago

@morambro thanks for your response, I believe it will be better for my context to change the approach from py-tink to tink-go then, since I can't make modifications in the base image. As far as I checked there are some places where tink-go is used with a CI using CFT image and it is working fine with this base image.

But just FYI, even after installing bazel into the CFT image in my local, I received the following error when I tried to re run the pip install tink (logs below).

Is it in py-tink's roadmap to make the usage more smooth with Linux Alpine? I ask because all the repos using Google's CFT uses a shared CI that runs on top of this image (gcr.io/cloud-foundation-cicd/cft/developer-tools) and it would be helpful for developers if the lib can be installed easily.

(venv) [root@5bd985027dac workspace]# bazel --version
bazel 7.2.0-0
(venv) [root@5bd985027dac workspace]# pip install tink
Collecting tink
  Downloading tink-1.10.0.tar.gz (211 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 211.4/211.4 kB 4.1 MB/s eta 0:00:00
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting absl-py>=1.3.0 (from tink)
  Downloading absl_py-2.1.0-py3-none-any.whl.metadata (2.3 kB)
Collecting protobuf!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0.dev0,>=3.20.2 (from tink)
  Downloading protobuf-4.25.3-py3-none-any.whl.metadata (541 bytes)
Downloading absl_py-2.1.0-py3-none-any.whl (133 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.7/133.7 kB 7.4 MB/s eta 0:00:00
Downloading protobuf-4.25.3-py3-none-any.whl (156 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 156.5/156.5 kB 8.2 MB/s eta 0:00:00
Building wheels for collected packages: tink
  Building wheel for tink (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for tink (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [283 lines of output]
      running bdist_wheel
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-cpython-312
      creating build/lib.linux-x86_64-cpython-312/tink
      copying tink/_insecure_keyset_handle.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_keyset_writer_test.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_kms_clients_test.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_insecure_keyset_handle_test.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/secret_key_access_import_test.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/__init__.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/tink_config.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/tink_config_test.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_keyset_reader.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_keyset_handle.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_json_proto_keyset_format_test.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_keyset_reader_test.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_json_proto_keyset_format.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_keyset_writer.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/cleartext_keyset_handle_test.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/secret_key_access.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/cleartext_keyset_handle.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_proto_keyset_format.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_secret_key_access.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_kms_clients.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/secret_key_access_test.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_keyset_handle_test.py -> build/lib.linux-x86_64-cpython-312/tink
      copying tink/_proto_keyset_format_test.py -> build/lib.linux-x86_64-cpython-312/tink
      creating build/lib.linux-x86_64-cpython-312/tink/hybrid
      copying tink/hybrid/_hybrid_decrypt.py -> build/lib.linux-x86_64-cpython-312/tink/hybrid
      copying tink/hybrid/_hybrid_wrapper.py -> build/lib.linux-x86_64-cpython-312/tink/hybrid
      copying tink/hybrid/_hybrid_key_templates_test.py -> build/lib.linux-x86_64-cpython-312/tink/hybrid
      copying tink/hybrid/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/hybrid
      copying tink/hybrid/_hybrid_key_templates.py -> build/lib.linux-x86_64-cpython-312/tink/hybrid
      copying tink/hybrid/_hybrid_wrapper_test.py -> build/lib.linux-x86_64-cpython-312/tink/hybrid
      copying tink/hybrid/_hybrid_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/hybrid
      copying tink/hybrid/_hybrid_encrypt.py -> build/lib.linux-x86_64-cpython-312/tink/hybrid
      copying tink/hybrid/_hybrid_key_manager_test.py -> build/lib.linux-x86_64-cpython-312/tink/hybrid
      creating build/lib.linux-x86_64-cpython-312/tink/signature
      copying tink/signature/_signature_wrapper_test.py -> build/lib.linux-x86_64-cpython-312/tink/signature
      copying tink/signature/_signature_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/signature
      copying tink/signature/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/signature
      copying tink/signature/_signature_key_templates.py -> build/lib.linux-x86_64-cpython-312/tink/signature
      copying tink/signature/_signature_wrapper.py -> build/lib.linux-x86_64-cpython-312/tink/signature
      copying tink/signature/_signature_key_manager_test.py -> build/lib.linux-x86_64-cpython-312/tink/signature
      copying tink/signature/_public_key_verify.py -> build/lib.linux-x86_64-cpython-312/tink/signature
      copying tink/signature/_public_key_sign.py -> build/lib.linux-x86_64-cpython-312/tink/signature
      creating build/lib.linux-x86_64-cpython-312/tink/integration
      copying tink/integration/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/integration
      creating build/lib.linux-x86_64-cpython-312/tink/testing
      copying tink/testing/bytes_io_test.py -> build/lib.linux-x86_64-cpython-312/tink/testing
      copying tink/testing/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/testing
      copying tink/testing/helper.py -> build/lib.linux-x86_64-cpython-312/tink/testing
      copying tink/testing/keyset_builder_test.py -> build/lib.linux-x86_64-cpython-312/tink/testing
      copying tink/testing/fake_kms_test.py -> build/lib.linux-x86_64-cpython-312/tink/testing
      copying tink/testing/helper_test.py -> build/lib.linux-x86_64-cpython-312/tink/testing
      copying tink/testing/fake_kms.py -> build/lib.linux-x86_64-cpython-312/tink/testing
      copying tink/testing/keyset_builder.py -> build/lib.linux-x86_64-cpython-312/tink/testing
      copying tink/testing/bytes_io.py -> build/lib.linux-x86_64-cpython-312/tink/testing
      creating build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_aead_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_kms_aead_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_kms_aead_key_manager_test.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_aead_key_templates_test.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_aead_wrapper.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_kms_envelope_aead_test.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_aead.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_aead_wrapper_test.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_kms_envelope_aead.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_aead_key_templates.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      copying tink/aead/_aead_key_manager_test.py -> build/lib.linux-x86_64-cpython-312/tink/aead
      creating build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/tink_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/xchacha20_poly1305_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/aes_ctr_hmac_streaming_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/aes_siv_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/ed25519_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/test_proto_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/aes_gcm_siv_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/aes_eax_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/kms_envelope_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/hmac_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/hpke_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/jwt_rsa_ssa_pss_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/kms_aead_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/ecdsa_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/aes_gcm_hkdf_streaming_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/jwt_ecdsa_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/config_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/common_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/aes_ctr_hmac_aead_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/aes_gcm_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/ecies_aead_hkdf_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/rsa_ssa_pss_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/jwt_rsa_ssa_pkcs1_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/hkdf_prf_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/aes_cmac_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/aes_cmac_prf_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/chacha20_poly1305_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/rsa_ssa_pkcs1_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/hmac_prf_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/empty_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/jwt_hmac_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/aes_ctr_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      copying tink/proto/prf_based_deriver_pb2.py -> build/lib.linux-x86_64-cpython-312/tink/proto
      creating build/lib.linux-x86_64-cpython-312/tink/mac
      copying tink/mac/_mac_key_templates.py -> build/lib.linux-x86_64-cpython-312/tink/mac
      copying tink/mac/_mac.py -> build/lib.linux-x86_64-cpython-312/tink/mac
      copying tink/mac/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/mac
      copying tink/mac/_mac_wrapper.py -> build/lib.linux-x86_64-cpython-312/tink/mac
      copying tink/mac/_mac_wrapper_test.py -> build/lib.linux-x86_64-cpython-312/tink/mac
      copying tink/mac/_mac_key_manager_test.py -> build/lib.linux-x86_64-cpython-312/tink/mac
      copying tink/mac/_mac_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/mac
      copying tink/mac/_mac_key_templates_test.py -> build/lib.linux-x86_64-cpython-312/tink/mac
      creating build/lib.linux-x86_64-cpython-312/tink/core
      copying tink/core/_crypto_format_test.py -> build/lib.linux-x86_64-cpython-312/tink/core
      copying tink/core/_primitive_wrapper.py -> build/lib.linux-x86_64-cpython-312/tink/core
      copying tink/core/_registry_test.py -> build/lib.linux-x86_64-cpython-312/tink/core
      copying tink/core/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/core
      copying tink/core/_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/core
      copying tink/core/_crypto_format.py -> build/lib.linux-x86_64-cpython-312/tink/core
      copying tink/core/_tink_error.py -> build/lib.linux-x86_64-cpython-312/tink/core
      copying tink/core/_registry.py -> build/lib.linux-x86_64-cpython-312/tink/core
      copying tink/core/_primitive_set.py -> build/lib.linux-x86_64-cpython-312/tink/core
      copying tink/core/_primitive_set_test.py -> build/lib.linux-x86_64-cpython-312/tink/core
      creating build/lib.linux-x86_64-cpython-312/tink/prf
      copying tink/prf/_prf_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/prf
      copying tink/prf/_prf_set_wrapper.py -> build/lib.linux-x86_64-cpython-312/tink/prf
      copying tink/prf/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/prf
      copying tink/prf/_prf_key_templates.py -> build/lib.linux-x86_64-cpython-312/tink/prf
      copying tink/prf/_prf_set_wrapper_test.py -> build/lib.linux-x86_64-cpython-312/tink/prf
      copying tink/prf/_prf_set.py -> build/lib.linux-x86_64-cpython-312/tink/prf
      copying tink/prf/_prf_key_manager_test.py -> build/lib.linux-x86_64-cpython-312/tink/prf
      creating build/lib.linux-x86_64-cpython-312/tink/daead
      copying tink/daead/_deterministic_aead.py -> build/lib.linux-x86_64-cpython-312/tink/daead
      copying tink/daead/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/daead
      copying tink/daead/_deterministic_aead_key_manager_test.py -> build/lib.linux-x86_64-cpython-312/tink/daead
      copying tink/daead/_deterministic_aead_wrapper.py -> build/lib.linux-x86_64-cpython-312/tink/daead
      copying tink/daead/_deterministic_aead_wrapper_test.py -> build/lib.linux-x86_64-cpython-312/tink/daead
      copying tink/daead/_deterministic_aead_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/daead
      copying tink/daead/_deterministic_aead_key_templates_test.py -> build/lib.linux-x86_64-cpython-312/tink/daead
      copying tink/daead/_deterministic_aead_key_templates.py -> build/lib.linux-x86_64-cpython-312/tink/daead
      creating build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_rewindable_input_stream.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_decrypting_stream.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_streaming_aead.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_rewindable_input_stream_test.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_streaming_aead_wrapper.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_streaming_aead_key_templates.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_streaming_aead_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_pybind11_python_file_object_adapter_test.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_raw_streaming_aead.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_streaming_aead_key_templates_test.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_decrypting_stream_test.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_streaming_aead_wrapper_test.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_encrypting_stream_test.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_file_object_adapter.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_streaming_aead_test.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_file_object_adapter_test.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_encrypting_stream.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      copying tink/streaming_aead/_streaming_aead_key_manager_test.py -> build/lib.linux-x86_64-cpython-312/tink/streaming_aead
      creating build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_verified_jwt_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_key_templates.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwk_set_converter.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_hmac_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_json_util.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_format_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_signature_wrappers_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_format.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_validator_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_signature_wrappers.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_json_util_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwk_set_converter_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_mac_wrapper_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_signature_key_manager.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_key_templates_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_raw_jwt.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_signature_key_manager_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_error.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_verified_jwt.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_hmac_key_manager_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_public_key_verify.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_public_key_sign.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_raw_jwt_test.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_mac.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_mac_wrapper.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      copying tink/jwt/_jwt_validator.py -> build/lib.linux-x86_64-cpython-312/tink/jwt
      creating build/lib.linux-x86_64-cpython-312/tink/internal
      copying tink/internal/big_integer_util.py -> build/lib.linux-x86_64-cpython-312/tink/internal
      copying tink/internal/big_integer_util_test.py -> build/lib.linux-x86_64-cpython-312/tink/internal
      copying tink/internal/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/internal
      creating build/lib.linux-x86_64-cpython-312/tink/integration/awskms
      copying tink/integration/awskms/_aws_kms_integration_test.py -> build/lib.linux-x86_64-cpython-312/tink/integration/awskms
      copying tink/integration/awskms/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/integration/awskms
      copying tink/integration/awskms/_aws_kms_client.py -> build/lib.linux-x86_64-cpython-312/tink/integration/awskms
      copying tink/integration/awskms/_aws_kms_client_test.py -> build/lib.linux-x86_64-cpython-312/tink/integration/awskms
      creating build/lib.linux-x86_64-cpython-312/tink/integration/gcpkms
      copying tink/integration/gcpkms/_gcp_kms_client_integration_test.py -> build/lib.linux-x86_64-cpython-312/tink/integration/gcpkms
      copying tink/integration/gcpkms/_gcp_kms_client_test.py -> build/lib.linux-x86_64-cpython-312/tink/integration/gcpkms
      copying tink/integration/gcpkms/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/integration/gcpkms
      copying tink/integration/gcpkms/_gcp_kms_aead_test.py -> build/lib.linux-x86_64-cpython-312/tink/integration/gcpkms
      copying tink/integration/gcpkms/_gcp_kms_integration_test.py -> build/lib.linux-x86_64-cpython-312/tink/integration/gcpkms
      copying tink/integration/gcpkms/_gcp_kms_client.py -> build/lib.linux-x86_64-cpython-312/tink/integration/gcpkms
      creating build/lib.linux-x86_64-cpython-312/tink/integration/hcvault
      copying tink/integration/hcvault/__init__.py -> build/lib.linux-x86_64-cpython-312/tink/integration/hcvault
      copying tink/integration/hcvault/_hcvault_kms_integration_test.py -> build/lib.linux-x86_64-cpython-312/tink/integration/hcvault
      copying tink/integration/hcvault/_hcvault_kms_aead_test.py -> build/lib.linux-x86_64-cpython-312/tink/integration/hcvault
      copying tink/integration/hcvault/_hcvault_kms_aead.py -> build/lib.linux-x86_64-cpython-312/tink/integration/hcvault
      running build_ext
      bazel clean --expunge
      Extracting Bazel installation...
      Starting local Bazel server and connecting to it...
      INFO: Starting clean (this may take a while). Consider using --async if the clean takes more than several minutes.
      bazel build //tink/cc/pybind:tink_bindings --compilation_mode=opt
      Starting local Bazel server and connecting to it...
      Computing main repo mapping:
      WARNING: --enable_bzlmod is set, but no MODULE.bazel file was found at the workspace root. Bazel will create an empty MODULE.bazel file. Please consider migrating your external dependencies from WORKSPACE to MODULE.bazel. For more details, please refer to https://github.com/bazelbuild/bazel/issues/18958.
      Computing main repo mapping:
      Computing main repo mapping:
      Computing main repo mapping:
      Computing main repo mapping:
      Computing main repo mapping:
      Computing main repo mapping:
      Computing main repo mapping:
      Computing main repo mapping:
      Loading:
      Loading: 0 packages loaded
      Analyzing: target //tink/cc/pybind:tink_bindings (1 packages loaded)
      Analyzing: target //tink/cc/pybind:tink_bindings (1 packages loaded, 0 targets configured)
      Analyzing: target //tink/cc/pybind:tink_bindings (1 packages loaded, 0 targets configured)
      [0 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (2 packages loaded, 0 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (5 packages loaded, 8 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (40 packages loaded, 11 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (43 packages loaded, 11 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (76 packages loaded, 221 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (77 packages loaded, 356 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (82 packages loaded, 373 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (110 packages loaded, 995 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (132 packages loaded, 1414 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (143 packages loaded, 1853 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (144 packages loaded, 1896 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (144 packages loaded, 1896 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (144 packages loaded, 1896 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (147 packages loaded, 2692 targets configured)
      [1 / 1] checking cached actions
      Analyzing: target //tink/cc/pybind:tink_bindings (148 packages loaded, 2885 targets configured)
      [1 / 1] checking cached actions
      INFO: Analyzed target //tink/cc/pybind:tink_bindings (149 packages loaded, 3618 targets configured).
      [317 / 1,324] Creating runfiles tree bazel-out/k8-opt-exec-ST-d57f47055a04/bin/external/protobuf~/protoc.runfiles [for tool]; 0s local ... (6 actions, 3 running)
      ERROR: /root/.cache/bazel/_bazel_root/16c35be2afea190dd0630e727e9c750d/external/com_google_absl/absl/base/BUILD.bazel:95:11: Compiling absl/base/internal/spinlock_wait.cc failed: (Exit 1): gcc failed: error executing CppCompile command (from target @@com_google_absl//absl/base:spinlock_wait) /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections ... (remaining 36 arguments skipped)

      Use --sandbox_debug to see verbose messages from the sandbox and retain the sandbox build root for debugging
      In file included from external/com_google_absl/absl/base/internal/spinlock_wait.cc:27:
      external/com_google_absl/absl/base/internal/spinlock_linux.inc:17:10: fatal error: linux/futex.h: No such file or directory
         17 | #include <linux/futex.h>
            |          ^~~~~~~~~~~~~~~
      compilation terminated.
      Target //tink/cc/pybind:tink_bindings failed to build
      Use --verbose_failures to see the command lines of failed build steps.
      INFO: Elapsed time: 31.908s, Critical Path: 1.05s
      INFO: 654 processes: 654 internal.
      ERROR: Build did NOT complete successfully
      error: command '/usr/bin/bazel' 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 tink
Failed to build tink
ERROR: Could not build wheels for tink, which is required to install pyproject.toml-based projects

[notice] A new release of pip is available: 24.0 -> 24.1.1
[notice] To update, run: pip install --upgrade pip
(venv) [root@5bd985027dac workspace]#