======Wok и инструментарий====== =====Обзор===== [[http://hg.slitaz.org/cookutils/raw-file/tip/doc/cookutils.en.html|CookUtils]] используется для компиляции и создания (приготовления) пакетов в соответствии с инструкциями, находящимися в рецепте. Он помещает скомпилированные файлы в папку и вызывает TazPkg для упаковки указанной папки в пакет. Рецепт, полученный вами из wok, отличается своей «нижней половиной» от рецепта в TazPkg; рецепт CookUtils содержит правила как для компиляции, так и для упаковки (которые он передает в TazPkg), в то время как TazPkg занимается только упаковкой. CookUtils — одна из многих небольших утилит проекта SliTaz, используемая для автоматической пересборки дистрибутива из исходников. В проекте вы также найдете архив [[ru:cookbook:slitaztools|утилит]], содержащий различные небольшие инструменты, примеры и файлы конфигурации. Генератор дистрибутивов [[http://hg.slitaz.org/tazlito/raw-file/tip/doc/tazlito.en.html|TazLiTo]] предназначен для пользователей и разработчиков; он может извлекать и реконструировать ISO-образ LiveCD и создавать редакцию дистрибутива (flavor) на основе списка пакетов, файла конфигурации и описания. Все утилиты распространяются в виде исходников, а также установлены по умолчанию в SliTaz. Разработчики и будущие участники могут обратиться к странице [[http://www.slitaz.org/ru/devel/forge.php|разработки]], которая содержит информацию об управлении проектом SliTaz. ===Структура и организация Wok=== //Wok// — это структура каталогов, в которой размещаются все доступные пакеты. Каждый каталог содержит по меньшей мере один рецепт, по которому можно скачать, распаковать, скомпилировать и создать пакет. Кроме того CookUtils необходимо создать папку для хранения загруженных исходников (//$SOURCES_REPOSITORY//, обычно ///home/slitaz/src//) и репозитория генерируемых пакетов (//$PACKAGES_REPOSITORY//, обычно ///home/slitaz/packages//); эти значения могут быть переопределены в файле ///etc/slitaz/cook.conf//. Существует более одного Wok в [[http://hg.slitaz.org|репозиториях Mercurial]]: * **wok-undigest**: //вклады, ожидающие тестирования и исправления ошибок перед помещением в нестабильный Wok// * **wok**: //пакеты для нестабильного релиза, Cooking// * **wok-stable**: //пакеты для стабильного релиза SliTaz// Изначально, любые вклады направляются в репозиторий //undigest//. Когда становится видно, что пакет прошел достаточное тестирование, не провалив автоматическую сборку, он может быть перемещен в Wok. =====Подготовка===== В [[http://www.slitaz.org/ru/devel/forge.php|уголке разработчика]] вы найдете бесценную начальную информацию. Вы должны прочитать и понять это, прежде чем продолжить. Перед началом работы с Wok вы должны уже установить [[http://hg.slitaz.org/cookutils/raw-file/tip/doc/cookutils.en.html|CookUtils]] и основные инструменты разработки (Binutils, компилятор, библиотеки разработчика, make). Для этого достаточно установить мета-пакет //slitaz-toolchain//: # tazpkg recharge # tazpkg get-install slitaz-toolchain Чтобы получить доступ к репозиториям SliTaz, установите пакет //mercurial//: # tazpkg get-install mercurial Более подробная информация по использованию Mercurial CVS доступна на его [[http://mercurial.selenic.com/|сайте]] и в "[[http://hgbook.red-bean.com/|Hg Book]]". ===Клонирование Wok=== Если вы хотите создавать пакеты для включения в репозитарии SliTaz, сначала необходимо получить текущий Wok с помощью Mercurial. Это называется //клонировать// Wok — процедура, которая загрузит весь Wok со всей своей историей в рабочую папку. **Если вы хотите использовать CookUtils только для сборки пакетов для личного пользования, в этом нет необходимости.** Вместо этого смотри ниже главу [[#Создание персонального Wok|Персональный Wok]]. Обычное расположение клона Wok — это ///home/slitaz/wok//: # cook setup --wok Эта загрузка может занять некоторое время; по окончании у вас будет полная структура рабочих каталогов [[http://hg.slitaz.org/wok/|Cooking wok]]. Wok является одним из многих проектов, размещенных в [[http://hg.slitaz.org|репозиториях Mercurial]]. Отдельные пакеты сгруппированы в большие проекты (Wok, Wok-Stable и Wok-Undigest); каждый пакет не имеет своего ​​собственного суб-проекта, а лишь подкаталог; Mercurial не может (пока) клонировать отдельные части проекта, таким образом, вы не можете клонировать только индивидуальный пакет. ===Создание персонального Wok=== Если ваши пакеты предназначены только для персонального использования и вы не планируете включать их в репозитории SliTaz, можно создать wok с нуля. # cook setup =====Компиляция и сборка пакетов===== Для того, чтобы собрать ваш первый пакет, CookUtils должен знать, где располагается ваш рабочий каталог. По умолчанию путь к нему ///home/slitaz/wok//, но вы можете его изменить или переименовать wok, который вы хотите скачать. Вкратце, процесс создания пакета SliTaz из исходников заключается в следующем: [[http://www.tuxfiles.org/linuxhelp/softinstall.html#s2|настроить]], [[http://www.tuxfiles.org/linuxhelp/softinstall.html#s3|скомпилировать]] и [[http://linux.die.net/man/1/strip|очистить]]. Мы не используем последний шаг «//make install//»; созданные файлы не устанавливаются в систему, они остаются в выходной папке ($DESTDIR), готовые к упаковке. Желательно, чтобы создавая ваш первый пакет, вы [[http://doc.slitaz.org/en:cookbook:devcorner#kiss-comply-to-standards|не усложняли]] его и создавали пакет без изменения его рецепта или поиска зависимостей. M4 является идеальным кандидатом для наших целей: # cook m4 После того, как CookUtils соберет M4, готовый ​​пакет будет помещен в папку, указанную в файле конфигурации (по умолчанию ///home/slitaz///packages). Если все прошло хорошо, вы можете установить пакет на хост-систему или использовать его для создания дистрибутива LiveCD с помощью TazLiTo! Если вы знакомы с [[ru:cookbook:receipt|рецептами]] и процессом компиляции, вы можете использовать следующую команду, чтобы интерактивно создать рецепт нового пакета: # cook new имя_пакета --interactive Обязательно прочитайте документацию по возможностям, предоставляемым [[ru:cookbook:receipt|рецептами]] и [[ru:guides:tazwoktips|советы TazWok]], чтобы избежать разочарований! ===Использование списка=== CookUtils может скомпилировать несколько пакетов с помощью одной команды. Это достигается с помощью //списка приготовления//, текстового файла по одному пакету на строке. CookUtils может принять список приготовления с командой list; например, для приготовления списка //mypkgs//: # cook list mypkgs.cooklist =====Параметры компиляции пакета===== Хотя вы можете использовать любые нужные параметры, необходимо соблюдать [[http://ru.wikipedia.org/wiki/FHS|«Стандарт иерархии файловой системы»]], следовать документации в ///usr/share/doc// и стандартам FreeDesktop (.desktop). ===Специфичные параметры=== Параметры, специфичные для каждого пакета, вы должны определить самостоятельно; например, можно отключить поддержку XML, чтобы уменьшить размер бинарников PHP и избавиться от libxml2, но в случае с PHP, это того не стоит, т.к. будет потеряна функциональность. Если у вас есть сомнения, посмотрите на рецепты и параметры компилятора в //compile_rules//. ===Оптимизация=== Официальные пакеты SliTaz оптимизируются для **i486**. Настроить аргументы оптимизации можно в файле **/etc/slitaz/cook.conf**, находятся они в переменной $CONFIGURE_ARGS. Если вы хотите собрать пакет с другими аргументами, вы можете изменить файл конфигурации CookUtils: CONFIGURE_ARGS="--build=i486-pc-linux-gnu --host=i486-pc-linux-gnu" ====Файлы для включения/исключения==== Как правило, базовые пакеты не содержат ни файлов //man//, //info// и //doc//, ни статических библиотек; для них следует создавать дополнительные пакеты с именами пакет-doc или пакет-dev. Обратите внимание, что SliTaz не намерен использовать команды man или info, поэтому и нет руководств или информационных файлов GNU. Создание пакетов, содержащих документацию действительно необязательно. В отличие от этого, больше ценится написание документации в Handbook, т.к. он широко доступен и легко может быть обновлен и улучшен. С точки зрения конфигурации, цель состоит в том, чтобы предложить основные файлы конфигурации для непосредственного запуска пакета. В особых случаях, как например, с веб-сервером //LightTPD//, SliTaz поставляет файлы конфигурации и запуска скриптов в ///etc/init.d// (описано в Handbook). Для нового пакета, вы свободны в выборе конфигурации по умолчанию в зависимости от того, что вы считаете лучшим для конечного пользователя. В папке ///usr/share/examples// имеются примеры конфигураций и другая полезная информация. =====Категории пакетов===== Категории пакетов используются только в информационных целях и не являются неизменными. Идея состоит в том, чтобы классифицировать пакеты, так что веб-страница, которая восстанавливает данные в рецепте пакета, может быть создана каждую ночь. Короче говоря, помещайте пакеты разработчиков в категорию «devel», Xorg — в «x-window», и различные новые пакеты в «extra». =====Структура пакета Wok===== Структура пакетов в Wok всегда должна соблюдаться для того, чтобы CookUtils смог найти нужные файлы и папки. Возможное содержимое пакета (обратите внимание на папку taz/, создающуюся во время приготовления): * **stuff/**: Материалы, используемые для настройки, компиляции и создания пакетов (патч(и), Makefile, псевдо-ФС и т.д.); * **receipt**: Вездесущий [[ru:cookbook:receipt|рецепт]]; * //**description.txt**: (может отсутствовать) Описание пакета включается в окончательный пакет, оно копируется в его корень. После установки TazPkg определяет этот файл как описание и может отобразить его с помощью //tazpkg desc имя_пакета//.// * //**taz/**: Дерево каталога, содержащее создаваемый пакет tazpkg; сжатый пакет хранится в каталоге, указанном в переменной $PACKAGES_REPOSITORY в файле конфигурации CookUtils.// Cookutils автоматически вызывает TazPkg для упаковки папки //taz//. Он также перенаправляет любые указания по упаковке, изложенные в рецепте. =====Структура tazpkg===== The SliTaz packages are cpio archives containing files and a file-system compressed with gzip: * **fs/**: //Псевдо-файловая-система, содержащая все файлы, которые будут установлены.// * **receipt**: //[[ru:cookbook:receipt|рецепт]].// * **files.list**: //Список файлов, имеющихся в пакете.// * //**description.txt**: Описание пакета (необязательное).//