Mkimage/Profiles/m-p/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>: |
$ 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}}, указывающая на сборочный каталог со сгенерированным минимальным профилем, который должно быть проще осмотреть целиком. Приступим: |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | $ 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/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] |
Версия 11: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]
Примечания
- ↑ подразумевается, что мы работаем со свежей копией mkimage-profiles.git, находясь в соответствующем каталоге
- ↑ требует modprobe kvm_intel или modprobe kvm_amd сообразно процессору, а также группу vmusers для доступа к /dev/kvm
- ↑ для тестового прогона можно добавить опцию CHECK=1, см. doc/params.txt
- ↑ если установлен пакет git-core, можно лишний раз проверить внесённые изменения при помощи git diff (сборочный профиль постадийно коммитится при формировании)
- ↑ git commit без -m запустит текстовый редактор с тем, чтобы можно было более подробно описать суть сделанного, чем одной строкой; если ещё не дружите с vim, запишите нужное в переменную окружения EDITOR