Введение в сборку дистрибутивов: различия между версиями

Материал из ALT Linux Wiki
(Добавление пропущеных символов)
 
(не показано 6 промежуточных версий 4 участников)
Строка 1: Строка 1:
== "Введение в сборку дистрибутивов" ==
== "Введение в сборку дистрибутивов" ==


{{Attention|Актуальный на данный момент (бранч p8, p9, Сизиф) инструментарий для сборки дистрибутивов: [[Mkimage/Profiles/m-p|mkimage-profiles]]. Инструкция ниже описывает устаревший инструментарий для сборки дистрибутивов на бранчах 5.1, p6, p7.}}


Это инструкция по самостоятельной сборке дистрибутивов на базе бранча 5.1 АЛЬТ-линукс.
Это инструкция по самостоятельной сборке дистрибутивов на базе бранча 5.1 АЛЬТ-линукс.


Собрана из отдельных сообщений автора NotHAM (А.Чернов)
Собрана из отдельных сообщений автора NotHAM (А.Чернов) [http://forum.altlinux.org/index.php/topic,3321.msg102218.html#msg102218 топик на форуме]
 
* [http://forum.altlinux.org/index.php/topic,3321.msg102218.html#msg102218 топик на форуме]
 


Основная информация по сборке дистрибутивов находится на странице вики:
Основная информация по сборке дистрибутивов находится на странице вики:
http://www.altlinux.org/Mkimage/Profiles/Desktop
[[Mkimage/Profiles/Desktop]],а также по многочисленным ссылкам с этой страницы. Год назад читать это
а также по многочисленным ссылкам с этой страницы. Год назад читать это
непосвященному пользователю было невозможно, но в последнее время ситуация меняется в лучшую сторону (в основном благодаря усилиям М. Шигорина).
непосвященному пользователю было невозможно, но в последнее время ситуация
Попытаюсь пересказать основное содержимое этой страницы на языке, понятном продвинутому пользователю АЛЬТ-линукса.
меняется в лучшую сторону (в основном благодаря усилиям М. Шигорина).
Попытаюсь пересказать основное содержимое этой страницы на языке, понятном
продвинутому пользователю АЛЬТ-линукса.


Основные инструменты:
Основные инструменты:


- бранч 5.1 (р5, сизиф - это для особо продвинутых), крайне желательно иметь
* бранч 5.1 (р5, сизиф - это для особо продвинутых), крайне желательно иметь локальное зеркало, сборка через интернет - "врагу не пожелаешь", хотя и работает, но делать что-то кроме минималки через интернет - это проще скачать готовое;
локальное зеркало, сборка через интернет - "врагу не пожелаешь", хотя и работает,
* mkimage-profiles-desktop (не пакет из бранчей-сизифа, а гит boyarch@ - комбайн с "вертикальным взлётом и посадкой", известный как m-p-d);
но делать что-то кроме минималки через интернет - это проще скачать готовое;
 
- makeimage-profiles-desktop (не пакет из бранчей-сизифа, а гит boyarch@ - комбайн
с "вертикальным взлётом и посадкой", известный как m-p-d);


Дополнительные инструменты (это уже пакеты из бранчей-сизифа):
Дополнительные инструменты (это уже пакеты из бранчей-сизифа):


 
*git
git
*hasher
 
*autoconf_2.60 (самой свежей версии)
hasher
*mkimage
 
*make
autoconf_2.60 (самой свежей версии)
*установленный АЛЬТ-линукс (любой, хотя все примеры в дальнейшем буду прогонять на antique-full (с доустановленными pidgin-mini и seamonkey): http://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/iso/
 
mkimage
 
make
 
установленный АЛЬТ-линукс  
 
 
(любой, хотя все примеры в дальнейшем буду прогонять
на antique-full (с доустановленными pidgin-mini и seamonkey):
http://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/iso/


Для создания локального зеркала (5.1) нужно иметь дополнительный раздел достаточного
Для создания локального зеркала (5.1) нужно иметь дополнительный раздел достаточного
Строка 50: Строка 30:
Создать зеркало можно командой (в дальнейшем обновлять ей же):
Создать зеркало можно командой (в дальнейшем обновлять ей же):


 
rsync <опции> <источник> <получатель>
rsync <опции> <источник> <получатель>
 


у меня это выглядит так  
у меня это выглядит так  


:<code>rsync --timeout=6000 -avlpztc --exclude 'SRPMS' --exclude 'SRPMS.all' --exclude 'SRPMS.classic' --exclude 'i686' --exclude 'x86_64' --exclude 'x86_32' --stats --delete-after --verbose rsync.altlinux.org::ALTLinux/5.1/branch/ /mnt/sda5/mirror/ALTLinux/5.1</code>


''rsync --timeout=6000 -avlpztc --exclude 'SRPMS' --exclude 'SRPMS.all' --exclude 'SRPMS.classic' --exclude 'i686' --exclude 'x86_64' --exclude 'x86_32' --stats --delete-after --verbose rsync.altlinux.org::ALTLinux/5.1/branch/ /mnt/sda5/mirror/ALTLinux/5.1''
Здесь:
 
 
 
Здесь


<источник> = rsync.altlinux.org::ALTLinux/5.1/branch/
<источник> = rsync.altlinux.org::ALTLinux/5.1/branch/
 
<получатель> = /mnt/sda5/mirror/ALTLinux/5.1
<получатель> = /mnt/sda5/mirror/ALTLinux/5.1


остальное - опции.  
остальное - опции.  


Зеркало занимает примерно 21 ГБ (только бинарники).
Зеркало занимает примерно 21 ГБ (только бинарники). Если что-то не эксклюдить - займёт больше.
Если что-то не эксклюдить - займёт больше.
 
Устанавливаем git (и всё что потянет). Сразу после установки - представляемся ему:
Устанавливаем git (и всё что потянет). Сразу после установки - представляемся ему:


 
$ git config --global user.name "Your Name Comes Here"
''$ git config --global user.name "Your Name Comes Here"''
$ git config --global user.email "you@yourdomain.example.com"
 
''$ git config --global user.email "you@yourdomain.example.com"''
 


Устанавливаем пакеты autoconf_2.60, mkimage, make.
Устанавливаем пакеты autoconf_2.60, mkimage, make.


Устанавливаем hasher (и всё что потянет), добавляем пользователя:
Устанавливаем hasher (и всё что потянет), добавляем пользователя:
 
# hasher-useradd USER
 
Здесь USER - это ваш логин. Это единственный запуск хашера из под root. Перезагружаемся.
''# hasher-useradd USER''
 
 
Здесь USER - это ваш логин.
 
Это единственный запуск хашера из под root. Перезагружаемся.


Создаём рабочие каталоги, например ~/mkiso/branch, ~/mkiso/sisyphus,
Создаём рабочие каталоги, например ~/mkiso/branch, ~/mkiso/sisyphus,
Строка 96: Строка 59:
Теперь (согласно вики) нужно склонировать гит boyarch@, но мы пойдём
Теперь (согласно вики) нужно склонировать гит boyarch@, но мы пойдём
другим путём. Скачиваем отсюда тарбол (mkimage-profiles-desktop.tar.bz2):
другим путём. Скачиваем отсюда тарбол (mkimage-profiles-desktop.tar.bz2):
http://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/
http://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/
Это тот же самый клон, но по состоянию на 26.01.2010. Он как-то лучше
Это тот же самый клон, но по состоянию на 26.01.2010. Он как-то лучше
приспособлен к работе с бранчами (имхо). Тарбол распаковываем в каталог
приспособлен к работе с бранчами (имхо). Тарбол распаковываем в каталог
Строка 104: Строка 67:
Хотя желающие могут сделать как по вики, в каталоге  ~/mkiso/sisyphus
Хотя желающие могут сделать как по вики, в каталоге  ~/mkiso/sisyphus
выполнить команду:
выполнить команду:
 
$ git clone git://git.altlinux.org/people/boyarsh/packages/mkimage-profiles-desktop.git
 
''$ git clone git://git.altlinux.org/people/boyarsh/packages/mkimage-profiles-desktop.git''
 
 
Только про расхождения номеров строк потом вопросов не задавайте.
Только про расхождения номеров строк потом вопросов не задавайте.
Во всех случаях необходимо сделать резервные копии m-p-d (мало-ли что).
Во всех случаях необходимо сделать резервные копии m-p-d (мало-ли что).
Строка 121: Строка 80:
подготовки. Точно так-же и комбайн "m-p-d" - подготавливаем для себя. Чтобы не
подготовки. Точно так-же и комбайн "m-p-d" - подготавливаем для себя. Чтобы не
повторять некоторые ошибки других:
повторять некоторые ошибки других:
http://forum.altlinux.org/index.php/topic,7274.msg101496.html#msg101496
http://forum.altlinux.org/index.php/topic,7274.msg101496.html#msg101496
Здесь, повидимому, пользователь запустил сборку не сделав перезагрузку
Здесь, повидимому, пользователь запустил сборку не сделав перезагрузку
после команды ...# hasher-useradd USER. Я обращал на это Ваше внимание
после команды ...# hasher-useradd USER. Я обращал на это Ваше внимание
Строка 127: Строка 86:
по советам на вики, у нас будет несколько другой путь.
по советам на вики, у нас будет несколько другой путь.
Ещё рекомендую глянуть тут:
Ещё рекомендую глянуть тут:
http://forum.altlinux.org/index.php/topic,7274.msg101513.html#msg101513
http://forum.altlinux.org/index.php/topic,7274.msg101513.html#msg101513
Это не наш случай, потому пока игнорируем (просто принимаем к сведению).
Это не наш случай, потому пока игнорируем (просто принимаем к сведению).


Подготовка:
Подготовка:
1. Открываем в любом текстовом редакторе, умеющем показывать номера строк,
1. Открываем в любом текстовом редакторе, умеющем показывать номера строк,
файл /mkiso/branch/m-p-d/configure.ac (вполне подходит xfce-mousepad из сборки
файл /mkiso/branch/m-p-d/configure.ac (вполне подходит xfce-mousepad из сборки
Строка 137: Строка 95:
Ищем в файле строки:
Ищем в файле строки:


 
31     APTCONF_PACKAGE="platform5"
''31     APTCONF_PACKAGE="platform5"''
.....
 
210     APTCONF_PACKAGE="desktop"
.....
 
''210     APTCONF_PACKAGE="desktop"''
 


Переменная APTCONF_PACKAGE (используется в base.in) определяет, какой пакет
Переменная APTCONF_PACKAGE (используется в base.in) определяет, какой пакет
Строка 153: Строка 107:
закоммитить изменения (не обязательно):
закоммитить изменения (не обязательно):


 
git add . # Пробел и точка в конце команды - обязательны.
''git add . # Пробел и точка в конце команды - обязательны.''
git commit -m "small changes for branch 5.1"
 
''git commit -m "small changes for branch 5.1"''
 


2. Настраиваем apt-get. Проще всего это сделать с помощью синаптика,
2. Настраиваем apt-get. Проще всего это сделать с помощью синаптика,
выбрав нужные репозитории. У меня это выглядит так (/etc/apt/sources.list):
выбрав нужные репозитории. У меня это выглядит так (/etc/apt/sources.list):


 
rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ i586 classic  
''rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ i586 classic ''
rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ noarch classic
 
### rpm file:///mnt/sda5/mirror/Branch5.1/ i586 hasher  
''rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ noarch classic''
### rpm file:///mnt/sda5/mirror/Branch5.1/ noarch hasher
 
### rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ i586 hasher
''### rpm file:///mnt/sda5/mirror/Branch5.1/ i586 hasher''
### rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ noarch hasher
 
''### rpm file:///mnt/sda5/mirror/Branch5.1/ noarch hasher''
 
''### rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ i586 hasher''
 
''### rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ noarch hasher''
 


Т. е. apt-get направлен на зеркало, хотя могу подключить и любые другие из списка,
Т. е. apt-get направлен на зеркало, хотя могу подключить и любые другие из списка,
Строка 181: Строка 125:
Всё готово, переходим в каталог mkimage-profiles-desktop и даем команды:
Всё готово, переходим в каталог mkimage-profiles-desktop и даем команды:


 
$ autoconf # для того пакет и ставили, сейчас он создаст файл *configure
''$ autoconf # для того пакет и ставили, сейчас он создаст файл *configure''
$ ./configure # пока без параметров
 
$ make rescue.cd
''$ ./configure # пока без параметров''
 
''$ make rescue.cd''
 


После удачного завершения сборки, что занимает некоторое время в
После удачного завершения сборки, что занимает некоторое время в
Строка 193: Строка 133:
если нет локального зеркала и пакеты закачиваются из инета,  
если нет локального зеркала и пакеты закачиваются из инета,  
сразу же делаем (обязательно!):
сразу же делаем (обязательно!):
 
$ make distclean
 
''$ make distclean''
 


Дело в том, что "комбайн" в процессе работы создаёт в m-p-d в подкаталогах
Дело в том, что "комбайн" в процессе работы создаёт в m-p-d в подкаталогах
Строка 209: Строка 146:
Исправляем свой недочет: опять идём в /mkimage-profiles-desktop  и делаем:
Исправляем свой недочет: опять идём в /mkimage-profiles-desktop  и делаем:


 
$ ./configure --with-version=5.1
''$ ./configure --with-version=5.1''
$ make minimal.cd
 
.... несколько минут и примерно 400 МБ трафика.
''$ make minimal.cd''
$ make distclean
 
.... несколько минут и примерно 400 МБ трафика.
 
''$ make distclean''
 


Опять идём в /out/desktop/ и опять смотрим altlinux-5.1-...install.cd.iso
Опять идём в /out/desktop/ и опять смотрим altlinux-5.1-...install.cd.iso
Строка 238: Строка 170:
следующее (кроме строк 45 и 49):
следующее (кроме строк 45 и 49):


 
(45)slinux.cd: | use-slinux use-gdm install2 main install-cd.@IMAGETYPE@
''(45)slinux.cd: | use-slinux use-gdm install2 main install-cd.@IMAGETYPE@''
(46)# ***********************************************************************
 
(47)console.cd: | install2 main rescue install-cd.@IMAGETYPE@
(46)# ***********************************************************************
(48)# ***********************************************************************
 
(49)minimal.cd: | use-icewm use-xdm install2 main install-cd.@IMAGETYPE@
''(47)console.cd: | install2 main rescue install-cd.@IMAGETYPE@''
 
(48)# ***********************************************************************
 
''(49)minimal.cd: | use-icewm use-xdm install2 main install-cd.@IMAGETYPE@''
 


Номера строк проставит редактор (вписывать не нужно). На вики, то что мы сделали,
Номера строк проставит редактор (вписывать не нужно). На вики, то что мы сделали,
Строка 256: Строка 182:
добавили блок rescue (действительно крупный). Теперь в каталоге /m-p-d делаем
добавили блок rescue (действительно крупный). Теперь в каталоге /m-p-d делаем


 
$ ./configure --with-version=5.1
''$ ./configure --with-version=5.1''
$ make console.cd
 
...
''$ make console.cd''
$ make distclean
 
...
 
''$ make distclean''
 


Идём в каталог /out/desktop/ и смотрим результат. Там лежит образ консольной
Идём в каталог /out/desktop/ и смотрим результат. Там лежит образ консольной
Строка 286: Строка 207:
искать:
искать:


 
(39) $(DESKTOP_TARGETS): | $(AUTOCFG) use-xorg
''(39) $(DESKTOP_TARGETS): | $(AUTOCFG) use-xorg''
...
 
(44) use-xorg:
...
(45)        echo GLOBAL_BASE_PACKAGE_LISTS+='xorg' >> "$(call scfg,main)"
 
...
''(44) use-xorg:''
(107) use-desktop: use-xorg use-alterator-desktop
 
''(45)        echo GLOBAL_BASE_PACKAGE_LISTS+='xorg' >> "$(call scfg,main)"''
 
...
 
''(107) use-desktop: use-xorg use-alterator-desktop''




Мда..., ну и который из них наш? Оказывается самый первый (39), но там есть
Мда..., ну и который из них наш? Оказывается самый первый (39), но там есть
какой-то $(DESKTOP_TARGETS), про который в строке (35) написано:
какой-то $(DESKTOP_TARGETS), про который в строке (35) написано:
Код:
(35) DESKTOP_TARGETS = $(DE_TARGETS) $(WM_TARGETS) $(FEATURE_TARGETS)
 
 
''(35) DESKTOP_TARGETS = $(DE_TARGETS) $(WM_TARGETS) $(FEATURE_TARGETS)''
 
 


Уже легче, в строках 17-22 есть про WM_TARGETS. Всё понятно, убрав из
Уже легче, в строках 17-22 есть про WM_TARGETS. Всё понятно, убрав из
Строка 314: Строка 224:


Цитата с вики:
Цитата с вики:
 
:"Чем более краткими, ясными, устойчивыми к изменениям являются его составляющие — тем удобней браться за разработку или продолжать её через год. Чем более запутанными и неявно взаимосвязанными они остаются — тем больше времени приходится сперва тратить на отслеживание, кто куда зачем пошёл и надо ли это ещё."
"Чем более краткими, ясными, устойчивыми к изменениям являются его составляющие — тем удобней браться за разработку или продолжать её через год.
Чем более запутанными и неявно взаимосвязанными они остаются — тем больше времени приходится сперва тратить на отслеживание, кто куда зачем пошёл и надо ли это ещё."


Что-то я не пойму - это "ясность" или "запутанность", и что делает ndiswrapper
Что-то я не пойму - это "ясность" или "запутанность", и что делает ndiswrapper
Строка 342: Строка 250:
В файл /mkiso/branch/m-p-d/Makefile.in добавляем строки (48-49):
В файл /mkiso/branch/m-p-d/Makefile.in добавляем строки (48-49):


 
46 # ***********************************************************************
46 # ***********************************************************************
47 console.cd: | install2 main rescue install-cd.@IMAGETYPE@
 
48 WM-mini.cd: | use-WM-mini use-wdm install2 main install-cd.@IMAGETYPE@
''47 console.cd: | install2 main rescue install-cd.@IMAGETYPE@''
49 #icewm-mini.cd: | use-icewm-mini use-xdm install2 main install-cd.@IMAGETYPE@
 
50 # ***********************************************************************
''48 WM-mini.cd: | use-WM-mini use-wdm install2 main install-cd.@IMAGETYPE@''
 
''49 #icewm-mini.cd: | use-icewm-mini use-xdm install2 main install-cd.@IMAGETYPE@''
 
50 # ***********************************************************************
 


Строку (49) пока оставляем закомментированой. Надеюсь что здесь уже всё понятно.
Строку (49) пока оставляем закомментированой. Надеюсь что здесь уже всё понятно.
Строка 361: Строка 263:
ранее и тоже понятно (чтобы xorg не отвалился).
ранее и тоже понятно (чтобы xorg не отвалился).


 
17 WM_TARGETS = \
''17 WM_TARGETS = \''
18 use-fvwm \
 
19 use-icewm \
''18 use-fvwm \''
20 use-wmaker \
 
21 use-wdm \
''19 use-icewm \''
22 use-xdm \
 
23 use-gdm
''20 use-wmaker \''
 
''21 use-wdm \''
 
''22 use-xdm \''
 
''23 use-gdm''
 


Всё? - конечно нет. Комбайн - он слегка туповатый и не знает, что значит use-wdm,
Всё? - конечно нет. Комбайн - он слегка туповатый и не знает, что значит use-wdm,
потому будем обучать. А как? А так-же как он обучен использовать use-xdm. Ищем.
потому будем обучать. А как? А так-же как он обучен использовать use-xdm. Ищем.


 
50 use-xdm:
''50 use-xdm:''
51 echo GLOBAL_BASE_PACKAGES+='xdm' >> "$(call scfg,main)"
 
52 # TODO: tune it as well, see live/image-scripts.d/05xdm
''51 echo GLOBAL_BASE_PACKAGES+='xdm' >> "$(call scfg,main)"''
53 $(call done,$@)
 
''52 # TODO: tune it as well, see live/image-scripts.d/05xdm''
 
''53 $(call done,$@)''
 


Оказывается всё довольно просто, осталось добавить нужные строки, но сначала
Оказывается всё довольно просто, осталось добавить нужные строки, но сначала
Строка 398: Строка 287:
Добавляем строки:
Добавляем строки:


 
55 use-wdm:
''55 use-wdm:''
56 echo GLOBAL_BASE_PACKAGES+='wdm' >> "$(call scfg,main)"
 
57 $(call done,$@)
''56 echo GLOBAL_BASE_PACKAGES+='wdm' >> "$(call scfg,main)"''
 
''57 $(call done,$@)''




Строка 414: Строка 300:
Открываем в редакторе заготовленный файл /m-p-d/profiles/pkg/lists/WM-mini
Открываем в редакторе заготовленный файл /m-p-d/profiles/pkg/lists/WM-mini
(однострочный) и добавляем всё, что нужно для минималки.
(однострочный) и добавляем всё, что нужно для минималки.


  ###WindowMaker
  ###WindowMaker
 
WindowMaker
WindowMaker
 
  ###synaptic
  ###synaptic
 
synaptic
synaptic
synaptic-usermode
 
synaptic-usermode
 
 
  ###alterator
  ###alterator
 
alterator-browser-qt
alterator-browser-qt
alterator-standalone
 
alterator-xkb
alterator-standalone
alterator-mkbootflash
 
alterator-net-pppoe
alterator-xkb
alterator-net-pptp
 
alterator-net-openvpn
alterator-mkbootflash
alterator-nsswitch
 
alterator-net-pppoe
 
alterator-net-pptp
 
alterator-net-openvpn
 
alterator-nsswitch
 
  ###alterator-packages
  ###alterator-packages
 
 
  ###alterator-pkg
  ###alterator-pkg
 
alterator-profile
alterator-profile
alterator-proxy
 
alterator-proxy
 
 
  ### for system
  ### for system
 
sound-scripts
sound-scripts
hal-laptop
 
dbus-tools
hal-laptop
dbus-tools-gui
 
cdrkit-utils
dbus-tools
 
dbus-tools-gui
 
cdrkit-utils
 




Строка 489: Строка 351:
Всё готово. Собираем свои поделки.
Всё готово. Собираем свои поделки.


 
$ ./configure --with-version=5.1
''$ ./configure --with-version=5.1''
$ make WM-mini.cd
 
...
''$ make WM-mini.cd''
$ make distclean
 
...
 
''$ make distclean''
 


Переименовываем результат в ...WM-mini...iso .
Переименовываем результат в ...WM-mini...iso .
Второй раз запускать ./configure не обязятельно (файлы ***.in не изменялись).
Второй раз запускать ./configure не обязятельно (файлы ***.in не изменялись).
 
$ make icewm-mini.cd
 
...
''$ make icewm-mini.cd''
$ make distclean
 
...
 
''$ make distclean''
 
 
И опять ...desktop... (переименовываем), мы с ним ещё разберёмся.
И опять ...desktop... (переименовываем), мы с ним ещё разберёмся.


Строка 534: Строка 385:
с ошибкой "cannot find package doc", пойдём искать почему:
с ошибкой "cannot find package doc", пойдём искать почему:


 
189     *)
''189     *)''
190 BRANDING=${with_branding:-"altlinux-desktop"}
 
191 INSTALLER=${with_installer:-"desktop"}
''190 BRANDING=${with_branding:-"altlinux-desktop"}''
192 DOCS="$with_docs"
 
193 LABEL="Desktop"
''191 INSTALLER=${with_installer:-"desktop"}''
194 DEFAULT_ISO="kde.dvd";;
 
''192 DOCS="$with_docs"''
 
''193 LABEL="Desktop"''
 
''194 DEFAULT_ISO="kde.dvd";;''




Строка 554: Строка 399:
boyarch@ всё то-же самое, только номера строк другие). Наверное никто не чихнул??
boyarch@ всё то-же самое, только номера строк другие). Наверное никто не чихнул??
Щас поправим (подсмотрим в строке 168 и сделаем так-же):
Щас поправим (подсмотрим в строке 168 и сделаем так-же):
 
192 DOCS=${with_docs:-"desktop"}
 
''192 DOCS=${with_docs:-"desktop"}''
 
 
Теперь быстренько проверим (сначала сохранив файл):
Теперь быстренько проверим (сначала сохранив файл):
 
$ autoconf # файл *configure нужно перегенерить, configure.ac изменился!
 
$ ./configure --with-version=5.1 --with-distro=icewm-mini
 
$ make icewm-mini.cd
''$ autoconf # файл *configure нужно перегенерить, configure.ac изменился!''
...
 
$ make distclean
''$ ./configure --with-version=5.1 --with-distro=icewm-mini''
 
''$ make icewm-mini.cd''
 
...
 
''$ make distclean''
 
 
И бегом в ~/out/desktop ... хм, а теперь там есть каталог /out/icewm-mini, в
И бегом в ~/out/desktop ... хм, а теперь там есть каталог /out/icewm-mini, в
котором лежит altlinux-5.1-...-icewm-mini-...iso, заработало что-ли?
котором лежит altlinux-5.1-...-icewm-mini-...iso, заработало что-ли?
Проверим ещё раз (с другим distro):
Проверим ещё раз (с другим distro):
 
$ ./configure --with-version=5.1 --with-distro=icewm
 
$ make icewm-mini.cd
''$ ./configure --with-version=5.1 --with-distro=icewm''
...
 
$ make distclean
''$ make icewm-mini.cd''
 
...
 
''$ make distclean''
 
 
Точно. Заработало. Для нашей цели вполне сойдёт. На строку (194) уже можно
Точно. Заработало. Для нашей цели вполне сойдёт. На строку (194) уже можно
и не смотреть. Комбайн нас правильно понял и всё сделал как заказывали.
и не смотреть. Комбайн нас правильно понял и всё сделал как заказывали.
Строка 602: Строка 427:
Как обычно - добавляем пару строк в главный Makefile.in (50-51):
Как обычно - добавляем пару строк в главный Makefile.in (50-51):


 
46 # ***********************************************************************
46 # ***********************************************************************
47 console.cd: | install2 main rescue install-cd.@IMAGETYPE@
 
48 WM-mini.cd: | use-WM-mini use-wdm install2 main install-cd.@IMAGETYPE@
''47 console.cd: | install2 main rescue install-cd.@IMAGETYPE@''
49 icewm-mini.cd: | use-icewm-mini use-xdm install2 main install-cd.@IMAGETYPE@
 
50 antique-full.cd: | use-antique-base disk-antique-disk use-xdm install2 main rescue install-cd.@IMAGETYPE@
''48 WM-mini.cd: | use-WM-mini use-wdm install2 main install-cd.@IMAGETYPE@''
51 antique-base.cd: | use-antique-base use-xdm install2 main install-cd.@IMAGETYPE@
 
52 # ***********************************************************************
''49 icewm-mini.cd: | use-icewm-mini use-xdm install2 main install-cd.@IMAGETYPE@''
 
''50 antique-full.cd: | use-antique-base disk-antique-disk use-xdm install2 main rescue install-cd.@IMAGETYPE@''
 
''51 antique-base.cd: | use-antique-base use-xdm install2 main install-cd.@IMAGETYPE@''
 
52 # ***********************************************************************
 
 


Тут появилось всего одно незнакомое слово "disk-...", что оно означает
Тут появилось всего одно незнакомое слово "disk-...", что оно означает
смотрим в файле use.mk.in:
смотрим в файле use.mk.in:


 
78 # put on first disk, but don't install by default
''78 # put on first disk, but don't install by default''
79 disk-%::
 
80 echo GLOBAL_DISK_PACKAGE_LISTS+='$(subst disk-,,$@)' >> "$(call scfg,main)"
''79 disk-%::''
81 @echo "*** added $(subst disk-,,$@) to main" >&2
 
''80 echo GLOBAL_DISK_PACKAGE_LISTS+='$(subst disk-,,$@)' >> "$(call scfg,main)"''
 
''81 @echo "*** added $(subst disk-,,$@) to main" >&2''
 
 


Если что-то непонятно открываем словарь stardict и переводим строку (78)
Если что-то непонятно открываем словарь stardict и переводим строку (78)
Строка 644: Строка 454:
подправляем ***-disk (комметируем 2 строки, иначе сборка обломается):
подправляем ***-disk (комметируем 2 строки, иначе сборка обломается):


###WindowMaker -base
###wmsystemtray -base


''###WindowMaker -base''
Apt-get увидит лишние слова в конце строки, и не сможет найти пакеты. Закидываем оба файла в /m-p-d/profiles/pkg/lists/...
 
''###wmsystemtray -base''
 
 
 
Apt-get увидит лишние слова в конце строки, и не сможет найти пакеты.
 
Закидываем оба файла в /m-p-d/profiles/pkg/lists/...


Настраиваем apt-get  (/etc/apt/sources.list):
Настраиваем apt-get  (/etc/apt/sources.list):
 
rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ i586 classic
 
rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ noarch classic
 
''rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ i586 classic''
rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ i586 hasher
 
rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ noarch hasher
''rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ noarch classic''
 
''rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ i586 hasher''
 
''rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ noarch hasher''
 
 
 
У меня одновременно подключены - бранч 5.1 (зеркало) и киевский бранч (они совместимы).
У меня одновременно подключены - бранч 5.1 (зеркало) и киевский бранч (они совместимы).
И делаем (в каталоге .../m-p-d/...):
И делаем (в каталоге .../m-p-d/...):


$ ./configure --with-version=5.1 --with-distro=antique-base
$ make antique-base.cd
...
$ make distclean
...
$ ./configure --with-version=5.1 --with-distro=antique-full
$ make antique-full.cd
...
$ make distclean


''$ ./configure --with-version=5.1 --with-distro=antique-base''
Вот и всё. Всё собралось и всё работает. И названия у исошек правильные.


''$ make antique-base.cd''
Общее пожелание: Делайте локальное зеркало. Интернет - штука дорогая и
бывают обломы, как правило - в конце сборки (когда трафик уже использован).


...
ЗЫ. Всем удачи в дистростроительстве. И почаще заглядывайте на вики.
 
Там много полезного есть (если поискать хорошенько).
''$ make distclean''
 
...
 
''$ ./configure --with-version=5.1 --with-distro=antique-full''


''$ make antique-full.cd''
==Суть работы с m-p-d==
Суть работы с профилем m-p-d от Радика <br>
m-p-d - это звездолет, который несет в себе кучу самолетов, моделей которых может быть великое множество (по дистрибутивам).
Все дистрибутивы состоят из составных частей. Они лежат в mkimage-profiles-desktop/profiles/pkg/lists.
Там вы перечисляете все те пакеты, которые хотите видеть в своем дистрибутиве.
Лично я в теории всегда понимаю плохо, поэтому показываю на примере своего профиля.
Для дистрибутивов lxdesktop я создал специальные наборы пакетов:
lxde
lxde-audio
lxde-games
lxde-internet
lxde-lite
lxde-lite-internet
lxde-lite-office
lxde-office
lxde-video
Содержимое посмотрите сами.
Эти пакеты прописываются в файле use.mk.in. Например, для live:
use-lxdesktop-live:
    echo GLOBAL_LIVE_PACKAGE_LISTS+='lxde lxde-office' >> "$(call scfg,live)"
    echo GLOBAL_LIVE_PACKAGE_LISTS+='lxde-audio lxde-internet lxde-video' >> "$(call scfg,live)"
    echo GLOBAL_LIVE_PACKAGE_LISTS+='scanning graphics-editing gtk-dictionary' >> "$(call scfg,live)"
    echo GLOBAL_LIVE_PACKAGE_LISTS+='desktop alterator-desktop' >> "$(call scfg,live)"
    $(call done,$@)
То есть тут прописываются цели для сборки Live-дистрибутива.


...
Теперь переходим к следующему пункту. Дистрибутив состоит из нескольких частей:
# Брендинг;
# Инсталлятор;
# Используемая платформа;
# и т.д.
Они прописываются в configure.ac.
Логика такая. Если вы в файле configure.ac прописываете что-то типа:
lxdesktop*)
  BRANDING=${with_branding:-"altlinux-lxdesktop"}
  INSTALLER=${with_installer:-"lxdesktop"}
  APTCONF_PACKAGE="sisyphus"
  NODOCS="#"
  LABEL="LXDEsktop"
  DEFAULT_ISO=${with_image:-"lxdesktop.dvd"};;
То при сборке вы должны вызывать параметр --with-distro=lxdesktop и у вас автоматически применится и брендинг, прописанный в lxdesktop и все остальное.
Далее.
Идем в Makefile.in. Тут прописывается уже сама цель сборки.
На примере того-же lxdesktop-live:


''$ make distclean''
live-lxdesktop.cd: | use-lxdesktop-live use-gdm use-nm live live-cd.@IMAGETYPE@
Давайте разберем по косточкам:
Я сказал, что при указании собрать live-lxdesktop.cd должен использоваться use-lxdesktop-live, который мы уже задали в use.mk.in. Параметр use-gdm уже был задан в use.mk.in, мы просто его используем. Про use-nm аналогично. live и live-cd указывают на то, что этот дистрибутив должен быть "live" и соответсвенно mkimage весь набор пакетов оберенет в live-режим.
И теперь, когда мы все это задали в файлах, нам необходимо собрать дистрибутив используя следующий набор команд:


autoconf
./configure --with-distro=lxdesktop --with-version=6.0 --with-arch=i586
nice time make live-lxdesktop.cd


В ./configure я не указываю дополнительных параметров, так как они все у меня прописаны в configure.ac.


Вот и всё. Всё собралось и всё работает. И названия у исошек правильные.
А например раньше я пользовался такой вот строчкой:


Общее пожелание: Делайте локальное зеркало. Интернет - штука дорогая и
./configure --with-version=platform5 --with-distro=lxde-desktop --with-branding=lxde-desktop --with-arch=i586
бывают обломы, как правило - в конце сборки (когда трафик уже использован).
Что значит каждый из этих параметров оставляю на домашнее задание.  


ЗЫ. Всем удачи в дистростроительстве. И почаще заглядывайте на вики.
То есть не нужно задавать цель, где будут прописаны файлы с брендингом. Это или прописывается в файле configure.ac или указывается при параметром --with-branding=lxde-desktop в параметрах конфигура.
Там много полезного есть (если поискать хорошенько).


Надеюсь объяснил доступно и понятно.
[[Категория:Mkimage]]
[[Категория:Mkimage]]

Текущая версия от 17:07, 21 июня 2019

"Введение в сборку дистрибутивов"

Внимание! Актуальный на данный момент (бранч p8, p9, Сизиф) инструментарий для сборки дистрибутивов: mkimage-profiles. Инструкция ниже описывает устаревший инструментарий для сборки дистрибутивов на бранчах 5.1, p6, p7.


Это инструкция по самостоятельной сборке дистрибутивов на базе бранча 5.1 АЛЬТ-линукс.

Собрана из отдельных сообщений автора NotHAM (А.Чернов) топик на форуме

Основная информация по сборке дистрибутивов находится на странице вики: Mkimage/Profiles/Desktop,а также по многочисленным ссылкам с этой страницы. Год назад читать это непосвященному пользователю было невозможно, но в последнее время ситуация меняется в лучшую сторону (в основном благодаря усилиям М. Шигорина). Попытаюсь пересказать основное содержимое этой страницы на языке, понятном продвинутому пользователю АЛЬТ-линукса.

Основные инструменты:

  • бранч 5.1 (р5, сизиф - это для особо продвинутых), крайне желательно иметь локальное зеркало, сборка через интернет - "врагу не пожелаешь", хотя и работает, но делать что-то кроме минималки через интернет - это проще скачать готовое;
  • mkimage-profiles-desktop (не пакет из бранчей-сизифа, а гит boyarch@ - комбайн с "вертикальным взлётом и посадкой", известный как m-p-d);

Дополнительные инструменты (это уже пакеты из бранчей-сизифа):

  • git
  • hasher
  • autoconf_2.60 (самой свежей версии)
  • mkimage
  • make
  • установленный АЛЬТ-линукс (любой, хотя все примеры в дальнейшем буду прогонять на antique-full (с доустановленными pidgin-mini и seamonkey): http://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/iso/

Для создания локального зеркала (5.1) нужно иметь дополнительный раздел достаточного размера либо большой раздел /home (чтобы всем места хватило). Создать зеркало можно командой (в дальнейшем обновлять ей же):

rsync <опции> <источник> <получатель>

у меня это выглядит так

rsync --timeout=6000 -avlpztc --exclude 'SRPMS' --exclude 'SRPMS.all' --exclude 'SRPMS.classic' --exclude 'i686' --exclude 'x86_64' --exclude 'x86_32' --stats --delete-after --verbose rsync.altlinux.org::ALTLinux/5.1/branch/ /mnt/sda5/mirror/ALTLinux/5.1

Здесь:

<источник> = rsync.altlinux.org::ALTLinux/5.1/branch/
<получатель> = /mnt/sda5/mirror/ALTLinux/5.1

остальное - опции.

Зеркало занимает примерно 21 ГБ (только бинарники). Если что-то не эксклюдить - займёт больше. Устанавливаем git (и всё что потянет). Сразу после установки - представляемся ему:

$ git config --global user.name "Your Name Comes Here"
$ git config --global user.email "you@yourdomain.example.com"

Устанавливаем пакеты autoconf_2.60, mkimage, make.

Устанавливаем hasher (и всё что потянет), добавляем пользователя:

# hasher-useradd USER

Здесь USER - это ваш логин. Это единственный запуск хашера из под root. Перезагружаемся.

Создаём рабочие каталоги, например ~/mkiso/branch, ~/mkiso/sisyphus, ~/out (не обязательно - создастся автоматически, здсь будут лежать "блины"). Теперь (согласно вики) нужно склонировать гит boyarch@, но мы пойдём другим путём. Скачиваем отсюда тарбол (mkimage-profiles-desktop.tar.bz2):

http://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/

Это тот же самый клон, но по состоянию на 26.01.2010. Он как-то лучше приспособлен к работе с бранчами (имхо). Тарбол распаковываем в каталог ~/mkiso/branch/. Там должен появиться /mkimage-profiles-desktop (гит). Все дальнейшие примеры будут на основе этого клона. Особенно это касается редактирования конфигов (буду указывать номера строк). Хотя желающие могут сделать как по вики, в каталоге ~/mkiso/sisyphus выполнить команду:

$ git clone git://git.altlinux.org/people/boyarsh/packages/mkimage-profiles-desktop.git

Только про расхождения номеров строк потом вопросов не задавайте. Во всех случаях необходимо сделать резервные копии m-p-d (мало-ли что).

Для начала рекомендую ознакомиться с содежимым файлов: .../m-p-d/Makefile.in, configure.ac, use-mk.in (их будем редактировать), а также с содержимым .../m-p-d/profiles/pkg/lists/... Туда файлы будем добавлять. Обратить особое внимание на файлы base.in, kernel.in, xorg.in. Редактировать не будем, но их содержимое нужно представлять себе достаточно четко.

Как известно, всякая сложная машина перед первой поездкой требует некоторой подготовки. Точно так-же и комбайн "m-p-d" - подготавливаем для себя. Чтобы не повторять некоторые ошибки других:

http://forum.altlinux.org/index.php/topic,7274.msg101496.html#msg101496

Здесь, повидимому, пользователь запустил сборку не сделав перезагрузку после команды ...# hasher-useradd USER. Я обращал на это Ваше внимание ранее (и на вики об этом есть). Да и делать всё начал по советам на вики, у нас будет несколько другой путь. Ещё рекомендую глянуть тут:

http://forum.altlinux.org/index.php/topic,7274.msg101513.html#msg101513

Это не наш случай, потому пока игнорируем (просто принимаем к сведению).

Подготовка: 1. Открываем в любом текстовом редакторе, умеющем показывать номера строк, файл /mkiso/branch/m-p-d/configure.ac (вполне подходит xfce-mousepad из сборки antique, или любой другой, который не добавляет скрытых кодов в текст). Ищем в файле строки:

31				    APTCONF_PACKAGE="platform5"
.....
210				    APTCONF_PACKAGE="desktop"

Переменная APTCONF_PACKAGE (используется в base.in) определяет, какой пакет будет подложен в нашу сборку для начальных настроек apt-get и синаптика. Допустимые значения: "desktop"(5.0), "platform5"(p5), "branch"(5.1), "sisyphus". Поскольку мы собираем на бранче 5.1 - наш выбор - "branch". Заменяем и сохраняем изменения в файле. Наши первые сборки будут использовать строку 210, а дальше видно будет. Для желающих - если в "m-p-d" ещё ничего не запускали (нет мусора), можно закоммитить изменения (не обязательно):

git add . # Пробел и точка в конце команды - обязательны. git commit -m "small changes for branch 5.1"

2. Настраиваем apt-get. Проще всего это сделать с помощью синаптика, выбрав нужные репозитории. У меня это выглядит так (/etc/apt/sources.list):

rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ i586 classic 
rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ noarch classic
### rpm file:///mnt/sda5/mirror/Branch5.1/ i586 hasher 
### rpm file:///mnt/sda5/mirror/Branch5.1/ noarch hasher
### rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ i586 hasher
### rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ noarch hasher

Т. е. apt-get направлен на зеркало, хотя могу подключить и любые другие из списка, всё совместимо. У кого зеркала ещё нет - просто подключите в синаптике бранч 5.1.

Всё готово, переходим в каталог mkimage-profiles-desktop и даем команды:

$ autoconf	# для того пакет и ставили, сейчас он создаст файл *configure
$ ./configure	# пока без параметров
$ make rescue.cd

После удачного завершения сборки, что занимает некоторое время в зависимости от скорости ПК, и требует получения примерно 150 МБ трафика, если нет локального зеркала и пакеты закачиваются из инета, сразу же делаем (обязательно!):

$ make distclean

Дело в том, что "комбайн" в процессе работы создаёт в m-p-d в подкаталогах несколько рабочих каталогов, нужных только ему, в т. ч. хашерниц, с которыми он умеет обращаться гораздо лучше нас, и после работы там остаётся очень много мусора (до нескольких ГБ - в основном распакованные пакеты). Нужно подчищать за ним.

Теперь идём в каталог /out/desktop/ и смотрим на наше творение altlinux-5.0...rescue.cd.iso, размером примерно 112 МБ. Между прочим вполне рабочий. Можете проверить. Только вот с версией что-то не то, нам нужна 5.1.

Исправляем свой недочет: опять идём в /mkimage-profiles-desktop и делаем:

$ ./configure --with-version=5.1
$ make minimal.cd
.... несколько минут и примерно 400 МБ трафика.
$ make distclean

Опять идём в /out/desktop/ и опять смотрим altlinux-5.1-...install.cd.iso размером примерно 260 МБ, и тоже рабочая, урезанная минималка (без синаптика).

Проверим, правильно ли мы выбрали значение APTCONF_PACKAGE, для этого заныриваем с помощью mc в iso-образ (у кого не antique - проверьте, установлен ли пакет cdrkit-utils, если нет - доустановите), там идём в каталог /ALTLinux/RPMS.main и ищем пакет apt-conf-branch-5.1.1..., если есть - всё сделано правильно.

Домашнее задание: сделать самим сборку М. Шигорина с KDE3. Подсказка: (version=5.1 make kde3.cd), кто забудет distclean - тому незачёт.

Сначала сохраним где нибудь собранную ранее урезанную минималку, она скоро понадобится для сравнения. Далее читаем вики, начиная с фразы "А как свой?". Там много полезного.

Открываем в редакторе с нумерацией строк файл /mkiso/branch/m-p-d/Makefile.in и в промежутке между строками (45)slinux.cd и (47)minimal.cd вписываем следующее (кроме строк 45 и 49):

(45)slinux.cd: | use-slinux use-gdm install2 main install-cd.@IMAGETYPE@
(46)# ***********************************************************************
(47)console.cd: | install2 main rescue install-cd.@IMAGETYPE@
(48)# ***********************************************************************
(49)minimal.cd: | use-icewm use-xdm install2 main install-cd.@IMAGETYPE@

Номера строк проставит редактор (вписывать не нужно). На вики, то что мы сделали, называется "крупноблочная" настройка. По сравнению с minimal - мы удалили "крупный" блок icewm, с содержимым можно ознакомиться в /m-p-d/profiles/pkg/lists/ файл icewm (hi!), удалили блок xdm (в данном случае это просто пакет) и добавили блок rescue (действительно крупный). Теперь в каталоге /m-p-d делаем

$ ./configure --with-version=5.1
$ make console.cd
...
$ make distclean

Идём в каталог /out/desktop/ и смотрим результат. Там лежит образ консольной сборки, которую многие знают и пробовали, но опять под названием desktop, как и предыдущая сборка. Это происходит потому, что при запуске ./configure мы не использовали параметр --with-distro=..., т. к. пока не знаем, что тут написать (Файл configure.ac мы ещё толком не правили, попозже поправим). Это не страшно, т. к. сборка полностью рабочая и переименовать несложно. Теперь "заныриваем" с помощью mc в свежий блин, а другой панелью - в первый вариант, и начинаем сравнивать. В корне образов сразу видны отличия, если в первом варианте есть крупный блок altinst (81М), то в новом варианте добавился блок rescue (95 M). Далее в /ALTLinux/RPMS.main смотрим - в новом варианте отсутствуют большинство шрифтов, ndiswrapper, ну и ещё кое-что, что предусмотрено в файле xorg.in (я не просто так просил обратить внимание на файлы base.in, kernel.in, xorg.in. в самом начале). Делаем вывод - xorg.in в новую сборку попал лишь частично - только то, что притянулось по зависимостям инсталлером. Кто на это повлиял? В Makefile.in про xorg нет ни слова (можете не искать). Значит "крупноблочная" коррекция может иногда и напакостить (но не в этом случае), поэтому требуется вникать в более "более тонкую" настройку (use.mk.in). Открываем в редакторе (с нумерацией строк конечно) файл use.mk.in и начинаем искать:

(39) $(DESKTOP_TARGETS): | $(AUTOCFG) use-xorg
...
(44) use-xorg:
(45)        echo GLOBAL_BASE_PACKAGE_LISTS+='xorg' >> "$(call scfg,main)"
...
(107) use-desktop: use-xorg use-alterator-desktop


Мда..., ну и который из них наш? Оказывается самый первый (39), но там есть какой-то $(DESKTOP_TARGETS), про который в строке (35) написано:

(35) DESKTOP_TARGETS = $(DE_TARGETS) $(WM_TARGETS) $(FEATURE_TARGETS)

Уже легче, в строках 17-22 есть про WM_TARGETS. Всё понятно, убрав из строки в Makefile.in "use-xdm", мы тем самым оторвали подключение к сборке файла xorg (по зависимостям что-то притянулось, но не всё).

Цитата с вики:

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

Что-то я не пойму - это "ясность" или "запутанность", и что делает ndiswrapper в файле xorg.in, они что - жить друг без друга не могут?

Ну да ладно. Другого комбайна всё равно нет, а этот работает. Причем хорошо. Иногда. Вот сегодня сборка получилась со 2-го раза, первый раз обломалась с ошибкой: find не смог найти "find" (бывает). Закрыл seamonkey (2 экз.), закрыл оба текстовых редактора, закрыл один из терминалов и отключил погремушку (gkrellm-монитор). Оставил один терминал urxvt. После этого всё собралось. Имейте в виду, если что.

Домашнее задание: Будем делать слегка продвинутую минималку с WindowMaker-ом, и с wdm конечно. Xorg по понятной причине, должен отвалиться (см. строки 17-22 в use.mk.in). Потому придётся настраивать "крупноблочно", "более тонко" и "совсем тонко" (вики). Нужно приготовить файл WM-mini и положить в /m-p-d/profiles/pkg/lists/...Будем настраивать. В качестве образца можно использовать файл icewm, который там уже есть.

А так: "крупноблочно", "более тонко" и "совсем тонко". Как на вики сказано.

Сначала делаем WM-mini.

1. "крупноблочно".

В файл /mkiso/branch/m-p-d/Makefile.in добавляем строки (48-49):

46 # ***********************************************************************
47 console.cd: | install2 main rescue install-cd.@IMAGETYPE@
48 WM-mini.cd: | use-WM-mini use-wdm install2 main install-cd.@IMAGETYPE@
49 #icewm-mini.cd: | use-icewm-mini use-xdm install2 main install-cd.@IMAGETYPE@
50 # ***********************************************************************

Строку (49) пока оставляем закомментированой. Надеюсь что здесь уже всё понятно.

2. "более тонко".

В файл /mkiso/branch/m-p-d/use.mk.in добавляем строку (21), об этом было ранее и тоже понятно (чтобы xorg не отвалился).

17 WM_TARGETS = \
18	use-fvwm \
19	use-icewm \
20	use-wmaker \
21	use-wdm \
22	use-xdm \
23	use-gdm

Всё? - конечно нет. Комбайн - он слегка туповатый и не знает, что значит use-wdm, потому будем обучать. А как? А так-же как он обучен использовать use-xdm. Ищем.

50 use-xdm:
51	echo GLOBAL_BASE_PACKAGES+='xdm' >> "$(call scfg,main)"
52	# TODO: tune it as well, see live/image-scripts.d/05xdm
53	$(call done,$@)

Оказывается всё довольно просто, осталось добавить нужные строки, но сначала посмотрим, куда нас отсылает строка (52) /m-p-d/profiles/live/image-scripts.d/05xdm, Там этот скриптик называется чуть по другому, но понять можно. Читаем, и, к изумлению обнаруживаем, что он приделывает кнопки к нашему xdm, а мы голову ломали, в интернете искали, а в комбайне это уже предусмотрено на будущее ..., да и дизайн там уже заложен, ну дела ... (Правда это всё для live.cd, но использовать можно, если нужно). Добавляем строки:

55 use-wdm:
56	echo GLOBAL_BASE_PACKAGES+='wdm' >> "$(call scfg,main)"
57	$(call done,$@)


Строки 56-57 теперь подсунут в нашу сборку wdm, а строка 21, совместно с бывшими 35, 39, 45 (теперь номера поменялись) подсунут xorg. Всё просто.

3. "совсем тонко".

Ну а тут совсем просто (именно тут и определяется основной состав сборки). Открываем в редакторе заготовленный файл /m-p-d/profiles/pkg/lists/WM-mini (однострочный) и добавляем всё, что нужно для минималки.

###WindowMaker
WindowMaker
###synaptic
synaptic
synaptic-usermode

###alterator
alterator-browser-qt
alterator-standalone
alterator-xkb
alterator-mkbootflash
alterator-net-pppoe
alterator-net-pptp
alterator-net-openvpn
alterator-nsswitch
###alterator-packages
 
###alterator-pkg
alterator-profile
alterator-proxy

### for system
sound-scripts
hal-laptop
dbus-tools
dbus-tools-gui
cdrkit-utils


Тут, самое главное, не наделать опечаток, иначе сборка обломается и долго потом искать будете, почему. Имена пакетов должны быть написаны строго так, как в бранче (как их синаптик видит). Иначе apt-get их не найдёт.

Теперь делаем icewm-mini (многим известная минималка).

1. "крупноблочно".

В файле /mkiso/branch/m-p-d/Makefile.in раскомментируем строку (49).

2. "более тонко".

Ничего не делаем, всё уже сделано до нас.

3. "совсем тонко".

Делаем копию файла WM-mini, переименовываем в icewm-mini, WindowMaker в тексте заменяем на icewm и закидываем файл в /m-p-d/profiles/pkg/lists/.

Всё готово. Собираем свои поделки.

$ ./configure --with-version=5.1
$ make WM-mini.cd
...
$ make distclean

Переименовываем результат в ...WM-mini...iso . Второй раз запускать ./configure не обязятельно (файлы ***.in не изменялись).

$ make icewm-mini.cd
...
$ make distclean

И опять ...desktop... (переименовываем), мы с ним ещё разберёмся.

Сравниваем исошки, видим, что с icewm получилась поменьше, потому её в основном и собирал. Проверить комплектацию xorg очень просто, заныриваем в образ (mc) и смотрим наличие шрифтов из xorg.in. Шрифты все есть, значит всё сделали правильно (подключился весь).

Домашнее задание. Изучить файл /mkiso/branch/m-p-d/configure.ac на предмет использования разных --with...=, у нас desktop получается вблизи от строки (210), но редактировать будем совсем в другом месте. Далее будем собирать antique (base и full). Нужно скачать профили http://forum.altlinux.org/index.php/topic,6091.msg102014.html#msg102014 (во вложении), переименовать как нужно (без .txt). Приготовить для закидывания в /m-p-d/profiles/pkg/lists/

Сначала попытаемся решить проблему с надоедливым "desktop". На самом деле параметр --with-distro может принимать множество всевозможных значений, в файле configure.ac это хорошо видно в операторе case, который начинается в строке (32) и тянется до строки (195). Там есть заготовки для всех Альтовских дистров "...на каждый чих отдела маркетинга..." (с) Вики WhiteLabel. Даже для произвольного distro что-то предусмотрено. Только вот незадача. Если запустить сборку с произвольным distro, она обломается с ошибкой "cannot find package doc", пойдём искать почему:

189				    *)
190					BRANDING=${with_branding:-"altlinux-desktop"}
191					INSTALLER=${with_installer:-"desktop"}
192					DOCS="$with_docs"
193					LABEL="Desktop"
194					DEFAULT_ISO="kde.dvd";;


А всё потому, что в строке (192) DOCS должно получить какое-то значение, а получает какую-то фигню, которую apt-get не может потом найти. Кстати для варианта custom* (стр. 182 - ситуация аналогичная, да и в свежем клоне гита boyarch@ всё то-же самое, только номера строк другие). Наверное никто не чихнул?? Щас поправим (подсмотрим в строке 168 и сделаем так-же):

192					DOCS=${with_docs:-"desktop"}

Теперь быстренько проверим (сначала сохранив файл):

$ autoconf	# файл *configure нужно перегенерить, configure.ac изменился!
$ ./configure --with-version=5.1 --with-distro=icewm-mini
$ make icewm-mini.cd
...
$ make distclean

И бегом в ~/out/desktop ... хм, а теперь там есть каталог /out/icewm-mini, в котором лежит altlinux-5.1-...-icewm-mini-...iso, заработало что-ли? Проверим ещё раз (с другим distro):

$ ./configure --with-version=5.1 --with-distro=icewm
$ make icewm-mini.cd
...
$ make distclean

Точно. Заработало. Для нашей цели вполне сойдёт. На строку (194) уже можно и не смотреть. Комбайн нас правильно понял и всё сделал как заказывали. Оказывается, что не такой уж он и тупой.

Для справки- теперь APTCONF_PACKAGE использует значение из строки (31) а не (210), не зря мы её в самом начале исправили.

Начинаем собирать antique. А что тут собирать-то, уже всё просто и понятно.

1. "крупноблочно".

Как обычно - добавляем пару строк в главный Makefile.in (50-51):

46 # ***********************************************************************
47 console.cd: | install2 main rescue install-cd.@IMAGETYPE@
48 WM-mini.cd: | use-WM-mini use-wdm install2 main install-cd.@IMAGETYPE@
49 icewm-mini.cd: | use-icewm-mini use-xdm install2 main install-cd.@IMAGETYPE@
50 antique-full.cd: | use-antique-base disk-antique-disk use-xdm install2 main rescue install-cd.@IMAGETYPE@
51 antique-base.cd: | use-antique-base use-xdm install2 main install-cd.@IMAGETYPE@
52 # ***********************************************************************

Тут появилось всего одно незнакомое слово "disk-...", что оно означает смотрим в файле use.mk.in:

78 # put on first disk, but don't install by default
79 disk-%::
80	echo GLOBAL_DISK_PACKAGE_LISTS+='$(subst disk-,,$@)' >> "$(call scfg,main)"
81	@echo "*** added $(subst disk-,,$@) to main" >&2

Если что-то непонятно открываем словарь stardict и переводим строку (78)

2. "более тонко".

Ничего не делаем, всё уже сделано.

3. "совсем тонко".

Переименовываем скачанные профили (ссылка выше) в antique-base и antique-disk, подправляем ***-disk (комметируем 2 строки, иначе сборка обломается):

###WindowMaker		-base
###wmsystemtray		-base

Apt-get увидит лишние слова в конце строки, и не сможет найти пакеты. Закидываем оба файла в /m-p-d/profiles/pkg/lists/...

Настраиваем apt-get (/etc/apt/sources.list):

rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ i586 classic
rpm file:///mnt/sda5/mirror/ALTLinux/5.1/ noarch classic

rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ i586 hasher
rpm ftp://ftp.linux.kiev.ua/pub/Linux/ALT/people/_anatoly/packages/Branch5.1/ noarch hasher

У меня одновременно подключены - бранч 5.1 (зеркало) и киевский бранч (они совместимы). И делаем (в каталоге .../m-p-d/...):

$ ./configure --with-version=5.1 --with-distro=antique-base
$ make antique-base.cd
...
$ make distclean
...
$ ./configure --with-version=5.1 --with-distro=antique-full
$ make antique-full.cd
...
$ make distclean

Вот и всё. Всё собралось и всё работает. И названия у исошек правильные.

Общее пожелание: Делайте локальное зеркало. Интернет - штука дорогая и бывают обломы, как правило - в конце сборки (когда трафик уже использован).

ЗЫ. Всем удачи в дистростроительстве. И почаще заглядывайте на вики. Там много полезного есть (если поискать хорошенько).

Суть работы с m-p-d

Суть работы с профилем m-p-d от Радика
m-p-d - это звездолет, который несет в себе кучу самолетов, моделей которых может быть великое множество (по дистрибутивам). Все дистрибутивы состоят из составных частей. Они лежат в mkimage-profiles-desktop/profiles/pkg/lists. Там вы перечисляете все те пакеты, которые хотите видеть в своем дистрибутиве. Лично я в теории всегда понимаю плохо, поэтому показываю на примере своего профиля. Для дистрибутивов lxdesktop я создал специальные наборы пакетов:

lxde
lxde-audio
lxde-games
lxde-internet
lxde-lite
lxde-lite-internet
lxde-lite-office
lxde-office
lxde-video

Содержимое посмотрите сами. Эти пакеты прописываются в файле use.mk.in. Например, для live:

use-lxdesktop-live:
   echo GLOBAL_LIVE_PACKAGE_LISTS+='lxde lxde-office' >> "$(call scfg,live)"
   echo GLOBAL_LIVE_PACKAGE_LISTS+='lxde-audio lxde-internet lxde-video' >> "$(call scfg,live)"
   echo GLOBAL_LIVE_PACKAGE_LISTS+='scanning graphics-editing gtk-dictionary' >> "$(call scfg,live)"
   echo GLOBAL_LIVE_PACKAGE_LISTS+='desktop alterator-desktop' >> "$(call scfg,live)"
   $(call done,$@)

То есть тут прописываются цели для сборки Live-дистрибутива.

Теперь переходим к следующему пункту. Дистрибутив состоит из нескольких частей:

  1. Брендинг;
  2. Инсталлятор;
  3. Используемая платформа;
  4. и т.д.

Они прописываются в configure.ac. Логика такая. Если вы в файле configure.ac прописываете что-то типа:

lxdesktop*)
  BRANDING=${with_branding:-"altlinux-lxdesktop"}
  INSTALLER=${with_installer:-"lxdesktop"}
  APTCONF_PACKAGE="sisyphus"
  NODOCS="#"
  LABEL="LXDEsktop"
  DEFAULT_ISO=${with_image:-"lxdesktop.dvd"};;

То при сборке вы должны вызывать параметр --with-distro=lxdesktop и у вас автоматически применится и брендинг, прописанный в lxdesktop и все остальное. Далее. Идем в Makefile.in. Тут прописывается уже сама цель сборки. На примере того-же lxdesktop-live:

live-lxdesktop.cd: | use-lxdesktop-live use-gdm use-nm live live-cd.@IMAGETYPE@

Давайте разберем по косточкам: Я сказал, что при указании собрать live-lxdesktop.cd должен использоваться use-lxdesktop-live, который мы уже задали в use.mk.in. Параметр use-gdm уже был задан в use.mk.in, мы просто его используем. Про use-nm аналогично. live и live-cd указывают на то, что этот дистрибутив должен быть "live" и соответсвенно mkimage весь набор пакетов оберенет в live-режим. И теперь, когда мы все это задали в файлах, нам необходимо собрать дистрибутив используя следующий набор команд:

autoconf
./configure --with-distro=lxdesktop --with-version=6.0 --with-arch=i586
nice time make live-lxdesktop.cd

В ./configure я не указываю дополнительных параметров, так как они все у меня прописаны в configure.ac.

А например раньше я пользовался такой вот строчкой:

./configure --with-version=platform5 --with-distro=lxde-desktop --with-branding=lxde-desktop --with-arch=i586

Что значит каждый из этих параметров оставляю на домашнее задание.

То есть не нужно задавать цель, где будут прописаны файлы с брендингом. Это или прописывается в файле configure.ac или указывается при параметром --with-branding=lxde-desktop в параметрах конфигура.

Надеюсь объяснил доступно и понятно.