Bug 59882 - Provides: node/nodejs/node.js с завышенной версией вытесняет stable node из разрешения зависимостей
Summary: Provides: node/nodejs/node.js с завышенной версией вытесняет stable node из р...
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: node-nightly (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 major
Assignee: majioa@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2026-07-20 19:58 MSK by Ajrat Makhmutov
Modified: 2026-07-20 21:12 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Ajrat Makhmutov 2026-07-20 19:58:38 MSK
node-nightly-25.8.2-alt2 объявляет виртуальные Provides, дублирующие
базовый пакет node, причём с более высокой версией:

    Provides: node    = %EVR   (= 25.8.2-alt2)
    Provides: nodejs  = %EVR   (= 25.8.2-alt2)
    Provides: node.js = %EVR   (= 25.8.2-alt2)
    Provides: npm(npm) = 11.11.1

Стабильный node в Sisyphus — 22.22.2-alt1. Он предоставляет
`nodejs`/`node.js`, но НЕ предоставляет `node` (это его собственное Name).

В результате виртуальные capability `node`, `nodejs`, `node.js` теперь
имеют двух провайдеров, и версия у node-nightly всегда выше (nightly-канал:
25.x, 26.x против stable 22.x). apt при разрешении любой зависимости вида

    Requires: nodejs
    Requires: nodejs >= 22.18.0
    Requires: node
    BuildRequires: nodejs >= <любая>

выбирает node-nightly как провайдера с наибольшей версией, вместо
стабильного node. Тем самым node-nightly, будучи установленным/доступным
в репозитории, ПОЛНОСТЬЮ вытесняет node для всей экосистемы, а не только
для тех, кто явно хочет nightly.

Особенно опасен `Provides: node = %EVR`: nightly выдаёт себя за сам пакет
node (а не только за виртуальный nodejs), поэтому его подхватывают даже
пакеты, зависящие конкретно от `node` / `/usr/bin/node`.

Дополнительно рассинхронизируется npm: stable node выносит npm в отдельный
subpackage (Requires: node), а node-nightly бандлит npm внутри и отдаёт лишь
capability `npm(npm)`. Пакет, ожидающий бинарь /usr/bin/npm из subpackage
npm, при выборе node-nightly может остаться без него.

Steps to Reproduce:

1. Репозиторий содержит node-22.22.2-alt1 и node-nightly-25.8.2-alt2.
2. В чистом hasher-окружении затребовать зависимость:
     apt-get install nodejs
   или собрать пакет с `BuildRequires: nodejs >= 22.18.0`
   (пример: electron).
3. Посмотреть, какой пакет установлен.

Actual result:

Установлен node-nightly-25.8.2-alt2 (Provides: nodejs = 25.8.2 — старшая
версия). Появление/исчезновение бинаря npm зависит от того, какой node
выбран, что даёт невоспроизводимые сборки: разные сборщики одной задачи
получают разный node.

Expected result:

При отсутствии явного запроса именно nightly должен ставиться стабильный
node-22.22.2-alt1. node-nightly — параллельный/opt-in канал и не должен
автоматически перехватывать зависимости на node/nodejs.

Notes:

Обнаружено при сборке electron-42.4.0-alt1: BuildRequires: nodejs >= 22.18.0
резолвился в node-nightly, чей бандленный npm присутствовал непредсказуемо
(в Sisyphus сборка проходила, на p11 — падала: npm-run.py → FileNotFoundError:
'npm').
Comment 1 Малъ Скрылевъ 2026-07-20 21:12:21 MSK
А BuildConflicts не пробовали?