Mkimage-profiles/howto: различия между версиями

Материал из ALT Linux Wiki
(модификация сборочного профиля)
Строка 2: Строка 2:
Это руководство по созданию производных дистрибутивов может оказаться полезно тем, кого почти устраивают уже существующие и при этом есть свои замечания или пожелания — начиная с обоев по умолчанию и добавления своих пакетов. :)
Это руководство по созданию производных дистрибутивов может оказаться полезно тем, кого почти устраивают уже существующие и при этом есть свои замечания или пожелания — начиная с обоев по умолчанию и добавления своих пакетов. :)


= Для начала =
= Одноразовая корректировка =
Перед внесением правок стоит удостовериться, что [[mkimage]] установлен, а выбранный базовый дистрибутив им собирается и после этого работает; пожалуйста, не пропустите страничку с [[Mkimage/Profiles/m-p/examples|примерами]], чтоб не тратить впустую время на экспериментальное выяснение уже описанного там и в {{path|QUICKSTART}}.
Перед внесением правок стоит удостовериться, что [[mkimage]] установлен, а выбранный базовый дистрибутив им собирается и после этого работает; пожалуйста, не пропустите страничку с [[Mkimage/Profiles/m-p/examples|примерами]], чтоб не тратить впустую время на экспериментальное выяснение уже описанного там и в {{path|QUICKSTART}}.


= Проверка =
== Проверка ==
Возьмём для примера live-icewm.iso — простой самогруз с лёгким оконным менеджером IceWM, хорошо подходящим как для небыстрого оборудования, так и для полукиосков заданной функциональности. Его сборка должна пройти успешно в течение нескольких минут (до получаса на сколь-нибудь современном процессоре) после команды<ref>подразумевается, что мы работаем со свежей копией mkimage-profiles.git, находясь в соответствующем каталоге</ref>:
Возьмём для начала live-icewm.iso — простой самогруз с лёгким оконным менеджером IceWM, хорошо подходящим как для небыстрого оборудования, так и для полукиосков заданной функциональности. Его сборка должна пройти успешно в течение нескольких минут (до получаса на сколь-нибудь современном процессоре) после команды<ref>подразумевается, что мы работаем со свежей копией mkimage-profiles.git, находясь в соответствующем каталоге</ref>:
  $ make live-icewm.iso
  $ make live-icewm.iso


Строка 12: Строка 12:


В случае успешной сборки должна появиться строчка, указывающая путь к собранному образу и его размер:
В случае успешной сборки должна появиться строчка, указывающая путь к собранному образу и его размер:
  ** image: ~/out/live-icewm-20120717-i586.iso [173M]
  '''** image: ~/out/live-icewm-20120717-i586.iso [173M]'''


Этот образ можно проверить в виртуальной машине, указав его в качестве загрузочного носителя для VirtualBox либо воспользовавшись kvm<ref>требует {{cmd|modprobe kvm_intel}} или {{cmd|modprobe kvm_amd}} сообразно процессору, а также группу <tt>vmusers</tt> для доступа к {{path|/dev/kvm}}</ref> или qemu:
Этот образ можно проверить в виртуальной машине, указав его в качестве загрузочного носителя для VirtualBox либо воспользовавшись kvm<ref>требует {{cmd|modprobe kvm_intel}} или {{cmd|modprobe kvm_amd}} сообразно процессору, а также группу <tt>vmusers</tt> для доступа к {{path|/dev/kvm}}</ref> или qemu:
Строка 19: Строка 19:
Загрузился?  Неужто :)
Загрузился?  Неужто :)


Также при этом в каталоге {{path|mkimage-profiles}} появится ссылка {{path|build}}, указывающая на сборочный каталог со сгенерированным минимальным профилем, который должно быть проще осмотреть целиком.  Рассмотрим его подробней:
Также при этом в каталоге {{path|mkimage-profiles}} появится ссылка {{path|build}}, указывающая на сборочный каталог со сгенерированным минимальным профилем, который должно быть проще осмотреть целиком.  Приступим:
<pre>
$ ls -F1 build/
build.log          -- журнал сборки
distcfg.mk        -- конфигурационный файл — его и правим
files/            -- содержимое копируется в корень образа
functions.mk      -- полезности
image-scripts.d/  -- см. документацию mkimage
lib/              -- содержимое включается в Makefile
live/              -- субпрофиль для сборки LiveCD — нам сюда
Makefile          -- основной файл для сборки
out@              -- ссылка на каталог с результатом
pkg/              -- списки пакетов, файлы групп — ...и сюда
README            -- стоит глянуть, там немного :)
scripts.d/        -- см. документацию mkimage
sources.list      -- создаётся метапрофилем для архива
squashcfg.mk      -- передаваемые между stage1/2 данные
stage1/            -- субпрофиль с загрузчиками ядра и второй стадии
vars.mk            -- вспомогательный makefile для дампа переменных
</pre>


Во включаемом в {{path|build/live/Makefile}} файле {{path|build/live/stage2cfg.mk}} заметно, какие переменные влияют на состав пакетной базы формирующего LiveCD субпрофиля; из них наиболее употребимы <tt>THE_PACKAGES</tt> и <tt>THE_LISTS</tt>.
$ ls -F1 build/
build.log          -- журнал сборки
'''distcfg.mk        -- конфигурационный файл'''
files/            -- содержимое копируется в корень образа
functions.mk      -- полезности
image-scripts.d/  -- см. документацию mkimage
lib/               -- содержимое включается в Makefile
'''live/             -- субпрофиль для сборки LiveCD'''
Makefile           -- основной файл для сборки
out@              -- ссылка на каталог с результатом
'''pkg/               -- списки пакетов, файлы групп'''
'''README            -- стоит глянуть, там немного :)'''
scripts.d/         -- см. документацию mkimage
sources.list      -- создаётся метапрофилем для архива
squashcfg.mk       -- передаваемые между stage1/2 данные
stage1/           -- субпрофиль с загрузчиками ядра и второй стадии
vars.mk            -- вспомогательный makefile для дампа переменных


Заполняются эти переменные в {{path|build/distcfg.mk}}, а посмотреть окончательные значения, принятые в сборку — можно в {{path|build/build.log}} после её завершения<ref>для тестового прогона можно добавить опцию <tt>CHECK=1</tt>, см. {{path|doc/params.txt}}</ref>.  Пакаджлисты трактуются как имена файлов со списками имён пакетов, расположенных ниже {{path|build/pkg/lists}}.
Во включаемом в {{path|build/live/Makefile}} файле {{path|build/live/stage2cfg.mk}} заметно, какие переменные влияют на состав пакетной базы формирующего LiveCD субпрофиля; из них наиболее употребимы <tt>THE_PACKAGES</tt> и <tt>THE_LISTS</tt> (см. тж. {{path|conf.d/README}}).
 
Заполняются эти переменные в {{path|build/distcfg.mk}}, а посмотреть окончательные значения, принятые в сборку — можно в {{path|build/build.log}} после её завершения<ref>для тестового прогона можно добавить опцию <tt>CHECK=1</tt>, см. {{path|doc/params.txt}}</ref>.  Содержимое <tt>*_LISTS</tt> трактуется как имена файлов со списками имён пакетов, расположенных ниже {{path|build/pkg/lists}}.
 
== Правка ==
Например, поменяем браузер с {{pkg|firefox}} на {{pkg|seamonkey}}<ref>если установлен пакет {{pkg|git-core}}, можно лишний раз проверить внесённые изменения при помощи {{cmd|git diff}} (сборочный профиль постадийно коммитится при формировании)</ref>:
 
$ cd build
$ grep -r firefox distcfg.mk pkg/lists
pkg/lists/tagged/desktop+network:'''firefox'''
$ sed -i 's/firefox/seamonkey/' pkg/lists/tagged/desktop+network
 
Таким образом, для модификации пакетной базы можно просто добавить или убрать нужное в конфигурационном файле и списках пакетов, после чего запустить в сборочном каталоге команду {{cmd|make}} — отработав, она должна выдать ту же строчку с информацией по собранному ISO (в случае повторной сборки может понадобиться предварительно выполнить {{cmd|make distclean}}):
 
$ make distclean all
[...]
Total directory bytes: 16384
Path table size(bytes): 52
Max brk space used 19000
93071 extents written (181 MB)
'''** image: /home/mike/out/live-icewm-20120718-i586.iso [182M]'''
IMAGE_OUTPATH = /home/mike/out/live-icewm-20120718-i586.iso
IMAGE_OUTFILE = live-icewm-20120718-i586.iso
 
== Что дальше? ==
Если в результате правок желаемый результат был полностью достигнут, можно заархивировать полученный профиль после distclean и на этом с ним закончить, используя полученный образ.
 
В случае же наличия желания поделиться наработками с коллегами — что может [http://vimeo.com/23522095 пригодиться в будущем], когда не придётся делать те же правки поверх следующей версии, ведь они уже включены — можно прислать мне (<tt>mike</tt><tt>@</tt><tt>altlinux</tt>.<tt>org</tt>) полученный патч, закоммитив изменения и прибавив описание их предназначения<ref>{{cmd|git commit}} без {{cmd|-m}} запустит текстовый редактор с тем, чтобы можно было более подробно описать суть сделанного, чем одной строкой; если ещё не дружите с {{cmd|vim}}, запишите нужное в переменную окружения <tt>EDITOR</tt></ref>:
 
$ git diff
diff --git a/pkg/lists/tagged/desktop+network b/pkg/lists/tagged/desktop+network
index dbfb8f9..104b6b0 100644
--- a/pkg/lists/tagged/desktop+network
+++ b/pkg/lists/tagged/desktop+network
@@ -1 +1 @@
-firefox
+seamonkey
$ git commit -am 'desktop+network list: replaced firefox with seamonkey'
[master daef2b2] desktop+network list: replaced firefox with seamonkey
  1 file changed, 1 insertion(+), 1 deletion(-)
$ git format-patch HEAD^
'''0001-desktop-network-list-replaced-firefox-with-seamonkey.patch'''


[to be continued]
[to be continued]

Версия от 14:08, 18 июля 2012

Зачем и для кого?

Это руководство по созданию производных дистрибутивов может оказаться полезно тем, кого почти устраивают уже существующие и при этом есть свои замечания или пожелания — начиная с обоев по умолчанию и добавления своих пакетов. :)

Одноразовая корректировка

Перед внесением правок стоит удостовериться, что mkimage установлен, а выбранный базовый дистрибутив им собирается и после этого работает; пожалуйста, не пропустите страничку с примерами, чтоб не тратить впустую время на экспериментальное выяснение уже описанного там и в QUICKSTART.

Проверка

Возьмём для начала live-icewm.iso — простой самогруз с лёгким оконным менеджером IceWM, хорошо подходящим как для небыстрого оборудования, так и для полукиосков заданной функциональности. Его сборка должна пройти успешно в течение нескольких минут (до получаса на сколь-нибудь современном процессоре) после команды[1]:

$ make live-icewm.iso

По умолчанию сборка производится под «родную» архитектуру хоста с использованием системной конфигурации apt. Если что-то произойдёт не так — например, отсутствует mkimage, не настроен hasher или автонаходилка не нашла места для сборки — должна быть выдана относительно внятная диагностика.

В случае успешной сборки должна появиться строчка, указывающая путь к собранному образу и его размер:

** image: ~/out/live-icewm-20120717-i586.iso [173M]

Этот образ можно проверить в виртуальной машине, указав его в качестве загрузочного носителя для VirtualBox либо воспользовавшись kvm[2] или qemu:

$ kvm -cdrom ~/out/live-icewm-20120717-i586.iso

Загрузился? Неужто :)

Также при этом в каталоге mkimage-profiles появится ссылка build, указывающая на сборочный каталог со сгенерированным минимальным профилем, который должно быть проще осмотреть целиком. Приступим:

$ ls -F1 build/
build.log          -- журнал сборки
distcfg.mk         -- конфигурационный файл
files/             -- содержимое копируется в корень образа
functions.mk       -- полезности
image-scripts.d/   -- см. документацию mkimage
lib/               -- содержимое включается в Makefile 
live/              -- субпрофиль для сборки LiveCD
Makefile           -- основной файл для сборки
out@               -- ссылка на каталог с результатом
pkg/               -- списки пакетов, файлы групп
README             -- стоит глянуть, там немного :)
scripts.d/         -- см. документацию mkimage
sources.list       -- создаётся метапрофилем для архива
squashcfg.mk       -- передаваемые между stage1/2 данные
stage1/            -- субпрофиль с загрузчиками ядра и второй стадии
vars.mk            -- вспомогательный makefile для дампа переменных

Во включаемом в build/live/Makefile файле build/live/stage2cfg.mk заметно, какие переменные влияют на состав пакетной базы формирующего LiveCD субпрофиля; из них наиболее употребимы THE_PACKAGES и THE_LISTS (см. тж. conf.d/README).

Заполняются эти переменные в build/distcfg.mk, а посмотреть окончательные значения, принятые в сборку — можно в build/build.log после её завершения[3]. Содержимое *_LISTS трактуется как имена файлов со списками имён пакетов, расположенных ниже build/pkg/lists.

Правка

Например, поменяем браузер с firefox на seamonkey[4]:

$ cd build
$ grep -r firefox distcfg.mk pkg/lists
pkg/lists/tagged/desktop+network:firefox
$ sed -i 's/firefox/seamonkey/' pkg/lists/tagged/desktop+network

Таким образом, для модификации пакетной базы можно просто добавить или убрать нужное в конфигурационном файле и списках пакетов, после чего запустить в сборочном каталоге команду make — отработав, она должна выдать ту же строчку с информацией по собранному ISO (в случае повторной сборки может понадобиться предварительно выполнить make distclean):

$ make distclean all
[...]
Total directory bytes: 16384
Path table size(bytes): 52
Max brk space used 19000
93071 extents written (181 MB)
** image: /home/mike/out/live-icewm-20120718-i586.iso [182M]
IMAGE_OUTPATH = /home/mike/out/live-icewm-20120718-i586.iso
IMAGE_OUTFILE = live-icewm-20120718-i586.iso

Что дальше?

Если в результате правок желаемый результат был полностью достигнут, можно заархивировать полученный профиль после distclean и на этом с ним закончить, используя полученный образ.

В случае же наличия желания поделиться наработками с коллегами — что может пригодиться в будущем, когда не придётся делать те же правки поверх следующей версии, ведь они уже включены — можно прислать мне (mike@altlinux.org) полученный патч, закоммитив изменения и прибавив описание их предназначения[5]:

$ git diff
diff --git a/pkg/lists/tagged/desktop+network b/pkg/lists/tagged/desktop+network
index dbfb8f9..104b6b0 100644
--- a/pkg/lists/tagged/desktop+network
+++ b/pkg/lists/tagged/desktop+network
@@ -1 +1 @@
-firefox
+seamonkey
$ git commit -am 'desktop+network list: replaced firefox with seamonkey'
[master daef2b2] desktop+network list: replaced firefox with seamonkey
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git format-patch HEAD^
0001-desktop-network-list-replaced-firefox-with-seamonkey.patch

[to be continued]

Примечания

  1. подразумевается, что мы работаем со свежей копией mkimage-profiles.git, находясь в соответствующем каталоге
  2. требует modprobe kvm_intel или modprobe kvm_amd сообразно процессору, а также группу vmusers для доступа к /dev/kvm
  3. для тестового прогона можно добавить опцию CHECK=1, см. doc/params.txt
  4. если установлен пакет git-core, можно лишний раз проверить внесённые изменения при помощи git diff (сборочный профиль постадийно коммитится при формировании)
  5. git commit без -m запустит текстовый редактор с тем, чтобы можно было более подробно описать суть сделанного, чем одной строкой; если ещё не дружите с vim, запишите нужное в переменную окружения EDITOR