Mkimage: различия между версиями
м (fix typo :[) |
м (→Отладка конфликтов и битых зависимостей: случай с конфликтами) |
||
Строка 109: | Строка 109: | ||
==== Отладка конфликтов и битых зависимостей ==== | ==== Отладка конфликтов и битых зависимостей ==== | ||
Два существенно разных случая: unmets (битые зависимости) и conflicts (конфликтующие пакеты, сами по себе устанавливающиеся, но оказавшиеся вместе). | |||
==== unmets ==== | |||
Если возникают проблемы вроде неустанавливающихся пакетов: | Если возникают проблемы вроде неустанавливающихся пакетов: | ||
<pre>The following packages have unmet dependencies: | <pre>The following packages have unmet dependencies: | ||
Строка 124: | Строка 127: | ||
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> | ||
==== conflicts ==== | |||
При включенном <tt>GLOBAL_VERBOSE=1</tt> в процессе работы скрипта <tt>mki-copy-pkgs</tt> (цель <tt>copy-packages</tt>) образуется подкаталог <tt>.work/mki-copy-pkgs.verbose/</tt>, содержащий ценные данные -- список пакетов для установки и stderr, полученный при его формировании apt'ом. | |||
Поскольку индивидуально конфликтующие пакеты устанавливаются, то диагностика может быть нетривиальной и следует оперировать именно списком пакетов, чтобы понять, что это не анмет, а конфликт. | |||
Огромная благодарность Алексею Гладкову (legion@altlinux) за доброе и терпеливое участие в разборе случая, получившегося при адаптации профиля Desktop 5.0a по мотивам Terminal 4.0 вследствие наличия в последнем заведомо конфликтующих пакетов <tt>ltsp-server</tt> и <tt>ltsp-client</tt> в компонентах <tt>base</tt> и <tt>disk</tt>, которые там уже были смержены в одну <tt>main</tt>. | |||
Пример в итоге получился [http://lists.altlinux.org/pipermail/devel-distro/2009-February/000236.html такой]: | |||
* <tt>make</tt> давал останов с таким сообщением: | |||
The following packages have unmet dependencies: | |||
ltsp-client-full: Depends: ltsp-client (>= 5.1) | |||
E: Broken packages | |||
* в <tt>.work/mki-copy-pkgs.verbose/err</tt> содержались те же данные | |||
* hsh-install .work ltsp-client замечательно отрабатывал | |||
* а вот при попытке поставить весь раскрытый из <tt>$(IMAGE_PACKAGES)</tt> список пакетов и воспроизводился облом: | |||
$ 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 | |||
==== Нет графики при загрузке образа, первая стадия задаёт вопросы ==== | ==== Нет графики при загрузке образа, первая стадия задаёт вопросы ==== |
Версия от 00:36, 25 февраля 2009
mkimage
mkimage — инструмент для сборки образов системы из заданного репозитория ALT Linux по шаблону.
mkimage — четвёртый и на данный момент последний среди длинного ряда сборщиков образов в рамках Sisyphus. Более подробно о том, кто кого сменял, можно узнать в истории.
Зачем?
mkimage был создан для замены spt — последний использует жёстко зашитую последовательность шелл-скриптов, а шаблоны дистрибутивов с трудом поддаются вычленению общих блоков.
Как и spt, mkimage использует hasher для создания образа.
Шаблон представляет собой набор Makefile’ов. Для ускорения сборки в mkimage реализовано кэширование. Есть теоретическая возможность распараллеливания сборки, но из-за особенности работы hasher это сейчас не работает.
Документация
Пример использования
Предполагается использование бранчей 4.0, 4.1, 5.0 либо текущего Sisyphus.
Может понадобиться организовать отдельный apt.conf, хотя проблема с altlinux-release и хак с pkgpriorities неактуальны при использовании IMAGE_INIT_LIST из mkimage-0.0.8 в свежих снапшотах профиля (исправлено в конце июля 2008).
Далее (поправьте boyarsh на используемый логин! проверьте глазами получившееся):
mkdir -p ~/git
cd ~/git
git clone git://git.altlinux.org/people/boyarsh/packages/mkimage-profiles-desktop
mkdir -p ~/mkimage
cp -a mkimage-profiles-desktop ~/mkimage
cd ~/mkimage/mkimage-profiles-desktop
autoconf
./configure --with-aptconf=/home/boyarsh/apt/apt.conf.M40+boyarsh
make rescue.cd
x86_64
В mkimage-profiles-desktop по умолчанию даже при сборке на архитектуре x86_64 выставляется i586[1]; посему для сборки 64-битного варианта требуется передать configure-скрипту ключик --with-arch=x86_64, а также убедиться, что в sources.list, упомянутом в --with-aptconf=/где/тут/apt.conf (по умолчанию /etc/apt/apt.conf и соответственно /etc/apt/sources.list) — упомянуты репозитории x86_64 и noarch.
./configure --with-aptconf=/etc/apt/apt.conf.M41 --with-arch=x86_64
make rescue.cd
ALTSP5
Если есть желание или необходимость сделать модификацию ALT Linux 4.0 Terminal — начинать стоит с:
apt-get install etersoft-build-utils
$EDITOR /etc/apt/sources.list.M40
git clone git://git.altlinux.org/people/mike/packages/mkimage-profiles-desktop
cd mkimage-profiles-desktop
git fetch git://git.altlinux.org/people/mike/packages/mkimage-profiles-desktop terminal-4.0.0:terminal-4.0.0
git checkout terminal-4.0.0
autoconf
./configure --with-aptconf=/etc/apt/apt.conf.M40 --with-distro=terminal --with-version=4.0 \
--with-design=terminal --with-license=terminal --with-release=terminal --with-language=ru_RU \
--with-kernel=std-smp
nice time make ltsp-kde.cd
NB: для ветки 4.1 сборка не проверялась, известна пара не очень существенных проблем; для ветки 5.0 по состоянию на конец зимы 2008/2009 работы потихоньку начаты.
Модификация
Изучение существующих примеров удобней начинать с корневого Makefile.in и далее по profiles/*/Makefile.in и profiles/packages-lists/*. Стоит обратить внимание, что IMAGE_PACKAGES в профильном мэйкфайле может содержать как включаемые файлы-списки, так и имена пакетов (если как файлы они не будут найдены).
Хуки и скрипты
Q: чем различаются install2/{image-scripts.d, scripts.d}/?
A: image-scripts выполняются в chroot собранной стадии. scripts — в инструментальном chroot-е после установки пакетов и до архивации результата, что позволяет копировать файлы из/в chroot
Проблемы
altlinux-release-*
С одной стороны, altlinux-release стал виртуальным пакетом. С другой — сейчас его требует basesystem. Результат таков, что сперва в базовую систему устанавливается какой-либо из кандидатов (сейчас это обычно altlinux-release-terminal по лексикографическому старшинству), а потом apt не может его заменить уже явно указанным. Объезд: прибить в конфигурации гвоздиком нужный вариант. Более системные варианты объездов и решений в данный момент обсуждаются в devel@.
> WARNING: The following essential packages will be removed > This should NOT be done unless you know exactly what you are doing! > altlinux-release-terminal (due to basesystem) http://lists.altlinux.org/pipermail/devel/2007-December/067565.html http://lists.altlinux.org/pipermail/devel/2007-December/067569.html
boyarsh@ в devel@
краткая суть объезда: свой apt.conf:
Dir::Etc::SourceList /home/boyarsh/branch+boyarsh.list; RPM::Ignore { "vim-plugin-vimruby"; }; Dir::Etc::pkgpriorities "/tmp/.private/boyarsh/mkimage-profiles-desktop/pkgpriorities";
pkgpriorities:
Important: basesystem altlinux-release-desktop Required: apt Standard: kernel-doc libpam0 libpam0-devel maxima-bin-gcl postfix python-dev python-modules-tkinter
Отладка конфликтов и битых зависимостей
Два существенно разных случая: 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>
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
Нет графики при загрузке образа, первая стадия задаёт вопросы
Если не поднялся gfxboot и propagator выпал из автоматического режима — наверняка переменные INFO_THEME и DESKTOP_FLAVOUR (по состоянию на сегодня) не долетели до profiles/Makefile; попробуйте прибить руками и посмотреть, не в этом ли дело:
INFO_THEME='desktop' \ DESKTOP_FLAVOUR='personal' \ MKI_OUTNAME=rescue.iso \ make -C profiles
Ссылки
- ↑ в конце концов, десктоп сейчас обычно 32-битный, а вот сборочный сервер — 64-битный… хотя после ветки 4.1 и официального выпуска 64-битного десктопа это соображение может быть и пересмотрено