Transition to disttag: различия между версиями

Материал из ALT Linux Wiki
м (+ссылка)
 
(не показано 17 промежуточных версий 1 участника)
Строка 27: Строка 27:
Так что выбор между двумя возможностям (как записать такие <code>Conflicts</code>, <code>Obsoletes</code>; такой <code>Requires</code> бесполезен) может быть сделан на основе более желательного поведения "старого" rpm ("rpm-install") при столкновении с такими пакетами.
Так что выбор между двумя возможностям (как записать такие <code>Conflicts</code>, <code>Obsoletes</code>; такой <code>Requires</code> бесполезен) может быть сделан на основе более желательного поведения "старого" rpm ("rpm-install") при столкновении с такими пакетами.


===Проверка Conflicts старым rpm===
===Проверка старым rpm===


====Проверка Conflicts: N > E:V-R (без disttag)====
Есть тесты [http://git.altlinux.org/gears/r/rpminstall-tests.git?p=rpminstall-tests.git;a=blob;f=constraints.mk;h=469eeb6e1e63e110c4eaf17231d32844f1b86d1b;hb=404599cfee78def05ec960cb92f34ea9c3fa795e constraints.mk], где проверяется удовлетворение требований разного вида (<code>Requires</code>, <code>Provides</code>), разных знаков (<code>>, <, =</code>) и разной точности (с указанием disttag и без, с указанием epoch и без, а также с указанием только версии). (В релизе 1.0-alt2.M70P.1 пакета {{pkg|rpminstall-tests}} тесты, в которых есть новые зависимости с disttag-ом, помечены как возможно неуспешные и имеют специальное примечание, чтобы было легче изучать результаты при использовании старого rpm.)


В качестве примера пакета с таким Conflicts возьмём {{pkg|wireshark}}, известный из {{altbug|35930}}:
Ожидаемое поведение соответствует логике нового rpm. Результаты запуска на старом rpm как раз могут дать информацию для выбора предпочтительной формы записи требований в новых пакетах, чтобы разумно обрабатываться старым rpm. Желательно выбрать такую форму, которая не вызовет непрохождение теста на старом rpm.


$ curlftpfs -o allow_other,kernel_cache ftp://ftp.altlinux.org/pub/distributions/archive /home/user/MNT/ALT/repo
Вот результаты запуска на старом rpm (список непрошедших тестов):
$ rpm -qp /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm --conflicts
libwiretap < 2.6.6-alt1
libwiretap > 2.6.6-alt1
$ rpm -qp /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm --conflicts
$ rpm -qp /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm --provides
libwiretap.so.8()(64bit) = set:ld8aYWy1b4sDqBG48DBFCfoLMB7ddqH0djoHz6nkgZxZg0U6Z4hcDibrGMxjeHecL0Im93t540UZhZkWksc6JQSTO5f5MsjHo0otcB67zHX9QF2Aib0Ju7PlbxYsbdSJXxzl9F0s39w1pgg5cHY2sOk4EayatUUDZE6rlcCvCChZdGIJymMi7r6HhL7fFnngAeD3W9u1aZ6XojbFT0s1B70TZma8q98f1K4wqAjqjV3yuVTgZwVQusUpqRSzmGE8AfCSuuYcPgn6ccnLwZJfEUcm30faIAHtdvZ1oARYoa0
libwiretap = 2.6.6-alt1:sisyphus+219299.100.2.1
$


В качестве примера пакета с конфликтом будет {{pkg|wireshark-base}}.
====Зависимости без disttag====
В качестве пакета с <code>N = E:V-R:D</code> будет {{pkg|libwiretap}} с <code>libwiretap = 2.6.6-alt1:sisyphus+219299.100.2.1</code>.


Это подпакеты одного исходного пакета, поэтому есть возможность в <code>Conflicts</code> вставить disttag той же самой сборки.
<pre>
./makeme.sh
...
XFailed tests:
noninstallable_dummyDisttag_with_reqGreaterEpoch (external dep & future pkg )
noninstallable_dummyDisttag_before_reqGreaterEpoch (external dep & future pkg )
noninstallable_virtDummyDisttag_with_reqGreaterEpoch (external dep & future pkg )
noninstallable_virtDummyDisttag_before_reqGreaterEpoch (external dep & future pkg)
</pre>


====={{fail}}Если ставится одновременно с пакетом N = E:V-R:D=====
Новый пакет (с disttag-ом) смог удовлетворить требование <code>Requires: dummy > E:V-R</code>, хотя не должен был (у него как раз те же <code>E:V-R</code> и disttag).


# rpm -U /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/{libwiretap,wireshark-base}-2.6.6-alt1.x86_64.rpm --test
Кажется, на практике это не очень важно: зависимости вида <code>Requires: dummy > E:V-R</code> скорее на практике не используются, чаще это "внешняя" (немежподпакетная) <code>Requires: dummy >= E:V-R</code>.
error: Failed dependencies:
libwiretap > 2.6.6-alt1 conflicts with wireshark-base-2.6.6-alt1.x86_64


Эффект объясним тем, что <code>2.6.6-alt1:sisyphus+219299.100.2.1</code> лексикографически больше <code>2.6.6-alt1</code> (для "старого" rpm ("rpm-install"), который не отделяет disttag).
<pre>
installable_dummyDisttag_with_conflGreaterEpoch (external dep & future pkg )
installable_dummyDisttag_before_conflGreaterEpoch (external dep & future pkg)
installable_dummyDisttag_after_conflGreaterEpoch (external dep & future pkg )
installable_virtDummyDisttag_with_conflGreaterEpoch (external dep & future pkg )
installable_virtDummyDisttag_before_conflGreaterEpoch (external dep & future pkg)
installable_virtDummyDisttag_after_conflGreaterEpoch (external dep & future pkg)
</pre>


====={{ok}}Если ставится одновременно с пакетом N = E:V-R=====
Новый пакет с disttag-ом, а в конфликте второго пакета написано просто <code>> E:V-R</code>. (Релиз
тот же самый). Ожидалось, что он поставится, но со старым rpm не так.


Это совпадает со старой ситуацией, когда disttag-а нет ни в <code>Provides</code>, ни в <code>Conflicts</code>; поэтому не буду проверять.
Такой случай и стал поводом к написанию [[altbug:35930]].
Это может быть написано, чтобы обеспечить, что подпакеты ставятся из одной сборки.
Поведение старого rpm нежелательное.
{{fail}}


====={{fail}}Если ставится в систему с пакетом N = E:V-R:D=====
<pre>
installable_dummyDisttag_with_reqEqualEpoch (external/strict-old-old dep & future pkg )
installable_dummyDisttag_before_reqEqualEpoch (external/strict-old-old dep & future pkg)
</pre>


# rpm -U /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm --nodeps
Теоретически новый пакет с disttag-ом должен был удовлетворить зависимость без disttag-а. Но со старым rpm не так.
# rpm -U /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm --test
error: Failed dependencies:
libwiretap > 2.6.6-alt1 conflicts with wireshark-base-2.6.6-alt1.x86_64
# rpm -q libwiretap
libwiretap-2.6.6-alt1.x86_64
# rpm -q libwiretap --provides
libwiretap.so.8()(64bit) =
set:ld8aYWy1b4sDqBG48DBFCfoLMB7ddqH0djoHz6nkgZxZg0U6Z4hcDibrGMxjeHecL0Im93t540UZhZkWksc6JQSTO5f5MsjHo0otcB67zHX9QF2Aib0Ju7PlbxYsbdSJXxzl9F0s39w1pgg5cHY2sOk4EayatUUDZE6rlcCvCChZdGIJymMi7r6HhL7fFnngAeD3W9u1aZ6XojbFT0s1B70TZma8q98f1K4wqAjqjV3yuVTgZwVQusUpqRSzmGE8AfCSuuYcPgn6ccnLwZJfEUcm30faIAHtdvZ1oARYoa0
libwiretap = 2.6.6-alt1:sisyphus+219299.100.2.1
#


====={{ok}}Если ставится в систему с пакетом N = E:V-R=====
Важно ли это на практике? Это может быть старая строгая межподпакетная зависимость; тогда как раз такое поведение старого rpm нас устраивает: нельзя пакетом из новой сборки удовлетворить строгую зависимость из старой сборки.
{{ok}}


Это совпадает со старой ситуацией, когда disttag-а нет ни в <code>Provides</code>, ни в <code>Conflicts</code>; поэтому не буду проверять.
<pre>
noninstallable_dummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg )
noninstallable_dummyDisttag_before_conflEqualEpoch (external/strict-old-old dep & future pkg)
noninstallable_dummyDisttag_after_conflEqualEpoch (external/strict-old-old dep & future pkg)
</pre>


====={{fail}}Если уже стоит, а ставится пакет N = E:V-R:D=====
Конфлкт с равенством <code>E:V-R</code> -- не очень интересный на практике случай. Вряд ли так пишут внешние зависимости. (Межподпакетные тоже вряд ли, хотя возможно есть и такие случаи.) Это нежалательное поведение, хоть и не очень важный случай.
{{fail}}


В качестве примера пакета с конфликтом будет {{pkg|wireshark-base}}.
=====Случаи с зависимостями без disttag, аналогичные уже рассмотренным=====
<pre>
installable_virtDummyDisttag_with_reqEqualEpoch (external/strict-old-old dep & future pkg )
installable_virtDummyDisttag_before_reqEqualEpoch (external/strict-old-old dep & future pkg)
</pre>


# rpm -U /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/wireshark-base-2.6.6-alt1.x86_64.rpm --nodeps
Аналогично случаю <code>installable_dummyDisttag_with_reqEqualEpoch</code> выше.
# rpm -q wireshark-base --conflicts
libwiretap < 2.6.6-alt1
libwiretap > 2.6.6-alt1
# rpm -U /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm --test
error: Failed dependencies:
libwiretap > 2.6.6-alt1 conflicts with (installed) wireshark-base-2.6.6-alt1.x86_64
#


====={{ok}}Если уже стоит, а ставится пакет N = E:V-R=====
Теоретически новый пакет с disttag-ом должен был удовлетворить зависимость без disttag-а. Но со старым rpm не так.


Это совпадает со старой ситуацией, когда disttag-а нет ни в <code>Provides</code>, ни в <code>Conflicts</code>; поэтому не буду проверять.
Важно ли это на пракктике? Это может быть старая строгая межподпакетная зависимость; тогда как раз такое поведение старого rpm нас устраивает: нельзя пакетом из новой сборки удовлетворить строгую зависимость из старой сборки.
{{ok}}


====Проверка Conflicts: N > E:V-R:D====
<pre>
noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg )
noninstallable_virtDummyDisttag_before_conflEqualEpoch (external/strict-old-old dep & future pkg)
noninstallable_virtDummyDisttag_after_conflEqualEpoch (external/strict-old-old dep & future pkg)
</pre>


В качестве примера пакета с таким Conflicts возьмём {{pkg|wireshark}}, известный из {{altbug|35930}}, но пересобранный так, чтобы в <code>Conflicts</code> попал disttag:
Аналогично случаю <code>noninstallable_dummyDisttag_with_conflEqualEpoch</code>.


# rpm -qp /home/user/hasher/repo/x86_64/RPMS.hasher/wireshark-base-2.6.6-alt1.x86_64.rpm --conflicts
Конфлкт с равенством <code>E:V-R</code> -- не очень интересный на практике случай. Вряд ли так пишут внешние зависимости. (Межподпакетные тоже вряд ли, хотя возможно есть и такие случаи.) Это нежалательное поведение, хоть и не очень важный случай.
libwiretap < 2.6.6-alt1:zzz+777
{{fail}}
libwiretap > 2.6.6-alt1:zzz+777
# rpm -qp /home/user/hasher/repo/x86_64/RPMS.hasher/libwiretap-2.6.6-alt1.x86_64.rpm --conflicts
# rpm -qp /home/user/hasher/repo/x86_64/RPMS.hasher/libwiretap-2.6.6-alt1.x86_64.rpm --provides
libwiretap.so.8()(64bit) =
set:ld8aYWy1b4sDqBG48DBFCfoLMB7ddqH0djoHz6nkgZxZg0U6Z4hcDibrGMxjeHecL0Im93t540UZhZkWksc6JQSTO5f5MsjHo0otcB67zHX9QF2Aib0Ju7PlbxYsbdSJXxzl9F0s39w1pgg5cHY2sOk4EayatUUDZE6rlcCvCChZdGIJymMi7r6HhL7fFnngAeD3W9u1aZ6XojbFT0s1B70TZma8q98f1K4wqAjqjV3yuVTgZwVQusUpqRSzmGE8AfCSuuYcPgn6ccnLwZJfEUcm30faIAHtdvZ1oARYoa0
libwiretap = 2.6.6-alt1:zzz+777


В качестве примера пакета с конфликтом будет {{pkg|wireshark-base}}.
<pre>
В качестве пакета с <code>N = E:V-R:D</code> будет {{pkg|libwiretap}} с <code>libwiretap = 2.6.6-alt1:zzz+777</code>.
noninstallable_dummyDisttag_with_reqGreater (elusive external dep & future pkg )
noninstallable_dummyDisttag_before_reqGreater (elusive external dep & future pkg )
noninstallable_virtDummyDisttag_with_reqGreater (elusive external dep & future pkg )
noninstallable_virtDummyDisttag_before_reqGreater (elusive external dep & future pkg)
</pre>


Это подпакеты одного исходного пакета, поэтому есть возможность в <code>Conflicts</code> вставить disttag той же самой сборки.
Аналогично случаю <code>noninstallable_dummyDisttag_with_reqGreaterEpoch</code> и т.п. (см. выше), только без эпохи в зависимости.


====={{ok}}Если ставится одновременно с пакетом N = E:V-R:D=====
<pre>
installable_dummyDisttag_with_conflGreater (elusive external dep & future pkg )
installable_dummyDisttag_before_conflGreater (elusive external dep & future pkg)
installable_dummyDisttag_after_conflGreater (elusive external dep & future pkg )
installable_virtDummyDisttag_with_conflGreater (elusive external dep & future pkg )
installable_virtDummyDisttag_before_conflGreater (elusive external dep & future pkg)
installable_virtDummyDisttag_after_conflGreater (elusive external dep & future pkg)
</pre>


# rpm -U /home/user/hasher/repo/x86_64/RPMS.hasher/{libwiretap,wireshark-base}-2.6.6-alt1.x86_64.rpm --test; echo $?
Аналогично случаю <code>installable_dummyDisttag_with_conflGreaterEpoch</code> и т.п. (см. выше), только без эпохи в зависимости (конфликте).
0


====={{fail}}Если ставится одновременно с пакетом N = E:V-R:D1 (другим)=====
[[altbug:35930]]{{fail}}


(Такой пакет возьмём из архива.)
<pre>
installable_dummyDisttag_with_reqEqual (elusive external/strict-old-old dep & future pkg )
installable_dummyDisttag_before_reqEqual (elusive external/strict-old-old dep & future pkg)
</pre>


$ curlftpfs -o allow_other,kernel_cache ftp://ftp.altlinux.org/pub/distributions/archive /home/user/MNT/ALT/repo
Аналогично случаю <code>installable_dummyDisttag_with_reqEqualEpoch</code> и т.п. (см. выше), только без эпохи в зависимости.{{ok}}
# rpm -qp /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm --provides
libwiretap.so.8()(64bit) = set:ld8aYWy1b4sDqBG48DBFCfoLMB7ddqH0djoHz6nkgZxZg0U6Z4hcDibrGMxjeHecL0Im93t540UZhZkWksc6JQSTO5f5MsjHo0otcB67zHX9QF2Aib0Ju7PlbxYsbdSJXxzl9F0s39w1pgg5cHY2sOk4EayatUUDZE6rlcCvCChZdGIJymMi7r6HhL7fFnngAeD3W9u1aZ6XojbFT0s1B70TZma8q98f1K4wqAjqjV3yuVTgZwVQusUpqRSzmGE8AfCSuuYcPgn6ccnLwZJfEUcm30faIAHtdvZ1oARYoa0
libwiretap = 2.6.6-alt1:sisyphus+219299.100.2.1
# rpm -U /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm /home/user/hasher/repo/x86_64/RPMS.hasher/wireshark-base-2.6.6-alt1.x86_64.rpm --test; echo $?
error: Failed dependencies:
wireshark-base = 2.6.6-alt1:sisyphus+219299.100.2.1 is needed by libwiretap-2.6.6-alt1.x86_64
libwiretap = 2.6.6-alt1:zzz+777 is needed by wireshark-base-2.6.6-alt1.x86_64
libwiretap < 2.6.6-alt1:zzz+777 conflicts with wireshark-base-2.6.6-alt1.x86_64
2


(Тут подействовал <code>Conflicts</code> со знаком <, но мог подействовать и > при другом значении.)
<pre>
noninstallable_dummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg )
noninstallable_dummyDisttag_before_conflEqual (elusive external/strict-old-old dep & future pkg)
noninstallable_dummyDisttag_after_conflEqual (elusive external/strict-old-old dep & future pkg)
</pre>


=====Если ставится одновременно с пакетом N = E:V-R=====
Аналогично случаю <code>noninstallable_dummyDisttag_with_conflEqualEpoch</code> и т.п. (см. выше), только без эпохи в зависимости. Неважный случай. {{fail}}


(Такой пакет возьмём позже из другой сборки.)
<pre>
installable_virtDummyDisttag_with_reqEqual (elusive external/strict-old-old dep & future pkg )
installable_virtDummyDisttag_before_reqEqual (elusive external/strict-old-old dep & future pkg)
</pre>


====={{ok}}Если ставится в систему с пакетом N = E:V-R:D=====
Аналогично случаю <code>installable_dummyDisttag_with_reqEqual</code> и т.п. (см. выше), только с виртуальным Provides.{{ok}}


# rpm -U /home/user/hasher/repo/x86_64/RPMS.hasher/libwiretap-2.6.6-alt1.x86_64.rpm --nodeps
<pre>
# rpm -q libwiretap --provides
noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg )
libwiretap.so.8()(64bit) = set:ld8aYWy1b4sDqBG48DBFCfoLMB7ddqH0djoHz6nkgZxZg0U6Z4hcDibrGMxjeHecL0Im93t540UZhZkWksc6JQSTO5f5MsjHo0otcB67zHX9QF2Aib0Ju7PlbxYsbdSJXxzl9F0s39w1pgg5cHY2sOk4EayatUUDZE6rlcCvCChZdGIJymMi7r6HhL7fFnngAeD3W9u1aZ6XojbFT0s1B70TZma8q98f1K4wqAjqjV3yuVTgZwVQusUpqRSzmGE8AfCSuuYcPgn6ccnLwZJfEUcm30faIAHtdvZ1oARYoa0
noninstallable_virtDummyDisttag_before_conflEqual (elusive external/strict-old-old dep & future pkg)
libwiretap = 2.6.6-alt1:zzz+777
noninstallable_virtDummyDisttag_after_conflEqual (elusive external/strict-old-old dep & future pkg)
# rpm -U /home/user/hasher/repo/x86_64/RPMS.hasher/wireshark-base-2.6.6-alt1.x86_64.rpm --test; echo $?
</pre>
0


====={{fail}}Если ставится в систему с пакетом N = E:V-R:D1 (disstag другой)=====
Аналогично случаю <code>noninstallable_dummyDisttag_after_conflEqual</code> и т.п. (см. выше), только с виртуальным Provides.{{fail}}


# rpm -U /home/user/MNT/ALT/repo/sisyphus/date/2019/01/18/x86_64/RPMS.classic/libwiretap-2.6.6-alt1.x86_64.rpm --nodeps
====Зависимости с disttag====
# rpm -q libwiretap --provides
libwiretap.so.8()(64bit) = set:ld8aYWy1b4sDqBG48DBFCfoLMB7ddqH0djoHz6nkgZxZg0U6Z4hcDibrGMxjeHecL0Im93t540UZhZkWksc6JQSTO5f5MsjHo0otcB67zHX9QF2Aib0Ju7PlbxYsbdSJXxzl9F0s39w1pgg5cHY2sOk4EayatUUDZE6rlcCvCChZdGIJymMi7r6HhL7fFnngAeD3W9u1aZ6XojbFT0s1B70TZma8q98f1K4wqAjqjV3yuVTgZwVQusUpqRSzmGE8AfCSuuYcPgn6ccnLwZJfEUcm30faIAHtdvZ1oARYoa0
libwiretap = 2.6.6-alt1:sisyphus+219299.100.2.1
# rpm -U /home/user/hasher/repo/x86_64/RPMS.hasher/wireshark-base-2.6.6-alt1.x86_64.rpm --test; echo $?
error: Failed dependencies:
libwiretap = 2.6.6-alt1:zzz+777 is needed by wireshark-base-2.6.6-alt1.x86_64
libwiretap < 2.6.6-alt1:zzz+777 conflicts with wireshark-base-2.6.6-alt1.x86_64
1
#


<pre>
noninstallable_dummy_with_reqLessEpochDisttag (bogus future dep & old pkg )
noninstallable_dummy_before_reqLessEpochDisttag (bogus future dep & old pkg )
noninstallable_virtDummy_with_reqLessEpochDisttag (bogus future dep & old pkg )
noninstallable_virtDummy_before_reqLessEpochDisttag (bogus future dep & old pkg)
</pre>


=====Если ставится в систему с пакетом N = E:V-R=====
Перевёрнутый случай <code>noninstallable_dummyDisttag_with_reqGreaterEpoch</code> и т.п.


(Такой пакет возьмём позже из другой сборки.)
Старый пакет без disttag-а смог удовлетворить требование <code>Requires: dummy < E:V-R:D</code>, хотя не должен был (у него как раз те же <code>E:V-R</code>).


=====Если уже стоит, а ставится пакет N = E:V-R:D=====
На практике это совсем неважно, потому что зависимость такого вида вряд ли кто-то напишет: межподпакетная зависимость со знаком "меньше" бессмысленна (не может быть удовлетворена), а внешнюю зависимость по идее невозможно написать с disttag-ом, потому что точная сборка другого пакета неизвестна. И даже вообще disttag не имеет смысла после знака "меньше" (с т.зр.нового rpm). Поэтому я её пометил "bogus" в тестах. Будем считать, что такая обработка старым rpm-ом нас устраивает, потому что по сути речь идёт про невозможную форму зависимости.{{ok}}


=====Если уже стоит, а ставится пакет N = E:V-R:D1 (disstag другой)=====
<pre>
installable_dummy_with_conflLessEpochDisttag (bogus future dep & old pkg )
installable_dummy_before_conflLessEpochDisttag (bogus future dep & old pkg)
installable_dummy_after_conflLessEpochDisttag (bogus future dep & old pkg )
installable_virtDummy_with_conflLessEpochDisttag (bogus future dep & old pkg )
installable_virtDummy_before_conflLessEpochDisttag (bogus future dep & old pkg)
installable_virtDummy_after_conflLessEpochDisttag (bogus future dep & old pkg)
nonobsoleted_dummy_with_obsolLessEpochDisttag (bogus future dep & old pkg )
nonobsoleted_dummy_updated_with_obsolLessEpochDisttag (bogus future dep & old pkg )
nonobsoleted_dummy_before_obsolLessEpochDisttag (bogus future dep & old pkg )
nonobsoleted_dummy_after_obsolLessEpochDisttag (bogus future dep & old pkg )
</pre>


=====Если уже стоит, а ставится пакет N = E:V-R=====
Указание disttag-а не имеет смысла во внешней зависмости со знаком "меньше", а также невозможно по сути, потому что сборка другого пакета неизвестна. Указать же disttag во "внутренней" (межподпакетной или самоконфликте, точнее конфликте на себя другой версии) возможно, но с т.зр. нового rpm опять же не имеет смысла.


(Такой пакет возьмём позже из другой сборки.)
Так что для нового rpm таким образом всё равно не получается запретить ставить подпакет из другой сборки, хотя и хотелось бы. А для старого rpm, как мы видим в этих тестах, это иногда именно так и работает: пакет из старой сборки (без disttag-а) нельзя поставить старым rpm вместе с таким конфликтом. (То же самое получается и с заменой под действием <code>Obsoletes</code>.) Такое поведение нас устраивает.{{ok}}


====Проверка Conflicts: N < E:V-R (без disttag)====
<pre>
nonobsoleted_dummyDisttag_with_obsolLessEpochDisttag (bogus future dep & future pkg )
nonobsoleted_dummyDisttag_updated_with_obsolLessEpochDisttag (bogus future dep & future pkg )
nonobsoleted_dummyDisttag_before_obsolLessEpochDisttag (bogus future dep & future pkg )
nonobsoleted_dummyDisttag_after_obsolLessEpochDisttag (bogus future dep & future pkg )
</pre>


(Вообще, это неинтересный вариант, потому что мы ожидаем, что всё получится, т.е. в отличие от [[#Проверка Conflicts: N > E:V-R (без disttag)]] он не выявляет никаких ошибок и неявляется исследованием нового предложния.)
Так же, как в предыдущем случае <code>nonobsoleted_dummy_with_obsolLessEpochDisttag</code>, только старым rpm вытесняется уже пакет из той же самой сборки (имеющий тот же disttag), что, конечно, неправильно, нежелательно. (Возможно, связано с недоработкой при обработке <code>Obsoletes</code> и disttag в вытесняемом пакете.){{fail}}


Точно так же, как в [[#Проверка Conflicts: N > E:V-R (без disttag)]]:
Не очень понятно, встречается ли такое, что есть подпакет <code>p-subA</code> и <code>p-subB</code>, и в <code>p-subB</code> написано <code>Obsoletes: p-subA < %EVR</code>. Тогда это нежелательное поведение могло бы проявиться. Мне кажется, такое вряд ли бывает, чтобы был <code>Obsoletes</code> на некое имя и это имя сохранялось за неким новым подпакетом.


В качестве примера пакета с конфликтом будет {{pkg|wireshark-base}} (с только одним оставленным конфлкиктом в результате пересборки, в отличие от примера из [[#Проверка Conflicts: N > E:V-R (без disttag)]]).
<pre>
obsoleted_dummyDisttag_before_obsolEqualEpochDisttag (unrealistic obsoleting disttag )
</pre>


В качестве пакета с <code>N = E:V-R:D</code> будет {{pkg|libwiretap}} с <code>libwiretap = 2.6.6-alt1:zzz+777</code>.
Неинтересный случай, когда вытесняют точную сборку (или точный релиз). На практике вряд ли такое пишут.


Это подпакеты одного исходного пакета.
=====Случаи с зависимостями с disttag, аналогичные уже рассмотренным=====


$ rpm -qp /home/user/hasher/repo/x86_64/RPMS.hasher/wireshark-base-2.6.6-alt1.x86_64.rpm --conflicts
<pre>
libwiretap < 2.6.6-alt1
noninstallable_dummy_with_reqLessDisttag (elusive bogus future dep )
$ rpm -qp /home/user/hasher/repo/x86_64/RPMS.hasher/libwiretap-2.6.6-alt1.x86_64.rpm
noninstallable_dummy_before_reqLessDisttag (elusive bogus future dep )
libwiretap-2.6.6-alt1.x86_64
noninstallable_virtDummy_with_reqLessDisttag (elusive bogus future dep )
$ rpm -qp /home/user/hasher/repo/x86_64/RPMS.hasher/libwiretap-2.6.6-alt1.x86_64.rpm --provides
noninstallable_virtDummy_before_reqLessDisttag (elusive bogus future dep )
libwiretap.so.8()(64bit) = set:ld8aYWy1b4sDqBG48DBFCfoLMB7ddqH0djoHz6nkgZxZg0U6Z4hcDibrGMxjeHecL0Im93t540UZhZkWksc6JQSTO5f5MsjHo0otcB67zHX9QF2Aib0Ju7PlbxYsbdSJXxzl9F0s39w1pgg5cHY2sOk4EayatUUDZE6rlcCvCChZdGIJymMi7r6HhL7fFnngAeD3W9u1aZ6XojbFT0s1B70TZma8q98f1K4wqAjqjV3yuVTgZwVQusUpqRSzmGE8AfCSuuYcPgn6ccnLwZJfEUcm30faIAHtdvZ1oARYoa0
installable_dummy_with_conflLessDisttag (elusive bogus future dep )
libwiretap = 2.6.6-alt1:zzz+777
installable_dummy_before_conflLessDisttag (elusive bogus future dep)
$
installable_dummy_after_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_with_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_before_conflLessDisttag (elusive bogus future dep)
installable_virtDummy_after_conflLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_updated_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_before_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_after_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_updated_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_before_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_after_obsolLessDisttag (elusive bogus future dep )
obsoleted_dummyDisttag_before_obsolEqualDisttag (unrealistic obsoleting disttag )
</pre>


====={{ok}}Если ставится одновременно с пакетом N = E:V-R:D=====
====Прочая информация от тестирования====


Как и ожидалось (по лексикографическому сравнению):
<pre>
installable_provVR3Disttag_with_reqEq_VR3 (elusive external/strict-old-old dep & future pkg )
installable_provVR3Disttag_before_reqEq_VR3 (elusive external/strict-old-old dep & future pkg)
Failed tests:
noninstallable_provOnlyV_with_reqVR
noninstallable_provOnlyV_before_reqVR
installable_provOnlyV_with_conflVR
installable_provOnlyV_before_conflVR
make: *** [/home/user/wip/2019-01-rpm-disttag/rpminstall-tests/Makefile:29: all_tests] Error 1
$ rpm -q rpm rpm-build --lastchange
* Пт окт 05 2018 Gleb F-Malinovskiy <glebfm@> 4.13.0.1-alt4
- Add _allow_deps_with_beginning_dot macro to allow dependencies
  beginning with a dot character in spec file (vseleznv@).
* Чт янв 31 2019 Gleb F-Malinovskiy <glebfm@> 4.0.4-alt126
- imz@:
  + shell.req: correctly detect #!/bin/env bash (ALT#35376).
  + platform.in: completely expand %_libsuff (/usr/lib%nil was ugly).
- Fixed getopt(3) use in parameterized macros parser.
</pre>


# rpm -U /home/user/hasher/repo/x86_64/RPMS.hasher/{libwiretap,wireshark-base}-2.6.6-alt1.x86_64.rpm --test
# echo $?
0


====={{ok}}Если ставится одновременно с пакетом N = E:V-R=====
Ещё можно рассмотреть случай (не описанный в тестах constraints.mk), когда пакет с требованием с указанием disttag-а <code>E:V-R:D</code> ставится с пакетом <code>N = E:V-R:D1</code> (тем же именем, но с другим disttag-ом).


Это совпадает со старой ситуацией, когда disttag-а нет ни в <code>Provides</code>, ни в <code>Conflicts</code>; поэтому не буду проверять.
== Ссылки ==
 
* [[Binary package identity change]]
====={{ok}}Если ставится в систему с пакетом N = E:V-R:D=====
 
Как и ожидалось (по лексикографическому сравнению):
 
# rpm -U /home/user/hasher/repo/x86_64/RPMS.hasher/libwiretap-2.6.6-alt1.x86_64.rpm --nodeps
# rpm -U /home/user/hasher/repo/x86_64/RPMS.hasher/wireshark-base-2.6.6-alt1.x86_64.rpm --test; echo $?
0
 
====={{ok}}Если ставится в систему с пакетом N = E:V-R=====
 
Это совпадает со старой ситуацией, когда disttag-а нет ни в <code>Provides</code>, ни в <code>Conflicts</code>; поэтому не буду проверять.
 
====={{ok}}Если уже стоит, а ставится пакет N = E:V-R:D=====
 
Как и ожидалось (по лексикографическому сравнению):
 
# rpm -U /home/user/hasher/repo/x86_64/RPMS.hasher/wireshark-base-2.6.6-alt1.x86_64.rpm --nodeps
# rpm -U /home/user/hasher/repo/x86_64/RPMS.hasher/libwiretap-2.6.6-alt1.x86_64.rpm --test; echo $?
0
 
====={{ok}}Если уже стоит, а ставится пакет N = E:V-R=====
 
Это совпадает со старой ситуацией, когда disttag-а нет ни в <code>Provides</code>, ни в <code>Conflicts</code>; поэтому не буду проверять.
 
====Проверка Conflicts: N < E:V-R:D====
 
=====Если ставится одновременно с пакетом N = E:V-R:D=====
 
=====Если ставится одновременно с пакетом N = E:V-R=====
 
=====Если ставится в систему с пакетом N = E:V-R:D=====
 
=====Если ставится в систему с пакетом N = E:V-R=====
 
=====Если уже стоит, а ставится пакет N = E:V-R:D=====
 
=====Если уже стоит, а ставится пакет N = E:V-R=====

Текущая версия от 14:13, 1 ноября 2019


В "идентификаторах" пакетов (основных Provides) появился disttag (D: N-E:V-R:D), который различает разные сборки пакета из одних и тех же исходников (E:V-R). Disttag имеет особую семантику при участии в удовлетворении зависимостей и т.п., а также при принятии решения об обновлении (какая сборка пакета будет предпочтительна).

Желаемое поведение

Желаемое поведение rpm ("rpm-install") в отношении disttag вот такое:

...

Мы полагаем, что такое поведение уже реализовано в "новом" rpm ("rpm-install"), а именно 4.13.0.1-alt5.

Особенности поведения "нового" и "старого" rpm ("rpm-install") в отношении disttag

Здесь нас особенно волнует поведение "старого" rpm ("rpm-install"), а именно 4.13.0.1-alt4 или старого из p8 и пр., при столкновении с пакетом, где уже используется disttag (был добавлен туда "новым" rpm-build).

Что касается "нового" rpm ("rpm-install"), то он задуман так, что требования N > E:V-R:D и N > E:V-R (без disttag) будут удволетворяться одним и тем же множеством пакетов (потому что disttag-и несравнимы), а значит, будут иметь одинаковый эффект:

  • Requires: N > E:V-R:D и Requires: N > E:V-R (без disttag);
  • Conflicts: N > E:V-R:D и Conflicts: N > E:V-R (без disttag);
  • Obsoletes: N > E:V-R:D и Obsoletes: N > E:V-R (без disttag).

То же самое верно для другого строгого знака: требования N < E:V-R:D и N < E:V-R (без disttag) будут удволетворяться одним и тем же множеством пакетов.

Внимание! К сожалению, с появлением обработки disttag-ов в новом rpm Conflicts уже ни в каком виде больше не смогут гарантировать то, что мейнтейнер хотел выразить в некоторых случаях: что не могут одновременно стоять пакеты из разных сборок. (Но всё же возможно потребовать, чтобы они были из одних исходников, а именно релиза пакета.)


Так что выбор между двумя возможностям (как записать такие Conflicts, Obsoletes; такой Requires бесполезен) может быть сделан на основе более желательного поведения "старого" rpm ("rpm-install") при столкновении с такими пакетами.

Проверка старым rpm

Есть тесты constraints.mk, где проверяется удовлетворение требований разного вида (Requires, Provides), разных знаков (>, <, =) и разной точности (с указанием disttag и без, с указанием epoch и без, а также с указанием только версии). (В релизе 1.0-alt2.M70P.1 пакета rpminstall-tests тесты, в которых есть новые зависимости с disttag-ом, помечены как возможно неуспешные и имеют специальное примечание, чтобы было легче изучать результаты при использовании старого rpm.)

Ожидаемое поведение соответствует логике нового rpm. Результаты запуска на старом rpm как раз могут дать информацию для выбора предпочтительной формы записи требований в новых пакетах, чтобы разумно обрабатываться старым rpm. Желательно выбрать такую форму, которая не вызовет непрохождение теста на старом rpm.

Вот результаты запуска на старом rpm (список непрошедших тестов):

Зависимости без disttag

./makeme.sh
...
XFailed tests:
noninstallable_dummyDisttag_with_reqGreaterEpoch (external dep & future pkg )
noninstallable_dummyDisttag_before_reqGreaterEpoch (external dep & future pkg )
noninstallable_virtDummyDisttag_with_reqGreaterEpoch (external dep & future pkg )
noninstallable_virtDummyDisttag_before_reqGreaterEpoch (external dep & future pkg)

Новый пакет (с disttag-ом) смог удовлетворить требование Requires: dummy > E:V-R, хотя не должен был (у него как раз те же E:V-R и disttag).

Кажется, на практике это не очень важно: зависимости вида Requires: dummy > E:V-R скорее на практике не используются, чаще это "внешняя" (немежподпакетная) Requires: dummy >= E:V-R.

installable_dummyDisttag_with_conflGreaterEpoch (external dep & future pkg )
installable_dummyDisttag_before_conflGreaterEpoch (external dep & future pkg)
installable_dummyDisttag_after_conflGreaterEpoch (external dep & future pkg )
installable_virtDummyDisttag_with_conflGreaterEpoch (external dep & future pkg )
installable_virtDummyDisttag_before_conflGreaterEpoch (external dep & future pkg)
installable_virtDummyDisttag_after_conflGreaterEpoch (external dep & future pkg)

Новый пакет с disttag-ом, а в конфликте второго пакета написано просто > E:V-R. (Релиз тот же самый). Ожидалось, что он поставится, но со старым rpm не так.

Такой случай и стал поводом к написанию altbug:35930. Это может быть написано, чтобы обеспечить, что подпакеты ставятся из одной сборки. Поведение старого rpm нежелательное. Test-result-fail.png 

installable_dummyDisttag_with_reqEqualEpoch (external/strict-old-old dep & future pkg )
installable_dummyDisttag_before_reqEqualEpoch (external/strict-old-old dep & future pkg)

Теоретически новый пакет с disttag-ом должен был удовлетворить зависимость без disttag-а. Но со старым rpm не так.

Важно ли это на практике? Это может быть старая строгая межподпакетная зависимость; тогда как раз такое поведение старого rpm нас устраивает: нельзя пакетом из новой сборки удовлетворить строгую зависимость из старой сборки. Test-result-pass.png 

noninstallable_dummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg )
noninstallable_dummyDisttag_before_conflEqualEpoch (external/strict-old-old dep & future pkg)
noninstallable_dummyDisttag_after_conflEqualEpoch (external/strict-old-old dep & future pkg)

Конфлкт с равенством E:V-R -- не очень интересный на практике случай. Вряд ли так пишут внешние зависимости. (Межподпакетные тоже вряд ли, хотя возможно есть и такие случаи.) Это нежалательное поведение, хоть и не очень важный случай. Test-result-fail.png 

Случаи с зависимостями без disttag, аналогичные уже рассмотренным
installable_virtDummyDisttag_with_reqEqualEpoch (external/strict-old-old dep & future pkg )
installable_virtDummyDisttag_before_reqEqualEpoch (external/strict-old-old dep & future pkg)

Аналогично случаю installable_dummyDisttag_with_reqEqualEpoch выше.

Теоретически новый пакет с disttag-ом должен был удовлетворить зависимость без disttag-а. Но со старым rpm не так.

Важно ли это на пракктике? Это может быть старая строгая межподпакетная зависимость; тогда как раз такое поведение старого rpm нас устраивает: нельзя пакетом из новой сборки удовлетворить строгую зависимость из старой сборки. Test-result-pass.png 

noninstallable_virtDummyDisttag_with_conflEqualEpoch (external/strict-old-old dep & future pkg )
noninstallable_virtDummyDisttag_before_conflEqualEpoch (external/strict-old-old dep & future pkg)
noninstallable_virtDummyDisttag_after_conflEqualEpoch (external/strict-old-old dep & future pkg)

Аналогично случаю noninstallable_dummyDisttag_with_conflEqualEpoch.

Конфлкт с равенством E:V-R -- не очень интересный на практике случай. Вряд ли так пишут внешние зависимости. (Межподпакетные тоже вряд ли, хотя возможно есть и такие случаи.) Это нежалательное поведение, хоть и не очень важный случай. Test-result-fail.png 

noninstallable_dummyDisttag_with_reqGreater (elusive external dep & future pkg )
noninstallable_dummyDisttag_before_reqGreater (elusive external dep & future pkg )
noninstallable_virtDummyDisttag_with_reqGreater (elusive external dep & future pkg )
noninstallable_virtDummyDisttag_before_reqGreater (elusive external dep & future pkg)

Аналогично случаю noninstallable_dummyDisttag_with_reqGreaterEpoch и т.п. (см. выше), только без эпохи в зависимости.

installable_dummyDisttag_with_conflGreater (elusive external dep & future pkg )
installable_dummyDisttag_before_conflGreater (elusive external dep & future pkg)
installable_dummyDisttag_after_conflGreater (elusive external dep & future pkg )
installable_virtDummyDisttag_with_conflGreater (elusive external dep & future pkg )
installable_virtDummyDisttag_before_conflGreater (elusive external dep & future pkg)
installable_virtDummyDisttag_after_conflGreater (elusive external dep & future pkg)

Аналогично случаю installable_dummyDisttag_with_conflGreaterEpoch и т.п. (см. выше), только без эпохи в зависимости (конфликте).

altbug:35930Test-result-fail.png 

installable_dummyDisttag_with_reqEqual (elusive external/strict-old-old dep & future pkg )
installable_dummyDisttag_before_reqEqual (elusive external/strict-old-old dep & future pkg)

Аналогично случаю installable_dummyDisttag_with_reqEqualEpoch и т.п. (см. выше), только без эпохи в зависимости.Test-result-pass.png 

noninstallable_dummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg )
noninstallable_dummyDisttag_before_conflEqual (elusive external/strict-old-old dep & future pkg)
noninstallable_dummyDisttag_after_conflEqual (elusive external/strict-old-old dep & future pkg)

Аналогично случаю noninstallable_dummyDisttag_with_conflEqualEpoch и т.п. (см. выше), только без эпохи в зависимости. Неважный случай. Test-result-fail.png 

installable_virtDummyDisttag_with_reqEqual (elusive external/strict-old-old dep & future pkg )
installable_virtDummyDisttag_before_reqEqual (elusive external/strict-old-old dep & future pkg)

Аналогично случаю installable_dummyDisttag_with_reqEqual и т.п. (см. выше), только с виртуальным Provides.Test-result-pass.png 

noninstallable_virtDummyDisttag_with_conflEqual (elusive external/strict-old-old dep & future pkg )
noninstallable_virtDummyDisttag_before_conflEqual (elusive external/strict-old-old dep & future pkg)
noninstallable_virtDummyDisttag_after_conflEqual (elusive external/strict-old-old dep & future pkg)

Аналогично случаю noninstallable_dummyDisttag_after_conflEqual и т.п. (см. выше), только с виртуальным Provides.Test-result-fail.png 

Зависимости с disttag

noninstallable_dummy_with_reqLessEpochDisttag (bogus future dep & old pkg )
noninstallable_dummy_before_reqLessEpochDisttag (bogus future dep & old pkg )
noninstallable_virtDummy_with_reqLessEpochDisttag (bogus future dep & old pkg )
noninstallable_virtDummy_before_reqLessEpochDisttag (bogus future dep & old pkg)

Перевёрнутый случай noninstallable_dummyDisttag_with_reqGreaterEpoch и т.п.

Старый пакет без disttag-а смог удовлетворить требование Requires: dummy < E:V-R:D, хотя не должен был (у него как раз те же E:V-R).

На практике это совсем неважно, потому что зависимость такого вида вряд ли кто-то напишет: межподпакетная зависимость со знаком "меньше" бессмысленна (не может быть удовлетворена), а внешнюю зависимость по идее невозможно написать с disttag-ом, потому что точная сборка другого пакета неизвестна. И даже вообще disttag не имеет смысла после знака "меньше" (с т.зр.нового rpm). Поэтому я её пометил "bogus" в тестах. Будем считать, что такая обработка старым rpm-ом нас устраивает, потому что по сути речь идёт про невозможную форму зависимости.Test-result-pass.png 

installable_dummy_with_conflLessEpochDisttag (bogus future dep & old pkg )
installable_dummy_before_conflLessEpochDisttag (bogus future dep & old pkg)
installable_dummy_after_conflLessEpochDisttag (bogus future dep & old pkg )
installable_virtDummy_with_conflLessEpochDisttag (bogus future dep & old pkg )
installable_virtDummy_before_conflLessEpochDisttag (bogus future dep & old pkg)
installable_virtDummy_after_conflLessEpochDisttag (bogus future dep & old pkg)
nonobsoleted_dummy_with_obsolLessEpochDisttag (bogus future dep & old pkg )
nonobsoleted_dummy_updated_with_obsolLessEpochDisttag (bogus future dep & old pkg )
nonobsoleted_dummy_before_obsolLessEpochDisttag (bogus future dep & old pkg )
nonobsoleted_dummy_after_obsolLessEpochDisttag (bogus future dep & old pkg )

Указание disttag-а не имеет смысла во внешней зависмости со знаком "меньше", а также невозможно по сути, потому что сборка другого пакета неизвестна. Указать же disttag во "внутренней" (межподпакетной или самоконфликте, точнее конфликте на себя другой версии) возможно, но с т.зр. нового rpm опять же не имеет смысла.

Так что для нового rpm таким образом всё равно не получается запретить ставить подпакет из другой сборки, хотя и хотелось бы. А для старого rpm, как мы видим в этих тестах, это иногда именно так и работает: пакет из старой сборки (без disttag-а) нельзя поставить старым rpm вместе с таким конфликтом. (То же самое получается и с заменой под действием Obsoletes.) Такое поведение нас устраивает.Test-result-pass.png 

nonobsoleted_dummyDisttag_with_obsolLessEpochDisttag (bogus future dep & future pkg )
nonobsoleted_dummyDisttag_updated_with_obsolLessEpochDisttag (bogus future dep & future pkg )
nonobsoleted_dummyDisttag_before_obsolLessEpochDisttag (bogus future dep & future pkg )
nonobsoleted_dummyDisttag_after_obsolLessEpochDisttag (bogus future dep & future pkg )

Так же, как в предыдущем случае nonobsoleted_dummy_with_obsolLessEpochDisttag, только старым rpm вытесняется уже пакет из той же самой сборки (имеющий тот же disttag), что, конечно, неправильно, нежелательно. (Возможно, связано с недоработкой при обработке Obsoletes и disttag в вытесняемом пакете.)Test-result-fail.png 

Не очень понятно, встречается ли такое, что есть подпакет p-subA и p-subB, и в p-subB написано Obsoletes: p-subA < %EVR. Тогда это нежелательное поведение могло бы проявиться. Мне кажется, такое вряд ли бывает, чтобы был Obsoletes на некое имя и это имя сохранялось за неким новым подпакетом.

obsoleted_dummyDisttag_before_obsolEqualEpochDisttag (unrealistic obsoleting disttag )

Неинтересный случай, когда вытесняют точную сборку (или точный релиз). На практике вряд ли такое пишут.

Случаи с зависимостями с disttag, аналогичные уже рассмотренным
noninstallable_dummy_with_reqLessDisttag (elusive bogus future dep )
noninstallable_dummy_before_reqLessDisttag (elusive bogus future dep )
noninstallable_virtDummy_with_reqLessDisttag (elusive bogus future dep )
noninstallable_virtDummy_before_reqLessDisttag (elusive bogus future dep )
installable_dummy_with_conflLessDisttag (elusive bogus future dep )
installable_dummy_before_conflLessDisttag (elusive bogus future dep)
installable_dummy_after_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_with_conflLessDisttag (elusive bogus future dep )
installable_virtDummy_before_conflLessDisttag (elusive bogus future dep)
installable_virtDummy_after_conflLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_updated_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_before_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummy_after_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_updated_with_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_before_obsolLessDisttag (elusive bogus future dep )
nonobsoleted_dummyDisttag_after_obsolLessDisttag (elusive bogus future dep )
obsoleted_dummyDisttag_before_obsolEqualDisttag (unrealistic obsoleting disttag )

Прочая информация от тестирования

installable_provVR3Disttag_with_reqEq_VR3 (elusive external/strict-old-old dep & future pkg )
installable_provVR3Disttag_before_reqEq_VR3 (elusive external/strict-old-old dep & future pkg)
Failed tests:
noninstallable_provOnlyV_with_reqVR
noninstallable_provOnlyV_before_reqVR
installable_provOnlyV_with_conflVR
installable_provOnlyV_before_conflVR
make: *** [/home/user/wip/2019-01-rpm-disttag/rpminstall-tests/Makefile:29: all_tests] Error 1
$ rpm -q rpm rpm-build --lastchange
* Пт окт 05 2018 Gleb F-Malinovskiy <glebfm@> 4.13.0.1-alt4
- Add _allow_deps_with_beginning_dot macro to allow dependencies
  beginning with a dot character in spec file (vseleznv@).
* Чт янв 31 2019 Gleb F-Malinovskiy <glebfm@> 4.0.4-alt126
- imz@:
  + shell.req: correctly detect #!/bin/env bash (ALT#35376).
  + platform.in: completely expand %_libsuff (/usr/lib%nil was ugly).
- Fixed getopt(3) use in parameterized macros parser.


Ещё можно рассмотреть случай (не описанный в тестах constraints.mk), когда пакет с требованием с указанием disttag-а E:V-R:D ставится с пакетом N = E:V-R:D1 (тем же именем, но с другим disttag-ом).

Ссылки