Skip to content

fix build: fix dependencies#1254

Closed
Malevrovich wants to merge 11 commits into
userver-framework:developfrom
Malevrovich:fix/alpine-build-dependencies
Closed

fix build: fix dependencies#1254
Malevrovich wants to merge 11 commits into
userver-framework:developfrom
Malevrovich:fix/alpine-build-dependencies

Conversation

@Malevrovich

Copy link
Copy Markdown
Contributor

No description provided.

@Malevrovich Malevrovich force-pushed the fix/alpine-build-dependencies branch 14 times, most recently from 75c8712 to 59422c7 Compare June 15, 2026 10:34
@Malevrovich Malevrovich force-pushed the fix/alpine-build-dependencies branch from 59422c7 to d357b6c Compare June 15, 2026 11:08
@Malevrovich

Malevrovich commented Jun 15, 2026

Copy link
Copy Markdown
Contributor Author

Вот история войны

Что ломалось в Alpine CI

  1. Компиляция clang20 → линковка через GNU ld (первая проблема)
    Симптомы:
    clang++-20: error: unable to execute command: Executable "ld" doesn't exist!
    Почему ломалось:
  • Alpine использует выборочные пакеты, не обязательно устанавливает binutils с ld
  • clang20 по умолчанию ищет GNU linker /usr/bin/ld
  • URL: https://github.com/userver-framework/userver/actions/runs/27537706131
    Решение: clang22 + патч.cfg с -fuse-ld=lld заставил clang использовать lld вместо ld
  1. Компиляция clang20 → linker (lld) но runtime файлы отсутствуют (альтернативный симптом)
    Симптомы:
    /usr/bin/ld: cannot find crtbeginS.o: No such file or directory
    /usr/bin/ld: unable to find library -lgcc_s
    /usr/bin/ld: unable to find library -lgcc
    Почему ломалось:
  • lld есть, но не может найти:
  • crtbeginS.o, crtendS.o — runtime файлы GCC
  • libgcc_s.so, libgcc.a — GCC runtime библиотеки
  • clang20 ищет GCC installation в (/usr/lib/gcc/..., находит GCC 15.2.0 путём "Found candidate GCC installation:"
    но в Alpine тоже не все runtime файлы были установлены
    Решение: gcc пакет даёт полный GCC runtime (crtbeginS.o, libgcc_s, libgcc)
  1. Установка grpcio → pkg_resources не найден
    Симптомы:
    File "", line 40, in
    ModuleNotFoundError: No module named 'pkg_resources'
    ERROR: Failed to build 'grpcio' when getting requirements to build wheel
    Почему ломалось:
  • grpcio<1.63.0 (включая 1.62.3) использует import pkg_resources в setup.py напрямую
  • Alpine поставляет Python 3.14 с setuptools 82+ (setuptools=82.0.1)
  • setuptools 82+ убрал модуль pkg_resources как deprecated API (был запланирован к удалению в 2025-11-30)
  • pip при сборке grpcio из исходного кода создаёт build isolation environment с setuptools 82+ из PyPI, который не имеет pkg_resources
  • Даже если установлено setuptools<81 в venv, build isolation игнорирует его
    Решение: protobuf 5.26.0 = protobuf 5 = категория 5 = requirements-grpc-5.txt с grpcio >= 1.63.0
  1. Что даёт grpcio >= 1.63.0
    Почему не ломалось:
  • grpcio 1.81.1 (последняя версия >=1.63.0) распространяется как pre-built wheel (grpcio-1.81.1-cp314-cp314-musllinux_1_2_aarch64.whl)
  • Wheel не требует сборки из исходного кода → нет pkg_resources зависимости
  • grpcio-tools 1.81.1 тоже работает как wheel (хотя иногда соберёт abseil.c++ internally)
  1. Сборка grpcio-tools → стандартные C++ заголовки не найдены
    Симптомы:
    third_party/grpc_root/include/grpc/impl/codegen_types.h:12:10: fatal error: 'cstdint' file not found
    third_party/grpc_root/include/grpcpp/support/config.h:11:10: fatal error: 'string' file not found
    Почему ломалось:
  • При использовании --rtlib=compiler-rt clang++-22 отрезается от GCC заголовков
  • clang не искал стандартные C++ заголовки в /usr/include/c++/15.2.0/ (GCC 15.2.0)
  • std:: library заголовки из GCC runtime не были доступны
    Почему нужен был gcc:
  • clang22 по умолчанию использует ld.lld + --rtlib=compiler-rt → не может найти crtbeginS.o, libgcc_s
  • clang22 в isolation не может собирать grpcio-tools без GCC заголовков
  • apk add gcc даёт полный GCC runtime (libgcc_s, crtbeginS.o) + libstdc++ заголовки
    Как теперь работает:
  1. apk add gcc → установки GCC 15.2.0 полностью с crtbeginS.o, libgcc_s, crtendS.o
  2. clang22 → использует lld для линковки (патч.cfg: -fuse-ld=lld)
  3. clang22 → видит GCC runtime файлы натурально (нет --rtlib=compiler-rt)
  4. grpcio-tools → собирается успешно, видит /usr/include/c++/15.2.0/ заголовки
  5. protobuf версия → grpcio версия зависимость
    Логика:
    protobuf версия Категория в userver grpcio версия (requirements-grpc-X.txt)
    4.24.4 4 grpcio >= 1.50.0, < 1.63.0 (ломаный)
    5.26.0 5 grpcio >= 1.63.0 (работающий wheel)
    6.30.0+ 6 grpcio >= 1.72.0 (также работает)
    Почему protobuf 4 не работало:
  • protobuf 4 = категория 4 = requirements-grpc-4.txt
  • grpcio < 1.63.0 = требует pkg_resources → ломается на setuptools 82+
    Почему protobuf 5 работает:
  • protobuf 5.26.0 = категория 5 = requirements-grpc-5.txt
  • grpcio >= 1.63.0 = не требует pkg_resources (pre-built wheel)

@Malevrovich Malevrovich changed the title fix build: update dependencies for Alpine fix build: fix dependencies Jun 16, 2026
@ArkadyRudenko

Copy link
Copy Markdown
Contributor

LGTM

@robot-magpie

robot-magpie Bot commented Jun 16, 2026

Copy link
Copy Markdown

Many thanks for the PR! @ArkadyRudenko is now importing your pull request into our internal upstream repository.

@robot-magpie

robot-magpie Bot commented Jun 16, 2026

Copy link
Copy Markdown

✅ This pull request is being closed because it has been successfully merged into our internal monorepository.
Your changes will be pushed to this repository soon. Thank you for your contribution!

@robot-magpie robot-magpie Bot closed this Jun 16, 2026
robot-piglet pushed a commit that referenced this pull request Jun 16, 2026
No description

---

Pull Request resolved: #1254
commit_hash:436a133638612b47efa6ba96e7ec26dbe7171ada
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants