Bootstrap
Материал из ALT Linux Wiki
м (написано по мотивам Ports/arm/Experience и e2k) |
м (ещё пара слов) |
||
Строка 18: | Строка 18: | ||
#* {{cmd|rpm --rebuild --nodeps}} | #* {{cmd|rpm --rebuild --nodeps}} | ||
#* см. далее про ручки помимо <tt>--with bootstrap</tt> | #* см. далее про ручки помимо <tt>--with bootstrap</tt> | ||
- | #* основное отрываемое: static, doc, apidocs, selinux, ssl, python, java | + | #* основное отрываемое: <tt>[[Spec#%check|check]], static, doc, apidocs, selinux, ssl, python, java</tt> |
# запустив hasher, пересобираем его сборочные зависимости в нём самом (порядка 150 пакетов) | # запустив hasher, пересобираем его сборочные зависимости в нём самом (порядка 150 пакетов) | ||
#* разворачиваем BuildRequires по мере возможности, продолжая на этой стадии отключать избыточное | #* разворачиваем BuildRequires по мере возможности, продолжая на этой стадии отключать избыточное | ||
Строка 29: | Строка 29: | ||
Для начальной сборки при помощи {{pkg|rpm}} могут быть полезны следующие уже распространённые в сизифе ключи сборки пакетов: | Для начальной сборки при помощи {{pkg|rpm}} могут быть полезны следующие уже распространённые в сизифе ключи сборки пакетов: | ||
- | * <tt>--disable check --disable static --without doc --without apidocs --without profile --disable selinux --without selinux --disable java --without java --without python3 --disable ldap --disable udev</tt> | + | * <tt>--disable check --without check --disable static --without doc --without apidocs --without profile --disable selinux --without selinux --disable java --without java --without python3 --disable ldap --disable udev</tt> |
- | + | ||
- | + | ||
Для конкретных пакетов могут быть реализованы иные, например: | Для конкретных пакетов могут быть реализованы иные, например: | ||
* vim: <tt>--disable gui_gnome2 --disable gui_gtk2 --disable gui_neXtaw --disable perlinterp --disable rubyinterp --disable tclinterp --disable luainterp --disable gui_any</tt> | * vim: <tt>--disable gui_gnome2 --disable gui_gtk2 --disable gui_neXtaw --disable perlinterp --disable rubyinterp --disable tclinterp --disable luainterp --disable gui_any</tt> | ||
- | * python: <tt>--without valgrind --without tk</tt> | + | * python: <tt>--without valgrind --without tk</tt> |
+ | * где-то ещё видел <tt>cxx, cpp, nls, included_gettext</tt> | ||
при этом: | при этом: | ||
- | # вполне возможно дополнить и другими ручками, но сперва лобовой <tt>--nodeps</tt> на имеющемся сборочном окружении | + | # вполне возможно дополнить и другими ручками, но сперва лобовой <tt>rpm -ba --nodeps</tt> на имеющемся сборочном окружении |
# хорошо бы по возможности приводить их к единой системе и фиксировать здесь | # хорошо бы по возможности приводить их к единой системе и фиксировать здесь | ||
# тесты полезны в нормальном режиме, но занимают существенное время, а нередко требуют дополнительных BR или обламываются по мелочам (один перловый тест из ~6000, ага) | # тесты полезны в нормальном режиме, но занимают существенное время, а нередко требуют дополнительных BR или обламываются по мелочам (один перловый тест из ~6000, ага) | ||
+ | |||
+ | = Настраиваем hasher = | ||
+ | |||
+ | Задействование этого всего вместе с указанием о необходимости перепаковки полученного на входе src.rpm может выглядеть в {{path|~/.hasher/config}} так: | ||
+ | <pre> | ||
+ | known_mountpoints=/proc | ||
+ | repackage_source=1 | ||
+ | query_repackage=1 | ||
+ | rpmargs='--with bootstrap --disable check --without check --disable static --without doc --without apidocs --without profile --disable selinux --without selinux --disable java --without java --without python3 --disable ldap --disable udev' | ||
+ | # libcap-ng | ||
+ | rpmargs="$rpmargs --without python" | ||
+ | # python | ||
+ | rpmargs="$rpmargs --without valgrind --without tk" | ||
+ | # vim | ||
+ | rpmargs="$rpmargs --disable gui_gnome2 --disable gui_gtk2 --disable gui_neXtaw --disable perlinterp --disable rubyinterp --disable tclinterp --disable luainterp --disable gui_any" | ||
+ | </pre> | ||
+ | |||
+ | = Расставляем ручки = | ||
+ | |||
+ | Поскольку анализ и разрывание циклов сборочных зависимостей — занятие довольно трудоёмкое и муторное, стоит фиксировать информацию о них в сизифных пакетах, чтоб в следующий раз было чуть легче (и нет, я видел уже слишком много случаев «это же только сейчас помучиться»). | ||
+ | |||
+ | Предлагаю дополнять спеки пакетов, которые затрагивает бутстрап базового сборочного окружения, параметром bootstrap, ''не'' перекрывающимся с перечисленными выше уже существующими; в частности: | ||
+ | # отключать сборку man/info, если требует {{pkg|help2man}}/{{pkg|makeinfo}}/{{pkg|texinfo}}; | ||
+ | #* довольно неприятны в плане бутстрапа по части {{pkg|perl-*}}, если нет возможности воспользоваться имеющимися хостовыми или noarch-пакетами | ||
+ | # отключать поддержку SSL; | ||
+ | # задействовать bundle'ные gnulib/glib/... вместо системных, если есть; | ||
+ | # возможно, в <tt>%configure</tt> добавлять <tt>--disable-asm --disable-gtk-doc</tt> | ||
+ | |||
+ | Также обратите внимание на произведение <tt>--{without,disable} {test,check}</tt>, при обнаружении отличающегося от '''<tt>--disable check</tt>''' рекомендуется приводить к общему знаменателю | ||
= Ссылки = | = Ссылки = | ||
Строка 47: | Строка 75: | ||
* [[Ports/arm/Experience]] (kas@) | * [[Ports/arm/Experience]] (kas@) | ||
* [http://wiki.debian.org/DebianBootstrap DebianBootstrap] | * [http://wiki.debian.org/DebianBootstrap DebianBootstrap] | ||
+ | * [https://lists.altlinux.org/pipermail/devel/2014-December/199334.html girar-nmu-sort-transaction] | ||
+ | * [http://git.altlinux.org/gears/p/perl.git?p=perl.git;a=tree;f=altlinux/maintainer_notes;hb=HEAD perl/altlinux/maintainer_notes/] | ||
[[Категория:Sisyphus]] | [[Категория:Sisyphus]] | ||
{{Category navigation|title=Ports|category=Ports|sortkey=*}} | {{Category navigation|title=Ports|category=Ports|sortkey=*}} |
Версия 21:44, 7 февраля 2016
Содержание |
«Раскрутка» ALT Linux с нуля
...на новой архитектуре либо при необходимости обеспечить пересборку «с нуля» по иному поводу.
Типичная процедура
Начинаем с какой-либо существующей бинарной среды, пригодной для сборки содержимого базовой сборочной системы сизифа (rpm-build и его зависимости); см., например, опыт портирования на ARM.
Поскольку на первых порах собираемое будет устанавливаться в неё же, есть смысл работать в чруте, представляющем из себя копию корневой файловой системы, со смонтированным /proc.
- сперва собираем rpm
- для новой архитектуры потребуется дополнить installplatform, rpmrc.in
- может потребоваться подпирание по месту, отрыв статической сборки и т.п.
- после успешной сборки устанавливаем полученное и собираем rpm.rpm
- затем собираем toolchain (binutils, gcc, glibc)
- устанавливаем в сборочное окружение по мере сборки
- собираем все архитектурнозависимые пакеты, необходимые для сборки hasher
- rpm --rebuild --nodeps
- см. далее про ручки помимо --with bootstrap
- основное отрываемое: check, static, doc, apidocs, selinux, ssl, python, java
- запустив hasher, пересобираем его сборочные зависимости в нём самом (порядка 150 пакетов)
- разворачиваем BuildRequires по мере возможности, продолжая на этой стадии отключать избыточное
- по возможности дополняем в спеках набор ручек для отключения лишнего (тоже см. ниже)
- не откладывая в долгий ящик, стараемся пропихнуть полученные патчи в сизиф
- продолжаем работу над пополнением порта
Применяем ручки
Для начальной сборки при помощи rpm могут быть полезны следующие уже распространённые в сизифе ключи сборки пакетов:
- --disable check --without check --disable static --without doc --without apidocs --without profile --disable selinux --without selinux --disable java --without java --without python3 --disable ldap --disable udev
Для конкретных пакетов могут быть реализованы иные, например:
- vim: --disable gui_gnome2 --disable gui_gtk2 --disable gui_neXtaw --disable perlinterp --disable rubyinterp --disable tclinterp --disable luainterp --disable gui_any
- python: --without valgrind --without tk
- где-то ещё видел cxx, cpp, nls, included_gettext
при этом:
- вполне возможно дополнить и другими ручками, но сперва лобовой rpm -ba --nodeps на имеющемся сборочном окружении
- хорошо бы по возможности приводить их к единой системе и фиксировать здесь
- тесты полезны в нормальном режиме, но занимают существенное время, а нередко требуют дополнительных BR или обламываются по мелочам (один перловый тест из ~6000, ага)
Настраиваем hasher
Задействование этого всего вместе с указанием о необходимости перепаковки полученного на входе src.rpm может выглядеть в ~/.hasher/config так:
known_mountpoints=/proc repackage_source=1 query_repackage=1 rpmargs='--with bootstrap --disable check --without check --disable static --without doc --without apidocs --without profile --disable selinux --without selinux --disable java --without java --without python3 --disable ldap --disable udev' # libcap-ng rpmargs="$rpmargs --without python" # python rpmargs="$rpmargs --without valgrind --without tk" # vim rpmargs="$rpmargs --disable gui_gnome2 --disable gui_gtk2 --disable gui_neXtaw --disable perlinterp --disable rubyinterp --disable tclinterp --disable luainterp --disable gui_any"
Расставляем ручки
Поскольку анализ и разрывание циклов сборочных зависимостей — занятие довольно трудоёмкое и муторное, стоит фиксировать информацию о них в сизифных пакетах, чтоб в следующий раз было чуть легче (и нет, я видел уже слишком много случаев «это же только сейчас помучиться»).
Предлагаю дополнять спеки пакетов, которые затрагивает бутстрап базового сборочного окружения, параметром bootstrap, не перекрывающимся с перечисленными выше уже существующими; в частности:
- отключать сборку man/info, если требует help2man/makeinfo/texinfo;
- довольно неприятны в плане бутстрапа по части perl-*, если нет возможности воспользоваться имеющимися хостовыми или noarch-пакетами
- отключать поддержку SSL;
- задействовать bundle'ные gnulib/glib/... вместо системных, если есть;
- возможно, в %configure добавлять --disable-asm --disable-gtk-doc
Также обратите внимание на произведение --{without,disable} {test,check}, при обнаружении отличающегося от --disable check рекомендуется приводить к общему знаменателю