ha(packaging): musllinux-wheel для HA OS и статический C++-рантайм
- _corebuild.musl_platform_tag(): на musl (Alpine/HA OS) bdist_wheel выпускает py3-none-musllinux_X_Y_<arch> вместо linux_<arch> — иначе pip ставит glibc-сборку и dlopen падает на ld-linux-x86-64.so.2 - shared-библиотека линкуется со -static-libstdc++ -static-libgcc (gcc): NEEDED только libm/libc (проверено readelf), меньше зависимостей у HA OS - Gitea Actions: job build-musllinux (container python:3.12-alpine) собирает и публикует musl-wheel; build-glibc — как раньше; общий scripts/publish-gitea-pypi.sh с пропуском уже загруженных файлов - тесты musl_platform_tag; RELEASE_HA §1.1-1.4 (выбор wheel, переустановка на HA OS, ручная сборка musllinux без container:); README troubleshooting
This commit is contained in:
+45
-3
@@ -29,9 +29,18 @@ Workflow: `.gitea/workflows/publish-pyfglair.yaml` (workflow объявляет
|
||||
|
||||
Запуск: Actions → **Publish pyfglair** → Run workflow (вход
|
||||
`bundled_mbedtls`: `1` — встроить mbedtls, `0` — системный
|
||||
`libmbedtls-dev`). Артефакт появится в
|
||||
`libmbedtls-dev`). Собираются **два** wheel одной версии:
|
||||
|
||||
* `py3-none-linux_x86_64` — glibc (HA Supervised/Core на Debian/Ubuntu);
|
||||
* `py3-none-musllinux_1_2_x86_64` — musl (**HA OS**, Alpine-контейнер);
|
||||
job `build-musllinux` выполняется в `container: python:3.12-alpine`
|
||||
(нужен `container:` у runner'а; иначе см. §1.4).
|
||||
|
||||
Артефакты появятся в
|
||||
`https://git.ratigorsk-12.ru/api/packages/<owner>/pypi/simple/pyfglair/`
|
||||
(`<owner>` — владелец репозитория, напр. `esphome`).
|
||||
(`<owner>` — владелец репозитория, напр. `esphome`). C++-рантайм в .so
|
||||
встроен (`-static-libstdc++ -static-libgcc`), поэтому wheel зависит только
|
||||
от libc/libm соответствующей платформы.
|
||||
|
||||
Workflow собирает `wheel` + `sdist`, прогоняет smoke-тест установки
|
||||
(запускается из `/tmp` с `python -P`, чтобы не подхватить исходники
|
||||
@@ -42,6 +51,9 @@ Workflow собирает `wheel` + `sdist`, прогоняет smoke-тест
|
||||
|
||||
### 1.2. Установка pyfglair в Home Assistant
|
||||
|
||||
Выбор wheel pip делает сам по платформе: на HA OS (Alpine/musl) — из
|
||||
musllinux, на HA Supervised/Core (Debian/glibc) — из linux-сборки.
|
||||
|
||||
Пакет обязателен (cffi-биндинги). Варианты:
|
||||
|
||||
* **Вручную в окружение HA** (проще всего для теста; HA увидит
|
||||
@@ -66,7 +78,37 @@ Workflow собирает `wheel` + `sdist`, прогоняет smoke-тест
|
||||
|
||||
* **Публичный PyPI** — см. §2 (для распространения вне сети).
|
||||
|
||||
### 1.3. Обновление интеграции
|
||||
### 1.3. Если HA уже установил glibc-wheel на HA OS
|
||||
|
||||
Симптом: `OSError: cannot load library ... Error loading shared library
|
||||
ld-linux-x86-64.so.2: No such file or directory`. Переустановите пакет с
|
||||
musllinux-сборкой:
|
||||
|
||||
```sh
|
||||
docker exec homeassistant python -m pip uninstall -y pyfglair
|
||||
docker exec homeassistant python -m pip install --no-deps --index-url \
|
||||
https://<user>:<token>@git.ratigorsk-12.ru/api/packages/<owner>/pypi/simple \
|
||||
pyfglair
|
||||
docker exec homeassistant python -c "import pyfglair; print(pyfglair.__version__)"
|
||||
docker restart homeassistant
|
||||
```
|
||||
|
||||
### 1.4. Ручная сборка musllinux (если runner без `container:`)
|
||||
|
||||
```sh
|
||||
docker run --rm -v "$PWD":/src -w /src python:3.12-alpine sh -c '
|
||||
apk add --no-cache git cmake ninja g++ make curl libstdc++-dev &&
|
||||
pip install build &&
|
||||
python -m build --wheel'
|
||||
# dist/pyfglair-<ver>-py3-none-musllinux_1_2_x86_64.whl
|
||||
|
||||
pip install twine
|
||||
python -m twine upload --repository-url \
|
||||
https://git.ratigorsk-12.ru/api/packages/<owner>/pypi \
|
||||
-u <user> -p <token> dist/*musllinux*.whl
|
||||
```
|
||||
|
||||
### 1.5. Обновление интеграции
|
||||
|
||||
`custom_components/fglair/` обновляется из Gitea (git pull / копирование),
|
||||
затем перезапуск HA. `pyfglair` — переустановкой из пакетов Gitea.
|
||||
|
||||
Reference in New Issue
Block a user