Инструкция по
самостоятельной сборке дистрибутивов на базе бранча 5.1 АЛЬТ-линукс.
|
Основная информация по сборке дистрибутивов находится на странице вики: http://www.altlinux.org/Mkimage/Profiles/Desktop а также по многочисленным ссылкам с этой страницы. Год назад читать это непосвященному пользователю было невозможно, но в последнее время ситуация меняется в лучшую сторону (в основном благодаря усилиям М. Шигорина). Попытаюсь пересказать основное содержимое этой страницы на языке, понятном продвинутому пользователю АЛЬТ-линукса. Основные инструменты: - бранч 5.1 (р5, сизиф - это для особо продвинутых), крайне желательно иметь локальное зеркало, сборка через интернет - "врагу не пожелаешь", хотя и работает, но делать что-то кроме минималки через интернет - это проще скачать готовое; - makeimage-profiles-desktop (не пакет из бранчей-сизифа, а гит boyarch@ - комбайн с "вертикальным взлётом и посадкой", известный как m-p-d); Дополнительные инструменты (это уже пакеты из бранчей-сизифа): - git; - hasher; - autoconf_2.60 (самой свежей версии); - mkimage; - установленный АЛЬТ-линукс (любой, хотя все примеры в дальнейшем буду прогонять на 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. Устанавливаем 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. Редактировать не будем, но их содержимое нужно представлять себе достаточно четко. Продолжение следует. ---------------------------------------- Продолжение. "Первые блины". Сначала исправим мою ошибку из предыдущего сообщения - доустановим пакет make. Как известно, всякая сложная машина перед первой поездкой требует некоторой подготовки. Точно так-же и комбайн "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
Т. е. apt-get направлен на зеркало, хотя могу подключить и любые другие
из списка, всё совместимо. У кого зеркала ещё нет - просто подключите в
синаптике бранч 5.1. 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 Ну вот. Всё готово. Поехали. В каталоге mkimage-profiles-desktop делаем: Код:
$ autoconf # для того пакет и ставили, сейчас
он сделает файл *configure
После удачного завершения сборки (надеюсь что у всех), занимает
несколько минут или примерно 150 МБ трафика, сразу же делаем (обязательно!):$ ./configure # пока без параметров $ make rescue.cd Код:
$ make distclean
Дело в том, что "комбайн" в процессе работы создаёт в m-p-d в
подкаталогах несколько рабочих каталогов, нужных только ему, в т. ч.
хашерниц, с которыми он умеет обращаться гораздо лучше нас, и после
работы там остаётся очень много мусора (до нескольких ГБ - в основном
распакованные пакеты). Нужно подчищать за ним.Теперь идём в каталог /out/desktop/ и смотрим на наше творение altlinux-5.0...rescue.cd.iso, размером примерно 112 МБ. Между прочим вполне рабочий. Можете проверить. Только вот с версией что-то не то, нам нужна 5.1. Исправляем свой недочет: опять идём в /mkimage-profiles-desktop и делаем: Код:
$
./configure --with-version=5.1
Опять идём в /out/desktop/ и опять смотрим
altlinux-5.1-...install.cd.iso размером примерно 260 МБ, и тоже
рабочая, урезанная минималка (без синаптика).$ make minimal.cd .... несколько минут или примерно 400 МБ трафика. $ make distclean Проверим, правильно ли мы выбрали значение 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), но там есть(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 ... какой-то $(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 #
***********************************************************************
Строку (49) пока оставляем закомментированой. Надеюсь что здесь уже всё
понятно.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 # *********************************************************************** 2. "более тонко". В файл /mkiso/branch/m-p-d/use.mk.in добавляем строку (21), об этом было в прошлый раз и тоже понятно (чтобы xorg не отвалился). Код:
17 WM_TARGETS = \
Всё? - конечно нет. Комбайн - он слегка туповатый и не знает, что
значит use-wdm, потому будем обучать. А как? А так-же как он обучен
использовать use-xdm. Ищем.18 use-fvwm \ 19 use-icewm \ 20 use-wmaker \ 21 use-wdm \ 22 use-xdm \ 23 use-gdm Код:
50 use-xdm:
Оказывается всё довольно просто, осталось добавить нужные строки, но
сначала посмотрим, куда нас отсылает строка (52)
/m-p-d/profiles/live/image-scripts.d/05xdm,51 echo GLOBAL_BASE_PACKAGES+='xdm' >> "$(call scfg,main)" 52 # TODO: tune it as well, see live/image-scripts.d/05xdm 53 $(call done,$@) Там этот скриптик называется чуть по другому, но понять можно. Читаем, и, к изумлению обнаруживаем, что он приделывает кнопки к нашему xdm, а мы голову ломали, в интернете искали, а в комбайне это уже предусмотрено на будущее ..., да и дизайн там уже заложен, ну дела ... (Правда это всё для live.cd, но почитать можно). Добавляем строки: Код:
55 use-wdm:
Строки 56-57 теперь подсунут в нашу сборку wdm, а строка 21, совместно
с бывшими 35, 39, 45 (теперь номера поменялись) подсунут xorg. Всё
просто.56 echo GLOBAL_BASE_PACKAGES+='wdm' >> "$(call scfg,main)" 57 $(call done,$@) 3. "совсем тонко". Ну а тут совсем просто (именно тут и определяется основной состав сборки). Открываем в редакторе заготовленный файл /m-p-d/profiles/pkg/lists/WM-mini (однострочный) и добавляем всё, что нужно для минималки. Код:
# WindowMaker
Тут, самое главное, не наделать опечаток, иначе сборка обломается и
долго потом искать будете, почему. Имена пакетов должны быть написаны
строго так, как в бранче (как их синаптик видит). Иначе apt-get их не
найдёт.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 Теперь делаем 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
Переименовываем результат в ...WM-mini...iso (достал уже этот desktop).$ make WM-mini.cd ... $ make distclean Второй раз запускать ./configure не обязятельно (файлы ***.in не изменяли). Код:
$ make
icewm-mini.cd
И опять ...desktop... (переименовываем), мы с ним ещё разберёмся.... $ make distclean Сравниваем исошки, видим, что с 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
Точно. Заработало. Для нашей цели вполне сойдёт. На строку (194) уже
можно и не смотреть. Комбайн нас правильно понял и всё сделал как
заказывали. Оказывается, что не такой уж он и тупой.$ make icewm-mini.cd ... $ make distclean Для справки- теперь 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
Если что-то непонятно открываем словарь stardict и переводим строку (78)79 disk-%:: 80 echo GLOBAL_DISK_PACKAGE_LISTS+='$(subst disk-,,$@)' >> "$(call scfg,main)" 81 @echo "*** added $(subst disk-,,$@) to main" >&2 2. "более тонко". Ничего не делаем, всё уже сделано. 3. "совсем тонко". Переименовываем скачанные профили (ссылка выше) в antique-base и antique-disk, подправляем ***-disk (комметируем 2 строки, иначе сборка обломается): Код:
#WindowMaker -base
Apt-get увидит лишние слова в конце строки, и не сможет найти пакеты.#wmsystemtray -base Закидываем оба файла в /m-p-d/profiles/pkg/lists/... Настраиваем apt-get (/etc/apt/sources.list): Код:
rpm
file:///mnt/sda5/mirror/ALTLinux/5.1/ i586 classic
У меня одновременно подключены - бранч 5.1 (зеркало) и киевский бранч
(они совместимы).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 И делаем (в каталоге .../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 Общее пожелание: Делайте локальное зеркало. Интернет - штука дорогая и бывают обломы, как правило - в конце сборки (когда трафик уже использован). ЗЫ. Всем удачи в дистростроительстве. И почаще заглядывайте на вики. Там много полезного есть (если поискать хорошенько). Анатолий Чернов aka NotHAM. Оригинал инструкции лежит на http://forum.altlinux.org/index.php/topic,3321.msg102666.html там же можно задать вопросы автору. |
<
[ на главную ] |