Народ (#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 :(
Игорь, я очень надеюсь, что в следующий раз, прежде чем отправлять бомбу в Сизиф, вы её испытаете у себя. Вот что вы сделали: $ 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, нельзя отправлять в Сизиф такие битые пакеты.
(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.
> $ 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
я java перезалил (alt2.1) в сухом остатке проблема apt. опять вешаю на apt.
(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. Какая?
> 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 добавлены. > Какая? см. выше.
(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?
(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 репозитария, в этом, как мне кажется, и проблема.
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 побороться.
Как я понимаю, решать проблему нужно радикально: оставить разбивку x86_64 noarch i586 в files, но на уровне симлинков оставить только i586/RPMS.classic и x86_64/RPMS.classic noarch/RPMS.classic оставить, пустым, для совместимости.
(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. Возможно, Алексей Турбин знает про это больше.
summary is changed to kill Sisyphus noarch repo [was: java-1.6.0-sun is not installable]
Неактуально?
2 led: не сталкивался с таким?
(В ответ на комментарий №13) > Неактуально? Как я понимаю, проблема сама по себе не решена и существует, грабли ждут следующую жертву. Поэтому если вопрос актуально ли для меня - то не актуально, я тропинки в обход протоптал. Если же для сизифа - то, как я понимаю, актуально.
(In reply to comment #15) > (В ответ на комментарий №13) > > Неактуально? > > Как я понимаю, проблема сама по себе не решена и существует, С тех пор genbasedir и hasher изменились в этой области.
(В ответ на комментарий №16) > (In reply to comment #15) > > (В ответ на комментарий №13) > > > Неактуально? > > > > Как я понимаю, проблема сама по себе не решена и существует, > > С тех пор genbasedir и hasher изменились в этой области. Лень тестовый пакет собирать :) закрывайте, будем ждать следующую жертву :)