Mkimage/debug: различия между версиями
(нехватка свободного места) |
|||
Строка 88: | Строка 88: | ||
Одна из возможных причин остановки сборки на | Одна из возможных причин остановки сборки на | ||
<pre>unable to make initial chroot</pre> | <pre>unable to make initial chroot</pre> | ||
— закончившееся свободное место во временном каталоге, где собирается образ. Убедитесь (<code>df -h</code>), что там есть достаточно места. | |||
Обратите внимание, если <code>control [[pam_mktemp]]</code> возвращает '''enabled''', | Обратите внимание, если <code>control [[pam_mktemp]]</code> возвращает '''enabled''', | ||
переменная TMP переопределяется автоматически и писать <code>TMP=... </code> | переменная TMP переопределяется автоматически и писать <code>TMP=...</code> перед <code>make ...</code> не имеет смысла (TMP будет присвоено: /tmp/.private/$USER). | ||
[[Категория:Mkimage]] | [[Категория:Mkimage]] |
Версия от 18:17, 14 сентября 2011
Обновите 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-узле, если «разъехались» по архитектурам --with-aptconf и --with-arch (например, сборка пытается пройти для x86_64, а apt нацелен на i586).
Конфликты и битые зависимости
Два существенно разных случая: unmets (битые зависимости) и conflicts (конфликтующие пакеты, по отдельности сами по себе устанавливающиеся, но оказавшиеся вместе).
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
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).