Bug 30806

Summary: [FR] ручка для регулировки поведения при раскрытии списков пакетов
Product: Sisyphus Reporter: Michael Shigorin <mike>
Component: mkimageAssignee: Michael Shigorin <mike>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: enhancement    
Priority: P3 CC: antohami, boyarsh, cas, glebfm, klark.devel, legion, manowar, mike, rider, sem, vseleznv, zerg
Version: unstable   
Hardware: all   
OS: Linux   
URL: http://git.altlinux.org/people/boyarsh/packages/mkimage.git?p=mkimage.git;a=commitdiff;h=d18a6f5d73829a051976a8e88848af675333162b

Description Michael Shigorin 2015-03-04 23:44:23 MSK
Начиная с http://git.altlinux.org/gears/m/mkimage.git?p=mkimage.git;a=commitdiff;h=bfaa201fc7c7536d5f48dfb0c7bd7cbcaa2898f8 (входит в 0.0.6 и далее), mkimage умеет укладывать в субпрофиль конфликтующие пакеты; насколько помню, сделано было для возможности положить несколько MTA в RPMS.disk.

На типичных субпрофилях, где пакеты не копируются, а устанавливаются, такая смена поведения приводит к возможности конфликтов уже при установке; проще всего пронаблюдать подобное, когда используются и IMAGE_PACKAGES, и IMAGE_PACKAGES_REGEXP, причём в IMAGE_PACKAGES что-либо вытягивает виртуальную зависимость (и происходит разрешение её в конкретный вариант), а в IMAGE_PACKAGES_REGEXP задаётся другой вариант, предоставляющий ту же зависимость.

Эту багу давно следовало вынести из тудушки и сформулировать хотя бы так, на этот раз поймал bug 30805 и решил всё-таки зафиксировать.

Пока непонятно, как может выглядеть интерфейс, меняющий поведение.  Возможно, в нулевом приближении следует изменить tools/mki-image-pkgs и tools/mki-expand-pkgs таким образом, чтобы для copy резолвить по отдельности, для install -- одной транзакцией.
Comment 1 manowar@altlinux.org 2018-02-07 23:57:29 MSK
Потенциальное решение: http://git.altlinux.org/people/manowar/packages/mkimage-profiles.git?p=mkimage-profiles.git;a=commitdiff;h=d2f8dcc56c5c025e885940b5e9c0982db368033a . Правда, писалось чуть для другого.
Comment 3 manowar@altlinux.org 2018-02-09 01:55:45 MSK
И снова: http://git.altlinux.org/people/manowar/packages/mkimage-profiles.git?p=mkimage-profiles.git;a=commitdiff;h=326ff794049244150b346e260d21ac126bb17e1a .
(больше, наверное, не буду делать push --force)
Comment 4 Michael Shigorin 2018-02-20 19:16:05 MSK
В случае regular-mate-20180214 напоролись на такую штуку:
среди переданных на сборку списков есть включающий mate-full
файл-список tagged/desktop+mate; mate-full R: mate-default,
который ранее требовал firefox, а недавно стал требовать
webclient; в итоге где-то мы слишком рано/изолированно
раскрыли список и получили rekonq вдобавок к позже приехавшему
в списке просто имён пакетов firefox.

Чтение mki-image-pkgs -> mki-expand-pkgs -> mki-sh-functions::mki_list_pkgs()
мне пока не дало ответа на то, где же такое могло произойти -- mki-expand-pkgs ведь не дёргает резолвер apt, а оперирует максимум кэшем, применяя регэксы самостоятельно.

2 legion: Лёш, не подскажешь, куда копать?
Маленький тестовый пример, наверное, могу изобразить.

2 manowar: спасибо; предсказуемый побочный эффект -- изменение настроек apt для формируемого корня (может быть существенно для ve/vm и устанавливаемых livecd).
Comment 5 Leonid Krivoshein 2018-02-20 22:31:10 MSK
(In reply to comment #4)
> В случае regular-mate-20180214 напоролись на такую штуку:

Оказалось это фича apt'а -- сносим всё и делаем по-новой:

# apt-get install xsane firefox
... будут установлены:
firefox rekonq xsane

Не, лучше не так, а эдак:

# apt-get install firefox xsane
... будут установлены:
firefox xsane

Т.е. от перемены мест слагаемых в образ может затянуться куча всего, ага. Решение с приоритетами, предложенное выше manowar@, дистрибутивно правильное, тем более, что файлик там патчится во временном APT-боксе, в образ это не приезжает (см. #3).

Можно ли и (стоит ли) делать подобное средствами mkimage? Можно, поправив алгоритм построения финального списка. Но суть останется, так что ничего лучше тут, наверное, не придумаешь.
Comment 6 Leonid Krivoshein 2018-02-20 22:38:51 MSK
И ещё:

# echo "  firefox" >> /etc/apt/pkgpriorites
# apt-get install xsane firefox
... будут установлены:
firefox xsane

Теперь от места слагаемого, предоставляющего webclient, ничего не зависит!
Comment 7 Alexey Gladkov 2018-02-21 01:49:16 MSK
(В ответ на комментарий №4)
> Чтение mki-image-pkgs -> mki-expand-pkgs -> mki-sh-functions::mki_list_pkgs()
> мне пока не дало ответа на то, где же такое могло произойти -- mki-expand-pkgs
> ведь не дёргает резолвер apt, а оперирует максимум кэшем, применяя регэксы
> самостоятельно.
> 
> 2 legion: Лёш, не подскажешь, куда копать?
> Маленький тестовый пример, наверное, могу изобразить.

Если буде тестовый пример (я смогу запустить его на varmor), то обязательно посмотрю. Я смогу сказать более предметно, когда пройму в чём проблема. Миш, ты можешь более подробно описать проблему ?

(В ответ на комментарий №6)
> И ещё:
> 
> # echo "  firefox" >> /etc/apt/pkgpriorites
> # apt-get install xsane firefox
> ... будут установлены:
> firefox xsane
> 
> Теперь от места слагаемого, предоставляющего webclient, ничего не зависит!

Я конечно не вник в проблему, но подход мне нравится на первый взгляд :)
Comment 8 Leonid Krivoshein 2018-02-21 03:10:01 MSK
(В ответ на комментарий №7)
> (В ответ на комментарий №4)
> Если буде тестовый пример (я смогу запустить его на varmor), то обязательно
> посмотрю. Я смогу сказать более предметно, когда пройму в чём проблема.
> 
> (В ответ на комментарий №6)
> Я конечно не вник в проблему, но подход мне нравится на первый взгляд :)

Написал более подробно в devel@:
https://lists.altlinux.org/pipermail/devel/2018-February/203947.html
Comment 9 Leonid Krivoshein 2018-02-21 03:26:06 MSK
Алексей, касательно правки mkimage. Считаю, что если никто не будет править apt, то обязательно надо поменять в mkimage везде, где идут "|xargs -r" при формировании окончательного списка пакетов на что-то типа "|sort -u |xargs -r". И дальше начинать уворачиваться от шишек, которые полезут из m-p из-за РАЗОВОЙ смены очерёдности перечисления пакетов. Зато потом у нас таких проблем с порядком их следования больше возникать не будет.
Comment 10 Anton Farygin 2018-02-21 08:59:08 MSK
Это кажется, что не будет возникать. А на самом деле всё у всех взорвётся.

На самом деле, конечно, можно попробовать сделать pkgpriorites частью профиля. В этом случае действительно проблемы можно будет обходить с помощью него.

Но ещё более правильную идею носит Глеб - отказаться от виртуальных пакетов.
Можно начать этот процесс.
Comment 11 Leonid Krivoshein 2018-02-21 10:16:36 MSK
(В ответ на комментарий №10)
> На самом деле, конечно, можно попробовать сделать pkgpriorites частью профиля.
> В этом случае действительно проблемы можно будет обходить с помощью него.

Для этого предложенное manowar@ хорошо бы сделать чуть более радикальным: перед удалением APT-бокса, pkgpriorites из него нужно копировать в целевой чрут.

> Это кажется, что не будет возникать. А на самом деле всё у всех взорвётся.

Добавление сортировки финального списка перед передачей его APT'у предложено для решения совсем другой задачи и по случаю обнаруженной такой его особенности. sort -u улучшит предсказуемость (воспроизводимость) сборки куда более динамично меняющегося m-p.
Comment 12 Alexey Gladkov 2018-02-21 11:26:06 MSK
Я согласен с предложением Леонида. Сортированный список даст предсказуемость обработки списка пакетов. Кроме того, если это добавлять, то я добавлю переменную чтобы вернуть старое поведение и тогда особо сложные профили можно будет не менять, добавив его.

У нас уже есть GLOBAL_HSH_APT_CONFIG и HSH_APT_CONFIG, но я не помню покрывают ли случай, который нам нужен и достаточно ли их или нужно ещё что-то. Кажется его должно быть достаточно, чтобы на каждой стадии определить свой pkgpriorities и preferences (если нужно).
Comment 13 Leonid Krivoshein 2018-02-21 12:26:36 MSK
(In reply to comment #12)
> У нас уже есть GLOBAL_HSH_APT_CONFIG и HSH_APT_CONFIG, но я не помню покрывают
> ли случай, который нам нужен и достаточно ли их или нужно ещё что-то.

Я бы ещё обратил внимание на скрипт mkaptbox из пакета hasher (строки 246-290), где _создаётся_ APT-боксовый apt.conf. Возможно, воспроизводимость была потому, что мы традиционно в последние годы использовали одинаковый pkgpriorities. Но, если этот файл будет отличаться от машины к машине, такой воспроизводимости из-за виртуальных пакетов может не стать. Это тоже придётся учесть, добавив хотя бы в часть "create initial apt.conf" нечто "стандартное" из apt-conf-sisyphus. Хотя, возможно, для базовой системы это не критично, но для образов, собираемых mki, будет критично.
Comment 14 Alexey Gladkov 2018-03-21 19:10:02 MSK
Миш, ping
Comment 15 Sergey V Turchin 2018-03-22 09:34:37 MSK
(В ответ на комментарий №12)
> У нас уже есть GLOBAL_HSH_APT_CONFIG и HSH_APT_CONFIG, но я не помню покрывают
> ли случай, который нам нужен и достаточно ли их или нужно ещё что-то. Кажется
> его должно быть достаточноо
Да. Он же позволяет полностью изменить конфигурацию apt вплоть до RPM::Ignore в /etc/apt/apt.conf .
Comment 16 Michael Shigorin 2018-05-24 17:47:59 MSK
(В ответ на комментарий №3)
> И снова:
Спасибо, принял в mkimage-profiles 1.2.14 наконец.
Comment 17 Alexey Gladkov 2018-09-19 13:38:29 MSK
(В ответ на комментарий №12)
> Я согласен с предложением Леонида. Сортированный список даст предсказуемость
> обработки списка пакетов. Кроме того, если это добавлять, то я добавлю
> переменную чтобы вернуть старое поведение и тогда особо сложные профили можно
> будет не менять, добавив его.

Сортировка уже в релизе:

http://git.altlinux.org/gears/m/mkimage.git?p=mkimage.git;a=commitdiff;h=a8f0974e9d191970f714f75eb5ca9705f7c8f3d8
Comment 18 Alexey Gladkov 2018-09-19 13:39:20 MSK
Что ещё нужно в рамках этой баги ?
Comment 19 Michael Shigorin 2019-01-17 19:04:52 MSK
Думаю, на сейчас достаточно, а любое дальнейшее стоит описывать отдельно.
Спасибо всем причастным!
Comment 20 Michael Shigorin 2019-06-14 13:30:44 MSK
--- tools/mki-copy-pkgs
- if ! conflicts="$(LANG=C fgrep ': Conflicts: ' "$errfile")"; then
+ if ! conflicts="$(LANG=C egrep ': (Conflicts|Depends): ' "$errfile")"; then
--- http://git.altlinux.org/people/boyarsh/packages/mkimage.git?p=mkimage.git;a=commitdiff;h=d18a6f5d73829a051976a8e88848af675333162b
Comment 21 Sergey V Turchin 2019-11-08 17:07:30 MSK
(В ответ на комментарий №18)
> Что ещё нужно в рамках этой баги ?
Отключить сортировку по умолчанию.