Mkimage/debug
Материал из ALT Linux Wiki
(+filesystem@$arch) |
м (→filesystem и архитектуры: +setup) |
||
(14 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
- | == Отладка сборки профилей mkimage | + | = Обновите mkimage = |
+ | При каких-либо проблемах сборки образов обычно стоит обновить {{pkg|mkimage}} до последней версии из Sisyphus, загрузив и установив [http://packages.altlinux.org/ru/Sisyphus/srpms/mkimage/get одиночный пакет] (как правило, он прекрасно работает и на бранчах). Известные исправления ошибок, приводящих к характерным взрывам: | ||
+ | |||
+ | * mkimage [http://git.altlinux.org/people/legion/packages/?p=mkimage.git;a=commitdiff;h=2e3f85bee8b1d80ed7a0d74775c118fc4aac584c < 0.1.7-alt1] при включенном GLOBAL_VERBOSE: | ||
+ | Reading Package Lists... | ||
+ | Building Dependency Tree... | ||
+ | E: Couldn't find package mkdir: | ||
+ | hsh-install: failed to calculate package file list. | ||
+ | hsh-install: Failed to generate package file list. | ||
+ | make[2]: *** [prepare-workdir] Error 1 | ||
+ | * mkimage [http://git.altlinux.org/people/legion/packages/?p=mkimage.git;a=commitdiff;h=32a297df154a54463ccf676c388355dd8f60bf5f < 0.1.7-alt1] при сборке из [[Mkimage/Profiles/next|mkimage-profiles.git]] на [[Branches/5.1|5.1/branch]]: | ||
+ | /bin/sh: command substitution: line 7: syntax error near unexpected token `(' | ||
+ | /bin/sh: command substitution: line 7: `/usr/share/mkimage/tools/mki-expand-pkgs regexp ^kernel-(image|modules-())-()$' | ||
+ | make[2]: *** [build-image] Error 1 | ||
+ | make[1]: *** [install2] Ошибка 2 | ||
+ | |||
+ | = Отладка сборки профилей mkimage = | ||
Общие рекомендации, не являющиеся специфическими для какого-либо профиля или семейства. Вообще помогает понимание логики работы apt и знание про -o Debug::pkgProblemResolver=true. | Общие рекомендации, не являющиеся специфическими для какого-либо профиля или семейства. Вообще помогает понимание логики работы apt и знание про -o Debug::pkgProblemResolver=true. | ||
- | + | == filesystem и архитектуры == | |
- | <tt>E: Package filesystem has no installation candidate</tt> обычно встречается при попытке собрать i586-дистрибутив на x86_64-узле, если «разъехались» по архитектурам | + | <tt>E: Package filesystem has no installation candidate</tt> обычно встречается при попытке собрать i586-дистрибутив на x86_64-узле, если «разъехались» по архитектурам apt.conf и собственно сборка (например, сборка пытается пройти для x86_64, а apt нацелен на i586). |
- | + | Кажется, аналогично с <tt>E: Package setup has no installation candidate</tt> | |
+ | |||
+ | == Конфликты и битые зависимости == | ||
Два существенно разных случая: unmets (битые зависимости) и conflicts (конфликтующие пакеты, по отдельности сами по себе устанавливающиеся, но оказавшиеся вместе). | Два существенно разных случая: unmets (битые зависимости) и conflicts (конфликтующие пакеты, по отдельности сами по себе устанавливающиеся, но оказавшиеся вместе). | ||
+ | |||
+ | В общем случае может иметь смысл добавить в используемый {{path|apt.conf}} следующее: | ||
+ | |||
+ | Debug::pkgMarkInstall "true"; | ||
+ | Debug::pkgProblemResolver "true"; | ||
+ | |||
+ | Особенно если в задействованных списках пакетов применяется конструкция <tt>пакет-</tt>, бишь (зло)употребление возможностью apt по "размаркировке" пакетов для установки. | ||
=== unmets === | === unmets === | ||
Строка 14: | Строка 39: | ||
E: Broken packages</pre> | E: Broken packages</pre> | ||
- | + | то может иметь смысл проверить вручную так: | |
<pre>hasher32:~/mkimage/build-LTSP/profiles/install2> hsh-install .work installer-stage2 | <pre>hasher32:~/mkimage/build-LTSP/profiles/install2> hsh-install .work installer-stage2 | ||
Reading Package Lists... | Reading Package Lists... | ||
Строка 24: | Строка 49: | ||
hsh-install: Failed to generate package file list. | hsh-install: Failed to generate package file list. | ||
hasher32:~/mkimage/build-LTSP/profiles/install2></pre> | hasher32:~/mkimage/build-LTSP/profiles/install2></pre> | ||
+ | |||
+ | Если по одному вдруг становятся — следует попытаться поставить именно все и списком, так как вероятен конфликт между чем-то из ''всего'' требуемого этими пакетами. | ||
+ | |||
+ | Частным случаем заведомого анмета является пакет с пустым именем либо же отсутствующий файл со списком пакетов; [https://lists.altlinux.org/pipermail/devel-distro/2010-June/000597.html характерная ошибка]: | ||
+ | <pre> | ||
+ | E: Couldn't find package | ||
+ | </pre> | ||
=== conflicts === | === conflicts === | ||
Строка 58: | Строка 90: | ||
Reinst Failed because of protected ltsp-client | Reinst Failed because of protected ltsp-client | ||
- | === | + | {{note|Если перечисленные в изначальном сообщении об ошибке пакеты одной транзакцией устанавливаются (и указанные как запрошенные в профиле, и указанные как затребованные ими) -- после этого следует попытаться ещё раз установить весь развёрнутый список, наверняка вылезет conflicts или obsoletes, но уже в явном виде.}} |
+ | |||
+ | NB: если проблема не с инструментальным чрутом вроде <tt>main</tt>, а с рабочим вроде <tt>live</tt> (на примере из [[m-p]]) — соответственно добавляется два уровня каталогов и искать стоит {{path|mki-expand-pkgs.verbose}}: | ||
+ | |||
+ | $ cd build/live/.work/chroot/.work | ||
+ | $ ... | ||
+ | |||
+ | === транзакции === | ||
+ | Обратите внимание: <tt>*_PACKAGES</tt> и <tt>*_PACKAGES_REGEXP</tt> раскрываются и устанавливаются раздельно, что может привести к неожиданным эффектам, когда (например) какой-либо виртуальный пакет затребован одним из пакетов в <tt>IMAGE_PACKAGES</tt>, а в <tt>IMAGE_PACKAGES_REGEXP</tt> уточняется конкретная реализация; может оказаться так, что попадут оба провайдера, если они не конфликтуют между собой: первый вытягивается как дефолтный при раскрытии зависимостей первого списка, а второй приходит по второму списку. Решение — положить нужное в одну транзакцию (обычные имена пакетов вполне подходят как регэкспы). | ||
+ | |||
+ | См. тж. {{altbug|30805}} и {{altbug|30806}}. | ||
+ | |||
+ | === чистая конфигурация apt === | ||
+ | |||
+ | Если творится что-то невообразимое (особенно при сборке с подключением [[biarch|x86_64-i586]]) -- например, не устанавливаются какие-либо вполне обычные пакеты, при этом пошаговое добавление того, на что жалуется apt, приводит к внезапной успешной сборке образа (особенно после добавления очередного имени пакета=версии согласно требованию) -- проверьте, что используете согласованную конфигурацию apt для _всех_ заданных репозиториев (а лучше единственного базовоо). | ||
+ | |||
+ | Поймал при подключенных x86_64-i586 ''и'' своём hasher repo, где как раз незадолго до того экспериментировал с libtiff: | ||
+ | <pre> | ||
+ | $ apt-cache -c=$HOME/apt/apt.conf.sisyphus.x86_64 policy libtiff5 | ||
+ | libtiff5: | ||
+ | Установлен: 4.0.3-alt1 | ||
+ | Кандидат: 4.0.3-alt1.1 | ||
+ | Таблица версий: | ||
+ | 4.0.3-alt1.1 0 | ||
+ | 500 file: x86_64/hasher pkgdir | ||
+ | *** 4.0.3-alt1 0 | ||
+ | 500 file: x86_64/classic pkglist | ||
+ | 100 RPM Database | ||
+ | </pre> | ||
+ | |||
+ | = live images = | ||
Все вышесказанное справедливо и для Live-образов с поправкой на изменения пути. | Все вышесказанное справедливо и для Live-образов с поправкой на изменения пути. | ||
Например: | Например: | ||
cd profiles/live/.work | cd profiles/live/.work | ||
+ | |||
+ | = Свободное место = | ||
+ | |||
+ | Одна из возможных причин остановки сборки на | ||
+ | <pre>unable to make initial chroot</pre> | ||
+ | — закончившееся свободное место во временном каталоге, где собирается образ. Убедитесь (<code>df -h</code>), что там есть достаточно места. | ||
+ | |||
+ | Обратите внимание, если <code>control [[pam_mktemp]]</code> возвращает '''enabled''', | ||
+ | переменная TMP переопределяется автоматически и писать <code>TMP=...</code> перед <code>make ...</code> не имеет смысла (TMP будет присвоено: /tmp/.private/$USER). | ||
[[Категория:Mkimage]] | [[Категория:Mkimage]] |
Текущая версия на 12:02, 26 декабря 2016
Содержание |
Обновите mkimage
При каких-либо проблемах сборки образов обычно стоит обновить mkimage до последней версии из Sisyphus, загрузив и установив одиночный пакет (как правило, он прекрасно работает и на бранчах). Известные исправления ошибок, приводящих к характерным взрывам:
- mkimage < 0.1.7-alt1 при включенном GLOBAL_VERBOSE:
Reading Package Lists... Building Dependency Tree... E: Couldn't find package mkdir: hsh-install: failed to calculate package file list. hsh-install: Failed to generate package file list. make[2]: *** [prepare-workdir] Error 1
- mkimage < 0.1.7-alt1 при сборке из mkimage-profiles.git на 5.1/branch:
/bin/sh: command substitution: line 7: syntax error near unexpected token `(' /bin/sh: command substitution: line 7: `/usr/share/mkimage/tools/mki-expand-pkgs regexp ^kernel-(image|modules-())-()$' make[2]: *** [build-image] Error 1 make[1]: *** [install2] Ошибка 2
Отладка сборки профилей mkimage
Общие рекомендации, не являющиеся специфическими для какого-либо профиля или семейства. Вообще помогает понимание логики работы apt и знание про -o Debug::pkgProblemResolver=true.
filesystem и архитектуры
E: Package filesystem has no installation candidate обычно встречается при попытке собрать i586-дистрибутив на x86_64-узле, если «разъехались» по архитектурам apt.conf и собственно сборка (например, сборка пытается пройти для x86_64, а apt нацелен на i586).
Кажется, аналогично с E: Package setup has no installation candidate
Конфликты и битые зависимости
Два существенно разных случая: unmets (битые зависимости) и conflicts (конфликтующие пакеты, по отдельности сами по себе устанавливающиеся, но оказавшиеся вместе).
В общем случае может иметь смысл добавить в используемый apt.conf следующее:
Debug::pkgMarkInstall "true"; Debug::pkgProblemResolver "true";
Особенно если в задействованных списках пакетов применяется конструкция пакет-, бишь (зло)употребление возможностью apt по "размаркировке" пакетов для установки.
unmets
Если возникают проблемы вроде неустанавливающихся пакетов:
The following packages have unmet dependencies: installer-ltsp-stage2: Depends: installer-stage2 but it is not going to be installed E: Broken packages
то может иметь смысл проверить вручную так:
hasher32:~/mkimage/build-LTSP/profiles/install2> hsh-install .work installer-stage2 Reading Package Lists... [...] The following packages have unmet dependencies: installer-stage2: Depends: installer (= 0.2-alt2) but it is not going to be installed E: Broken packages hsh-install: failed to calculate package file list. hsh-install: Failed to generate package file list. hasher32:~/mkimage/build-LTSP/profiles/install2>
Если по одному вдруг становятся — следует попытаться поставить именно все и списком, так как вероятен конфликт между чем-то из всего требуемого этими пакетами.
Частным случаем заведомого анмета является пакет с пустым именем либо же отсутствующий файл со списком пакетов; характерная ошибка:
E: Couldn't find package
conflicts
При включенном GLOBAL_VERBOSE=1 в процессе работы скрипта mki-copy-pkgs (цель copy-packages) образуется подкаталог .work/mki-copy-pkgs.verbose/, содержащий ценные данные — список пакетов для установки и stderr, полученный при его формировании apt’ом.
Поскольку индивидуально конфликтующие пакеты устанавливаются, то диагностика может быть нетривиальной и следует оперировать именно списком пакетов, чтобы понять, что это не анмет, а конфликт.
Огромная благодарность Алексею Гладкову (legion@altlinux) за доброе и терпеливое участие в разборе случая, получившегося при адаптации профиля Desktop 5.0a по мотивам Terminal 4.0 вследствие наличия в последнем заведомо конфликтующих пакетов ltsp-server и ltsp-client в компонентах base и disk, которые там уже были смержены в одну main.
Пример в итоге получился такой:
- make давал останов с таким сообщением:
The following packages have unmet dependencies: ltsp-client-full: Depends: ltsp-client (>= 5.1) E: Broken packages
- в .work/mki-copy-pkgs.verbose/err содержались те же данные
- hsh-install .work ltsp-client замечательно отрабатывал
- а вот при попытке поставить весь раскрытый из $(IMAGE_PACKAGES) список пакетов и воспроизводился облом:
$ cd profiles/main/.work $ hsh-install -v . $(cat mki-copy-pkgs.verbose/req)
- наконец было осознано, что в файлик req попадают _и_ ltsp-client, _и_ ltsp-server, а потом замечено и вспомнено, что они же конфликтуют!
- вот как можно яснее понять, в чём проблема — «protected» тут явным образом запрошенный ранее пакет:
$ cd profiles/main/.work $ aptbox/apt-get install -y -o Debug::pkgProblemResolver=1 $(cat mki-copy-pkgs.verbose/req) [...] Investigating alterator-ltsconf Package alterator-ltsconf has broken dep on ltsp-server Considering ltsp-server 2 as a solution to alterator-ltsconf 9999 Reinst Failed because of protected ltsp-client
NB: если проблема не с инструментальным чрутом вроде main, а с рабочим вроде live (на примере из m-p) — соответственно добавляется два уровня каталогов и искать стоит mki-expand-pkgs.verbose:
$ cd build/live/.work/chroot/.work $ ...
транзакции
Обратите внимание: *_PACKAGES и *_PACKAGES_REGEXP раскрываются и устанавливаются раздельно, что может привести к неожиданным эффектам, когда (например) какой-либо виртуальный пакет затребован одним из пакетов в IMAGE_PACKAGES, а в IMAGE_PACKAGES_REGEXP уточняется конкретная реализация; может оказаться так, что попадут оба провайдера, если они не конфликтуют между собой: первый вытягивается как дефолтный при раскрытии зависимостей первого списка, а второй приходит по второму списку. Решение — положить нужное в одну транзакцию (обычные имена пакетов вполне подходят как регэкспы).
См. тж. altbug #30805 и altbug #30806.
чистая конфигурация apt
Если творится что-то невообразимое (особенно при сборке с подключением x86_64-i586) -- например, не устанавливаются какие-либо вполне обычные пакеты, при этом пошаговое добавление того, на что жалуется apt, приводит к внезапной успешной сборке образа (особенно после добавления очередного имени пакета=версии согласно требованию) -- проверьте, что используете согласованную конфигурацию apt для _всех_ заданных репозиториев (а лучше единственного базовоо).
Поймал при подключенных x86_64-i586 и своём hasher repo, где как раз незадолго до того экспериментировал с libtiff:
$ apt-cache -c=$HOME/apt/apt.conf.sisyphus.x86_64 policy libtiff5 libtiff5: Установлен: 4.0.3-alt1 Кандидат: 4.0.3-alt1.1 Таблица версий: 4.0.3-alt1.1 0 500 file: x86_64/hasher pkgdir *** 4.0.3-alt1 0 500 file: x86_64/classic pkglist 100 RPM Database
live images
Все вышесказанное справедливо и для Live-образов с поправкой на изменения пути. Например:
cd profiles/live/.work
Свободное место
Одна из возможных причин остановки сборки на
unable to make initial chroot
— закончившееся свободное место во временном каталоге, где собирается образ. Убедитесь (df -h
), что там есть достаточно места.
Обратите внимание, если control pam_mktemp
возвращает enabled,
переменная TMP переопределяется автоматически и писать TMP=...
перед make ...
не имеет смысла (TMP будет присвоено: /tmp/.private/$USER).