Bug 39663

Summary: Не устанавливает ядро и модули, если для установки выбрано слишком много
Product: Sisyphus Reporter: Антон Мидюков <antohami>
Component: aptAssignee: Ivan Zakharyaschev <imz>
Status: NEW --- QA Contact: qa-sisyphus
Severity: critical    
Priority: P5 CC: boyarsh, glebfm, imz, iv, klark, ldv, mike, placeholder, sem, zerg
Version: unstable   
Hardware: all   
OS: Linux   

Description Антон Мидюков 2021-02-09 12:09:05 MSK
Напоролся опять на эту проблему. Впервые проблема была у zerg@:
https://lists.altlinux.org/pipermail/devel-distro/2020-September/002060.html

Если в /var/lib/install3/.base:
## DOT_BASE
^kernel-(image|modules-(virtualbox-addition|virtualbox-addition-guest|vmware|scsi|drm|bcmwl|staging|rtl8188fu|rtl8192eu|rtl8723de|rtl8812au|rtl8821ce|rtl8821cu|rtl88x2bu|rtl8723bu|bcmwl|ndiswrapper|drm|drm-nouveau|drm-radeon|drm-ancient|alsa|sound|e1000e|igb|r8125|staging|kvm|virtualbox))-(std-def)$

То alterator-pkg ничего не устанавливает, что видно и без установки по требуемому месту. Достаточно удалить один из элементов, чтобы установка ядра и модулей проходила успешно.

Временным решением может быть выкидывание застарелых модулей, которых давно нет, из mkimage-profiles. Но нужно разбираться с alterator-pkg. Что это за странное ограничение?

Проблема сейчас наличествует при сборкe workstation из mkimage-profiles v1.4.5-alt1 и 1.4.6-alt1.
Comment 1 Michael Shigorin 2021-02-09 12:36:57 MSK
(Ответ для Антон Мидюков на комментарий #0)
> Но нужно разбираться с alterator-pkg. Что это за странное ограничение?
Возможно, дело в apt -- попробуй ручками такое поставить.
Comment 2 Антон Мидюков 2021-02-09 14:38:18 MSK
Есть мысль не кормить такой сложный список alterator-pkg, а преобразовывать его в нормальный при сборке. Т.е. проверять наличие пакетов в локальном репо при сборке и генерировать нормальный список пакетов для установки. Конечно, если это возможно.
Comment 3 Michael Shigorin 2021-02-09 15:00:04 MSK
Такое, конечно, можно закостылить в mkimage и даже mkimage-profiles, вот только лучше бы исправить первопричину (или задокументировать ограничение и тогда уже думать, как с ним дальше быть).
Comment 4 Leonid Krivoshein 2021-02-10 02:13:38 MSK
drm и bcmwl в условии встречаются дважды, может это даёт наводку? Можно взять за правило сортировать тут этот список и убирать дубли. И что мешает упростить здесь же условие выборки? Разве данный regex не является одним из многих для выбора пакетов базовой системы? Например, так:

## DOT_BASE
^kernel-(image|modules-(virtualbox-addition|virtualbox-addition-guest|vmware|scsi|staging|alsa|sound|igb|staging|kvm|virtualbox))-(std-def)$

# Networking
^kernel-modules-(rtl8188fu|rtl8192eu|rtl8723de|rtl8812au|rtl8821ce|rtl8821cu|rtl88x2bu|rtl8723bu|r8125|e1000e|bcmwl|ndiswrapper)-(std-def)$

# DRM
^kernel-modules-(drm|drm-nouveau|drm-radeon|drm-ancient)-(std-def)$
Comment 5 Leonid Krivoshein 2021-04-04 14:25:07 MSK
(In reply to Антон Мидюков from comment #2)
> Есть мысль не кормить такой сложный список alterator-pkg, а преобразовывать
> его в нормальный при сборке. Т.е. проверять наличие пакетов в локальном репо
> при сборке и генерировать нормальный список пакетов для установки.
Лучше переписать make_manifest() в backend3. Хотя ошибка, скорее всего, в APT'е при работе с параметром --manifest, когда манифест получается слишком сложный. Это легко локализовать, но проще исправить в backend3.
Comment 6 Ivan A. Melnikov 2021-04-06 11:58:07 MSK
(In reply to Антон Мидюков from comment #0)
> ^kernel-(image|modules-(virtualbox-addition|virtualbox-addition-guest|vmware|scsi|drm|bcmwl|staging|rtl8188fu|rtl8192eu|rtl8723de|rtl8812au|rtl8821ce|rtl8821cu|rtl88x2bu|rtl8723bu|bcmwl|ndiswrapper|drm|drm-nouveau|drm-radeon|drm-ancient|alsa|sound|e1000e|igb|r8125|staging|kvm|virtualbox))-(std-def)$

Длина этого регулярного выражения -- ровно 300 символов. А теперь посмотрите в начало реализации команды apt-get install:

http://git.altlinux.org/gears/a/apt.git?a=blob;f=apt/cmdline/apt-get.cc;h=a26c93c2490fb76677491b21ea44f540d545c894#l1257

Я даже скопирую сюда:

[...]
for (const char **I = CmdL.FileList + 1; *I != 0; I++)
{
   // Duplicate the string
   unsigned int Length = strlen(*I);
   char S[300];
   if (Length >= sizeof(S))
      continue;
   strcpy(S,*I);
[...]

То есть, все аргументы apt-get install с длиной более 300 *молча* игнорируются. Хоть бы warning написали какой.
Comment 7 Anton V. Boyarshinov 2021-04-06 15:01:36 MSK
Это какой-то позор...
Comment 8 Michael Shigorin 2021-04-06 15:52:08 MSK
(Ответ для Ivan A. Melnikov на комментарий #6)
>    char S[300];
Н-да.  Предлагаю обновить как минимум до S[400], а то и до S[500].
Если уж не делать совсем как положено.
Comment 9 Anton V. Boyarshinov 2021-04-06 17:16:48 MSK
(Ответ для Michael Shigorin на комментарий #8)
> (Ответ для Ivan A. Melnikov на комментарий #6)
> >    char S[300];
> Н-да.  Предлагаю обновить как минимум до S[400], а то и до S[500].
> Если уж не делать совсем как положено.

Ну, надо как минимум добавить сообщение об ошибке и, пожалуй, завершение программы.
Comment 10 Ivan A. Melnikov 2021-04-06 17:33:40 MSK
(In reply to Michael Shigorin from comment #8)
> Н-да.  Предлагаю обновить как минимум до S[400], а то и до S[500].
> Если уж не делать совсем как положено.

[~/src/alt/apt]$ git grep -F  'S[300]' | wc -l
25
[~/src/alt/apt]$ git grep -F  'S[400]' | wc -l
10
[~/src/alt/apt]$ git grep -F  'S[500]' | wc -l
4

И это только S.