Summary: | Не устанавливает ядро и модули, если для установки выбрано слишком много | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Антон Мидюков <antohami> |
Component: | apt | Assignee: | 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
(Ответ для Антон Мидюков на комментарий #0) > Но нужно разбираться с alterator-pkg. Что это за странное ограничение? Возможно, дело в apt -- попробуй ручками такое поставить. Есть мысль не кормить такой сложный список alterator-pkg, а преобразовывать его в нормальный при сборке. Т.е. проверять наличие пакетов в локальном репо при сборке и генерировать нормальный список пакетов для установки. Конечно, если это возможно. Такое, конечно, можно закостылить в mkimage и даже mkimage-profiles, вот только лучше бы исправить первопричину (или задокументировать ограничение и тогда уже думать, как с ним дальше быть). 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)$ (In reply to Антон Мидюков from comment #2) > Есть мысль не кормить такой сложный список alterator-pkg, а преобразовывать > его в нормальный при сборке. Т.е. проверять наличие пакетов в локальном репо > при сборке и генерировать нормальный список пакетов для установки. Лучше переписать make_manifest() в backend3. Хотя ошибка, скорее всего, в APT'е при работе с параметром --manifest, когда манифест получается слишком сложный. Это легко локализовать, но проще исправить в backend3. (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 написали какой. Это какой-то позор... (Ответ для Ivan A. Melnikov на комментарий #6) > char S[300]; Н-да. Предлагаю обновить как минимум до S[400], а то и до S[500]. Если уж не делать совсем как положено. (Ответ для Michael Shigorin на комментарий #8) > (Ответ для Ivan A. Melnikov на комментарий #6) > > char S[300]; > Н-да. Предлагаю обновить как минимум до S[400], а то и до S[500]. > Если уж не делать совсем как положено. Ну, надо как минимум добавить сообщение об ошибке и, пожалуй, завершение программы. (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. |