mkimage

Материал из ALT Linux Wiki

(Различия между версиями)
Перейти к: навигация, поиск
Строка 25: Строка 25:
* Alexey Gladkov
* Alexey Gladkov
-
 
-
<!--
 
-
 
-
{{викифицировать}}
 
-
 
-
== mkimage ==
 
-
 
-
mkimage — инструмент для сборки образов системы из заданного репозитория ALT Linux по шаблону.
 
-
 
-
 
-
== Зачем? ==
 
-
 
-
 
-
 
-
Как и <tt>spt</tt>, mkimage использует [[hasher]] для создания образа.
 
-
 
-
Шаблон представляет собой набор Makefile’ов. Для ускорения сборки в mkimage реализовано кэширование. Есть теоретическая возможность распараллеливания сборки, но из-за особенности работы [[hasher]] это сейчас не работает.
 
-
 
-
=== Документация ===
 
-
[http://git.altlinux.org/people/legion/packages/mkimage.git?p=mkimage.git;a=blob;f=doc/README.ru;hb=HEAD текущее README.ru]
 
-
 
-
=== Пример использования ===
 
-
Предполагается использование бранчей [ftp://ftp.altlinux.org/pub/distributions/ALTLinux/4.0/branch 4.0], [ftp://ftp.altlinux.org/pub/distributions/ALTLinux/4.1/branch 4.1], [ftp://ftp.altlinux.org/pub/distributions/ALTLinux/5.0/branch 5.0] либо текущего Sisyphus.
 
-
 
-
Может понадобиться организовать отдельный apt.conf, хотя проблема с altlinux-release и хак с pkgpriorities неактуальны при использовании IMAGE_INIT_LIST из mkimage-0.0.8 в свежих снапшотах профиля (исправлено в конце июля 2008).
 
-
 
-
Далее (поправьте <tt>boyarsh</tt> на используемый логин! проверьте глазами получившееся):
 
-
<source lang="bash">
 
-
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
 
-
</source>
 
-
 
-
 
-
==== x86_64 ====
 
-
В mkimage-profiles-desktop по умолчанию даже при сборке на архитектуре x86_64 выставляется i586<ref>в конце концов, десктоп сейчас обычно 32-битный, а вот сборочный сервер — 64-битный… хотя после ветки 4.1 и официального выпуска 64-битного десктопа это соображение может быть и пересмотрено</ref>; посему для сборки 64-битного варианта требуется передать configure-скрипту ключик <tt>--with-arch=x86_64</tt>, а также убедиться, что в sources.list, упомянутом в <tt>--with-aptconf=/где/тут/apt.conf</tt> (по умолчанию /etc/apt/apt.conf и соответственно /etc/apt/sources.list) — упомянуты репозитории x86_64 и noarch.
 
-
 
-
<source lang="bash">
 
-
./configure --with-aptconf=/etc/apt/apt.conf.M41 --with-arch=x86_64
 
-
make rescue.cd
 
-
</source>
 
-
 
-
==== ALTSP5 ====
 
-
Если есть желание или необходимость сделать модификацию ALT Linux 4.0 Terminal — начинать стоит с:
 
-
<source lang="bash">
 
-
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
 
-
</source>
 
-
 
-
NB: для ветки 4.1 сборка не проверялась, известна пара не очень существенных проблем; для ветки 5.0 по состоянию на конец зимы 2008/2009 работы потихоньку начаты.
 
-
 
-
=== Модификация ===
 
-
Изучение существующих примеров удобней начинать с корневого <tt>[[Makefile.in|Makefile.in]]</tt> и далее по <tt>profiles/*/[[Makefile.in|Makefile.in]]</tt> и <tt>profiles/packages-lists/*</tt>. Стоит обратить внимание, что <tt>IMAGE_PACKAGES</tt> в профильном мэйкфайле может содержать как включаемые файлы-списки, так и имена пакетов (если как файлы они не будут найдены).
 
-
 
-
==== Хуки и скрипты ====
 
-
'''Q:''' чем различаются install2/{image-scripts.d, scripts.d}/?
 
-
 
-
'''A:''' image-scripts выполняются в chroot собранной стадии. scripts — в инструментальном chroot-е после установки пакетов и до архивации результата, что позволяет копировать файлы из/в chroot
 
-
 
-
=== Проблемы ===
 
-
 
-
==== altlinux-release-* ====
 
-
С одной стороны, <tt>altlinux-release</tt> стал виртуальным пакетом.
 
-
С другой — сейчас его требует <tt>basesystem</tt>.
 
-
Результат таков, что сперва в базовую систему устанавливается какой-либо из кандидатов (сейчас это обычно <tt>altlinux-release-terminal</tt> по лексикографическому старшинству), а потом apt не может его заменить уже явно указанным.
 
-
Объезд: прибить в конфигурации гвоздиком нужный вариант.
 
-
[http://lists.altlinux.org/pipermail/devel/2008-May/074887.html Более системные варианты] объездов и решений в данный момент [http://lists.altlinux.org/pipermail/devel/2008-May/074555.html обсуждаются в devel@].
 
-
<pre>> 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</pre>
 
-
''boyarsh@ в devel@''
 
-
 
-
краткая суть объезда:
 
-
свой <tt>apt.conf</tt>:
 
-
<pre>Dir::Etc::SourceList    /home/boyarsh/branch+boyarsh.list;
 
-
RPM::Ignore { "vim-plugin-vimruby"; };
 
-
Dir::Etc::pkgpriorities "/tmp/.private/boyarsh/mkimage-profiles-desktop/pkgpriorities";</pre>
 
-
<tt>pkgpriorities</tt>:
 
-
<pre>Important:
 
-
  basesystem
 
-
  altlinux-release-desktop
 
-
Required:
 
-
  apt
 
-
  Standard:
 
-
  kernel-doc
 
-
  libpam0
 
-
  libpam0-devel
 
-
  maxima-bin-gcl
 
-
  postfix
 
-
  python-dev
 
-
  python-modules-tkinter</pre>
 
-
 
-
==== Отладка конфликтов и битых зависимостей ====
 
-
Два существенно разных случая: unmets (битые зависимости) и conflicts (конфликтующие пакеты, сами по себе устанавливающиеся, но оказавшиеся вместе).
 
-
 
-
==== unmets ====
 
-
Если возникают проблемы вроде неустанавливающихся пакетов:
 
-
<pre>The following packages have unmet dependencies:
 
-
  installer-ltsp-stage2: Depends: installer-stage2 but it is not going to be installed
 
-
E: Broken packages</pre>
 
-
 
-
То может иметь смысл проверить вручную так:
 
-
<pre>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></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
 
-
 
-
==== Нет графики при загрузке образа, первая стадия задаёт вопросы ====
 
-
Если не поднялся gfxboot и propagator выпал из автоматического режима — наверняка переменные <tt>INFO_THEME</tt> и <tt>DESKTOP_FLAVOUR</tt> (по состоянию на сегодня) не долетели до <tt>profiles/Makefile</tt>; попробуйте прибить руками и посмотреть, не в этом ли дело:
 
-
<pre>INFO_THEME='desktop' \
 
-
DESKTOP_FLAVOUR='personal' \
 
-
MKI_OUTNAME=rescue.iso \
 
-
            make -C profiles</pre>
 
-
 
-
=== Ссылки ===
 
-
* [http://lists.altlinux.org/pipermail/devel/2008-August/077836.html Обзор планов mike@ по лету 2008]
 
-
 
-
-->
 

Версия 07:51, 25 февраля 2009

mkimage — инструмент для сборки образов Linux-системы из заданного Sisyphus-like репозитория.

Содержание

Документация

mkimage использует для сборки профиль, представляющий собой набор Makefiles.

Содержание и функционирование профилей документировано в README-файле пакета mkimage.

Использование в «реальной жизни»

Основное применение mkimage — сборка дистрибутивов ALT Linux и производных от них:

История

mkimage — четвёртый и на данный момент последний среди длинного ряда сборщиков образов в рамках Sisyphus. mkimage был создан для замены spt — последний использует жёстко зашитую последовательность шелл-скриптов, а шаблоны дистрибутивов с трудом поддаются вычленению общих блоков.

Исходный код

Авторы

  • Alexey Gladkov
 
Личные инструменты