Bug 17674 - kill Sisyphus noarch repo [was: java-1.6.0-sun is not installable]
Summary: kill Sisyphus noarch repo [was: java-1.6.0-sun is not installable]
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: apt-utils (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: Dmitry V. Levin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 17657
  Show dependency tree
 
Reported: 2008-10-24 20:36 MSD by viy
Modified: 2009-09-20 16:58 MSD (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description viy 2008-10-24 20:36:06 MSD
Народ (#17657) возмущается, что
java-1.6.0-sun стал вытягивать fonts-ttf-java-1.5.0-sun:
The following packages will be upgraded
  fonts-ttf-java-1.6.0-sun java-1.6.0-sun java-1.6.0-sun-devel
The following NEW packages will be installed:
  fonts-ttf-java-1.5.0-sun.

И я знаю, что причиной --
в fonts-ttf-java-1.6.0-sun я добавил BuildArch: noarch,
в результате fonts-ttf-java-1.6.0-sun стал noarch,
а fonts-ttf-java-1.5.0-sun остался arch.

Таким образом, по-видимому, apt расклинило на границе
arch/noarch и он стал выдавать некорректный, вообще говоря,
результат.

Почему некорректный? Потому что java-1.6.0-sun = 1.6.0.10-alt1
требует fonts-ttf-j2se-sun >= 1.6.0.10-alt1.

fonts-ttf-java-1.6.0-sun провайдит fonts-ttf-j2se-sun >= 1.6.0.10-alt1.
он подходит.
fonts-ttf-java-1.5.0-sun провайдит fonts-ttf-j2se-sun >= 1.5.0.16-alt1.
он не подходит, но вытягивается тем не менее.

при этом в fonts-ttf-java-1.6.0-sun
есть непрямые Obsoletes на fonts-ttf-java-1.5.0-sun.
$ rpmquery --obsoletes fonts-ttf-java-1.6.0-sun
...
fonts-ttf-j2se-sun < 1.6.0.10-alt1
java-1.5.0-fonts

Т.е. fonts-ttf-java-1.5.0-sun провайдит
и java-1.5.0-fonts, и fonts-ttf-j2se-sun = 1.5.х,
и по хорошему должен был бы обсолетиться.

Он и обсолетился, эта вся механика работала
до BuildArch: noarch в fonts-ttf-java-1.6.0-sun
:(
Comment 1 Dmitry V. Levin 2008-10-25 01:54:11 MSD
Игорь, я очень надеюсь, что в следующий раз, прежде чем отправлять бомбу в Сизиф,
вы её испытаете у себя.

Вот что вы сделали:
$ hsh-install java-1.6.0-sun
file /usr/share/fonts/ttf/j2se-sun/LucidaTypewriterRegular.ttf conflicts between attempted installs of fonts-ttf-java-1.6.0-sun-1.6.0.10-alt1 and fonts-ttf-java-1.5.0-sun-1.5.0.16-alt1
hsh-install: Packages installation failed.

В чём причина проблемы?  В зависимостях:
$ rpmquery -pR java-1.6.0-sun-1.6.0.10-alt1.x86_64.rpm |fgrep fonts
fonts-ttf-j2se-sun >= 1.6.0.10-alt1
/usr/share/fonts/ttf/j2se-sun  
/usr/share/fonts/ttf/j2se-sun-oblique  

С первой всё в порядке:
$ aptbox/apt-get -q install -y --print-uris 'fonts-ttf-j2se-sun>=1.6.0.10-alt1'
Чтение списков пакетов...
Построение дерева зависимостей...
Selected version fonts-ttf-java-1.6.0-sun#0:1.6.0.10-alt1 for fonts-ttf-j2se-sun>=1.6.0.10-alt1
Следующие дополнительные пакеты будут установлены:
  fontconfig fonts-ttf-java-1.6.0-sun libexpat libfreetype
Следующие НОВЫЕ пакеты будут установлены:
  fontconfig fonts-ttf-java-1.6.0-sun libexpat libfreetype
0 будет обновлено, 4 новых установлено, 0 пакетов будет удалено и 0 не будет обновлено.

А вот что со второй:
$ aptbox/apt-get -q install -y --print-uris /usr/share/fonts/ttf/j2se-sun
Чтение списков пакетов...
Построение дерева зависимостей...
Выбрано fonts-ttf-java-1.5.0-sun для '/usr/share/fonts/ttf/j2se-sun'
Следующие дополнительные пакеты будут установлены:
  fontconfig fonts-ttf-java-1.5.0-sun libexpat libfreetype
Следующие НОВЫЕ пакеты будут установлены:
  fontconfig fonts-ttf-java-1.5.0-sun libexpat libfreetype
0 будет обновлено, 4 новых установлено, 0 пакетов будет удалено и 0 не будет обновлено.

В результате все java-пакеты в Сизифе отправлены под откос.

Источник файловых зависимостей очевиден:
$ rpmquery -lvp java-1.6.0-sun-1.6.0.10-alt1.x86_64.rpm |fgrep fonts
lrwxrwxrwx    1 root    root               39 Окт 23 03:36 /usr/lib/jvm/java-1.6.0-sun-1.6.0.10/jre/lib/fonts -> ../../../../../share/fonts/ttf/j2se-sun
lrwxrwxrwx    1 root    root               47 Окт 23 03:36 /usr/lib/jvm/java-1.6.0-sun-1.6.0.10/jre/lib/oblique-fonts -> ../../../../../share/fonts/ttf/j2se-sun-oblique

Для справки:
$ grep '^/usr/share/fonts/ttf/j2se-sun[[:space:]]' Sisyphus/*/base/contents_index 
Sisyphus/i586/base/contents_index:/usr/share/fonts/ttf/j2se-sun    /usr/share/fonts/ttf/j2se-sun
Sisyphus/noarch/base/contents_index:/usr/share/fonts/ttf/j2se-sun  fonts-ttf-java-1.6.0-sun
Sisyphus/x86_64/base/contents_index:/usr/share/fonts/ttf/j2se-sun  fonts-ttf-java-1.5.0-sun
$ grep '^/usr/share/fonts/ttf/j2se-sun-oblique[[:space:]]' Sisyphus/*/base/contents_index 
Sisyphus/i586/base/contents_index:/usr/share/fonts/ttf/j2se-sun-oblique    fonts-ttf-java-1.5.0-sun
Sisyphus/noarch/base/contents_index:/usr/share/fonts/ttf/j2se-sun-oblique  fonts-ttf-java-1.6.0-sun
Sisyphus/x86_64/base/contents_index:/usr/share/fonts/ttf/j2se-sun-oblique  fonts-ttf-java-1.5.0-sun

Мораль: как бы не работал apt, нельзя отправлять в Сизиф такие битые пакеты.
Comment 2 viy 2008-10-25 12:09:12 MSD
(In reply to comment #1)
> Игорь, я очень надеюсь, что в следующий раз, прежде чем отправлять бомбу в
> Сизиф, вы её испытаете у себя.

Напомню, с точки зрения rpm пакеты корректны.
Т.е. у меня собранный пакет молча установится через rpm -Uvh,
я просто физически не смогу увидеть проблему.

Более того, с точки зрения apt эти пакеты корректны, 
пока не пересекают границу репозитария.
Напомню, что java-1.6.0-sun = 1.6.0.07-altxx
имел в точности такую же стркутуру зависимостей,
но его fonts-ttf-java-1.6.0-sun не пересекал границ репозитариев
и ставился на ура.

Поэтому, если я воспользуюсь hsh-install для дополнительной проверки, 
(у меня локально) проблем не будет, так как 
все пакеты будут лежать в одном репозитории RPMS.hasher
и опять же не пересекут границ репозитария.

> Мораль: как бы не работал apt, нельзя отправлять в Сизиф такие битые пакеты.
Это неверная мораль. Хочу подчеркнуть, что 

1) вообще говоря, пакеты не битые, так как проблема с apt возникает, 
только если пакеты разложить по репозиториям специальным образом

2) У меня локально нет возможности выявить эту проблему.
IMHO, единственный способ ее заметить - выложить пакеты в Сизиф :)

Если знаете другой способ, делитесь, это должен быть нетривиальный трюк,
который стоит озвучить в devel@ и записать на wiki.
может быть даже оформить в виде скрипта в rpm-utils.
Comment 3 viy 2008-10-25 12:15:02 MSD
> $ aptbox/apt-get -q install -y --print-uris /usr/share/fonts/ttf/j2se-sun
> Чтение списков пакетов...
> Построение дерева зависимостей...
> Выбрано fonts-ttf-java-1.5.0-sun для '/usr/share/fonts/ttf/j2se-sun'
я понимаю, и писал об этом.
fonts-ttf-java-1.6.0-sun переехал в noarch, 
fonts-ttf-java-1.5.0-sun остался в аrch.

файловая зависимость объясняет, почему fonts-ttf-java-1.5.0-sun вытянулся 
(считая, что особенность apt, связанная с тем, что файловые зависимости разрешаются только внутри репозитария, неизлечима.
Хотя с другой стороны, это как раз повод лечить: 
Это как раз типичная проблема, порождденная поддержкой 
подпакетов с BuildArch: noarch)

но не обьясняет, почему не сработали Obsoletes: из fonts-ttf-java-1.6.0-sun:
$ rpmquery --obsoletes fonts-ttf-java-1.6.0-sun
...
fonts-ttf-j2se-sun < 1.6.0.10-alt1
java-1.5.0-fonts
Comment 4 viy 2008-10-26 00:49:28 MSD
я java перезалил (alt2.1)
в сухом остатке проблема apt.
опять вешаю на apt.
Comment 5 Dmitry V. Levin 2008-10-26 00:55:27 MSD
(In reply to comment #3)
> файловая зависимость объясняет, почему fonts-ttf-java-1.5.0-sun вытянулся 
> (считая, что особенность apt, связанная с тем, что файловые зависимости
> разрешаются только внутри репозитария, неизлечима.

Причина в другом:
$ aptbox/apt-cache showpkg /usr/share/fonts/ttf/j2se-sun-oblique
Package: /usr/share/fonts/ttf/j2se-sun-oblique
Versions: 

Reverse Depends: 
  java-1.6.0-sun,/usr/share/fonts/ttf/j2se-sun-oblique
  java-1.5.0-sun,/usr/share/fonts/ttf/j2se-sun-oblique
Dependencies: 
Provides: 
Reverse Provides: 
fonts-ttf-java-1.5.0-sun 0:1.5.0.16-alt1

Поскольку в списке provides присутствует только fonts-ttf-java-1.5.0-sun,
ничего удивительного в том, что происходит попытка его установки, нет.

> почему не сработали Obsoletes: из fonts-ttf-java-1.6.0-sun:
> $ rpmquery --obsoletes fonts-ttf-java-1.6.0-sun
> ...
> fonts-ttf-j2se-sun < 1.6.0.10-alt1

Obsoletes действует только на невиртуальные пакеты.

(In reply to comment #4)
> я java перезалил (alt2.1)

Ещё нет (файл ещё не закачан).  И зачем?

> в сухом остатке проблема apt.

Какая?
Comment 6 viy 2008-10-26 01:09:28 MSD
> fonts-ttf-java-1.5.0-sun 0:1.5.0.16-alt1
> Поскольку в списке provides присутствует только fonts-ttf-java-1.5.0-sun,
> ничего удивительного в том, что происходит попытка его установки, нет.

java-1.6.0-sun тоже провайдит /usr/share/fonts/ttf/j2se-sun-oblique,
но apt не использует этого --- 
у нас искусственное разделение метаданных на arch/noarch, в то время как использование BuildArch: ноарч позволяет создавать пакеты,
которые идут и в arch, и в noarch.

И это стоит только поощрять, так как Сизиф похудеет на пару гб.
Но тогда надо что-то делать с этим расщеплением метаданных.

> Obsoletes действует только на невиртуальные пакеты.
Понял. 

> > я java перезалил (alt2.1)
> Ещё нет (файл ещё не закачан).  И зачем?
Явные Obsoletes добавлены.

> Какая?
см. выше.

Comment 7 Dmitry V. Levin 2008-10-26 01:19:34 MSD
(In reply to comment #6)
> java-1.6.0-sun тоже провайдит /usr/share/fonts/ttf/j2se-sun-oblique,
> но apt не использует этого --- 

Нет, apt использует всё, что есть в индексах.
А в индексах есть только это:

Reverse Provides: 
fonts-ttf-java-1.5.0-sun 0:1.5.0.16-alt1

Вопрос: почему в Reverse Provides нет fonts-ttf-java-1.6.0-sun?
Comment 8 viy 2008-10-26 01:26:31 MSD
(In reply to comment #7)
> Вопрос: почему в Reverse Provides нет fonts-ttf-java-1.6.0-sun?

напомню, раньше fonts-ttf-java-1.6.0-sun был arch пакетом и все было ок -
он находился и ставился.
как только он стал noarch (c помощью BuildArch: noarch)
apt перестал его находить в Reverse Provides.

IMHO, сейчас поиск файловых зависисимостей в apt 
не выходит за пределы arch репозитария, в этом,
как мне кажется, и проблема.
Comment 9 viy 2008-10-26 13:00:48 MSK
VIY> > почему не сработали Obsoletes: из fonts-ttf-java-1.6.0-sun:
LDV> Obsoletes действует только на невиртуальные пакеты.

Но явные Obsoletes: тоже не сработали: см.
https://bugzilla.altlinux.org/show_bug.cgi?id=17657#c6
https://bugzilla.altlinux.org/show_bug.cgi?id=17657#c7

Напомню, я могу убрать BuildArch: noarch в fonts-ttf-java-1.6.0-sun,
и все будет ok.
Но это плохое решение, надо за BuildArch: noarch побороться.
Comment 10 viy 2008-10-26 13:09:49 MSK
Как я понимаю, решать проблему нужно радикально:
оставить разбивку x86_64 noarch i586 в files,
но на уровне симлинков оставить только
i586/RPMS.classic
и x86_64/RPMS.classic
noarch/RPMS.classic оставить, пустым, для совместимости.
Comment 11 Dmitry V. Levin 2008-10-26 20:26:57 MSK
(In reply to comment #7)
> (In reply to comment #6)
> > java-1.6.0-sun тоже провайдит /usr/share/fonts/ttf/j2se-sun-oblique,
> > но apt не использует этого --- 
> 
> Нет, apt использует всё, что есть в индексах.
> А в индексах есть только это:
> 
> Reverse Provides: 
> fonts-ttf-java-1.5.0-sun 0:1.5.0.16-alt1
> 
> Вопрос: почему в Reverse Provides нет fonts-ttf-java-1.6.0-sun?

Будем считать, что это особенность работы genbasedir.
Возможно, Алексей Турбин знает про это больше.
Comment 12 viy 2008-10-30 13:36:07 MSK
summary is changed to 
kill Sisyphus noarch repo 
[was: java-1.6.0-sun is not installable]
Comment 13 Dmitry V. Levin 2009-09-20 02:42:10 MSD
Неактуально?
Comment 14 Michael Shigorin 2009-09-20 16:21:00 MSD
2 led: не сталкивался с таким?
Comment 15 viy 2009-09-20 16:25:33 MSD
(В ответ на комментарий №13)
> Неактуально?

Как я понимаю, проблема сама по себе не решена и существует,
грабли ждут следующую жертву.

Поэтому если вопрос актуально ли для меня - то не актуально,
я тропинки в обход протоптал.
Если же для сизифа - то, как я понимаю, актуально.
Comment 16 Dmitry V. Levin 2009-09-20 16:44:45 MSD
(In reply to comment #15)
> (В ответ на комментарий №13)
> > Неактуально?
> 
> Как я понимаю, проблема сама по себе не решена и существует,

С тех пор genbasedir и hasher изменились в этой области.
Comment 17 viy 2009-09-20 16:58:40 MSD
(В ответ на комментарий №16)
> (In reply to comment #15)
> > (В ответ на комментарий №13)
> > > Неактуально?
> > 
> > Как я понимаю, проблема сама по себе не решена и существует,
> 
> С тех пор genbasedir и hasher изменились в этой области.

Лень тестовый пакет собирать :) закрывайте, будем ждать следующую жертву :)