## Cook и Cooker в SliTaz

Пакет CookUtils в SliTaz содержит утилиты, которые помогут вам собрать пакеты SliTaz. Они просты в использовании и изучении, быстрые и легковесные. Вы сможете создавать пакеты SliTaz при помощи всего нескольких команд. В состав CookUtils входят утилита cook («повар») и Cooker («плита»).

Cook компилирует исходный код и создает пакет, ведет журнал и проверяет качество рецепта и пакета. Cooker — это сборочный бот, обладающий большей автоматизацией, он может использоваться в качестве интерфейса для cook, поскольку он имеет CGI/веб-интерфейс, позволяющий просматривать журналы cook в приятном цветном виде. Cook и Cooker используют одни и те же файлы баз данных и wok, они оба используют списки заблокированных и испорченных пакетов и т.п.

Для получения технической информации (стиль кодирования и т.д.), обратитесь к README, находящемуся в исходниках, либо в папке /usr/share/doc/cookutils.

### Использование cook

Cook содержит небольшую встроенную справку по использованию, которую можно отобразить командой usage. Также он имеет несколько параметров для выполнения специальных задач над пакетами, как перед приготовлением, так и после него. Итак, чтобы получить справку по использованию:

    # cook usage

### Краткая инструкция

Первое, что вам нужно сделать, прежде чем начнете собирать пакеты — настроить окружение. Есть два рекомендованых способа работы: собирать непосредственно на хосте или собирать в изолированном chroot-окружении (для защиты хоста). Если вы хотите работать в изолированном окружении, вы можете установить и использовать Tazdev для создания окружения и переключения на него:

    # tazdev gen-chroot && tazdev chroot

По умолчанию Tazdev создает изолированное окружение в /home/slitaz/cooking/chroot, но вы можете указать другой путь в параметре:

    # tazdev gen-chroot /home/slitaz/4.0/chroot
    # tazdev chroot /home/slitaz/4.0/chroot

Расположение изолированного окружения не важно, ведь когда вы будете находиться в нём, вы будете использовать стандартные пути SliTaz, такие как /home/slitaz/wok для папки wok и /home/slitaz/log для всех журналов cook. Как обычно, вы можете вывести справку об использовании tazdev при помощи команды:

    # tazdev usage

При использовании изолированного окружения есть две специальные папки, смонтированные с параметром bind: src и packages. Исходники всех пакетов по умолчанию сохраняются в /home/slitaz/src; эта папка монтируется в chroot для того, чтобы утилиты могли ее использовать. Этот метод позволяет обмениваться исходниками между несколькими изолированными окружениями, например, одно стабильное, а другое нестабильное. Папка с готовыми пакетами по умолчанию находится в /home/slitaz/версия/packages, вне изолированного окружения; пакеты здесь находятся в безопасности в случае удаления chroot по ошибке.

### Приступая к работе

Итак, вы решили, как вы хотите работать, теперь давайте настроим окружение cook. Cook использует конфигурационный файл cook.conf, если вы хотите использовать собственные пути для папок и файлов SliTaz, вам придется изменить его. Установка создаст некоторые папки и файлы для отслеживания работы и ошибок, все файлы являются простыми текстовыми файлами, которые можно открыть в любом текстовом редакторе. Чтобы подготовить окружение:

    # cook setup

Команда setup может иметь параметр --wok, который позволяет получить копию wok SliTaz при настройке окружения cook. Даже если вы еще не являетесь официальным разработчиком, вы можете получить копию wok и использовать существующие пакеты в качестве примера для создания собственных. Для настройки и клонирования wok по умолчанию (версии cooking) или версии undigest:

    # cook setup --wok
    # cook setup --undigest

### Проверка окружения

Cook понимает команду test, по которой он создаст пакет и приготовит его. Это позволяет определить, работает ли окружение и является примером пакета с рецептом. Созданный фиктивный пакет называется «cooktest», его можно удалить после тестирования. Для приготовления тестового пакета:

    # cook test

### Создание и приготовление

Если ваша среда настроена правильно, вы можете приступить к созданию и компиляции пакетов SliTaz из вашего wok. Чтобы создать новый пакет с пустым рецептом (вы также можете создавать рецепты в интерактивном режиме):

    # cook new имя-пакета
    # cook new имя-пакета --interactive

Вы только что создали новый пакет, теперь вам нужно отредактировать рецепт в вашем любимом текстовом редакторе. Когда рецепт будет готов, вы можете приготовить его:

    # cook имя-пакета

Если все прошло успешно, то вы найдете свой пакет в папке $SLITAZ/packages, а все созданные файлы — в $SLITAZ/wok/имя-пакета.

### Приготовление с установкой

Если вы хотите приготовить и установить пакет одной командой:

    # cook имя-пакета --install

### Получение исходников

Если вам нужно загрузить только исходники пакета, не создавая его, вы можете использовать опцию --getsrc как показано ниже:

    # cook имя-пакета --getsrc

### Очистка пакетов

После компиляции и упаковки в wok по-прежнему остаются файлы, которые занимают место на диске. Для очистки выбранного пакета:

    # cook имя-пакета --clean

Вы также можете очистить сразу целый wok. Если решите сохранить связанные с SliTaz файлы, вы можете удалить только исходники:

    # cook clean-wok
    # cook clean-src

### Поиск

Cook поддерживает простую функцию поиска пакета в wok. Поиск использует grep и поддерживает регулярные выражения:

    # cook search busybox

### База данных пакетов

Cook может создать список пакетов в wok, а также создать соответствующий список пакетов для TazPkg. Это позволяет легко создавать локальный репозиторий пакетов, а также используется для создания официального списка пакетов SliTaz, находящихся на зеркалах. Для просмотра текущего wok (вам не нужно быть суперпользователем):

    $ cook list-wok

При создании базы данных пакетов Cook проверит наличие редакций (flavors) в /home/slitaz/flavors и при их наличии укомплектует все редакции новейшими пакетами из списка доступных. Чтобы создать список пакетов и файлы редакций Live:

    # cook pkgdb

### Cooker

Cooker является сборочным ботом, он предназначен в первую очередь для проверки изменений в wok, создания упорядоченного списка приготовления, и приготовления изменившихся пакетов. Он также может быть использован в качестве интерфейса для cook, так как они оба используют одинаковые файлы. Cooker может быть также использован для приготовления большого списка пакетов за один прием, такого, как, например, все пакеты редакции (flavor). Cooker имеет хороший CGI/веб-интерфейс, который работает по умолчанию на любой системе SliTaz, поскольку она обеспечивает поддержку CGI с помощью веб-сервера HTTPD BusyBox.

Cooker содержит небольшую встроенную справку об использовании и о коротких командах. Например, чтобы отобразить информацию об использовании:

    # cooker usage
    # cooker -u

### Настройка Cooker

Так же как и Cook, Cooker нуждается в рабочей среде, прежде чем начать его использовать. Основное отличие от среды Cook в том, что Cooker требует два wok. Один чистый wok с Hg, в качестве справочного, а другой — ваш экспериментальный сборочный wok. В таком случае можно будет легко сравнить между собой оба wok и определить изменения. Если у вас уже есть окружение Cook, вам необходимо переместить ваш wok до настройки Cooker, или он будет жаловаться. Программа установки также установит набор пакетов для разработки, которые могут быть настроены в конфигурационном файле cook.conf и переменной SETUP_PKGS. Для настройки окружения Cooker:

    # cooker setup

Если всё прошло хорошо, то теперь у вас есть 2 wok, установлены базовые пакеты разработки и созданы все необходимые файлы. Поведение по умолчанию заключается в проверке коммитов, вы можете запустить тест:

    # cooker

### Работа с Cooker

Опять же, теперь есть два способа работы: внести изменения в чистый wok Hg и запустить Cooker без аргументов, либо готовить пакеты вручную. Cooker позволяет приготовить одиночный пакет, или все пакеты определеной категории, или всю редакцию (flavor) целиком. Вы также можете попытаться приготовить все не приготовленные пакеты, но знайте, что Cooker не был рассчитан для обработки тысяч пакетов.

Чтобы приготовить одиночный пакет, то же самое, что дает команда «cook имя_пакета», но с несколькими журналами:

    # cooker pkg имя-пакета

Чтобы приготовить более одного пакета за раз, у вас есть различные решения. Вы можете использовать существующий список, такой как используемый для редакции Live, вы также можете использовать собственный список, перечислив имена пакетов по одному на строку. Наконец, вы можете приготовить все пакеты категории.

    # cooker flavor [имя]
    # cooker list [/путь/к/списку]
    # cooker cat [категория]

Cooker позволяет также повторно приготовить указанную ревизию Hg. Это будет полезно, если во время приготовления пакетов сборочный бот был прерван новым коммитом, вы всё равно имеете возможность готовить пакеты вручную:

    # cooker rev 9496

### Заблокированные пакеты

Cook и Cooker работают со списком заблокированных пакетов, которые не будут готовиться даже в случае получения коммита или, если они будут упомянуты в списке приготовления. Это полезное свойство сборочного бота Cooker. При блокировании и разблокировании пакетов, вы можете добавить свои примечания. Пример блокирования пакетов:

    # cook имя_пакета --block
    # cooker block имя_пакета
    # cooker -n "Примечание о блокировании имя_пакета"

Список заблокированных пакетов также отображается в веб-интерфейсе Cooker. Чтобы разблокировать пакет, используйте команду unblock или запустите Cook с опцией --unblock:

    # cooker unblock имя_пакета
    # cook имя_пакета --unblock

### CGI/веб-интерфейс Cooker

Чтобы просмотреть наглядные файлы журналов, проследить порядок работы, найти ошибки, вы можете использовать веб-интерфейс Cooker, который по умолчанию находится в папке /var/www/cooker. Если вы не используете изолированное окружение и веб-сервер Busybox HTTPD запущен, то веб-интерфейс будет работать без дополнительных настроек и будет доступен по адресу: http://localhost/cooker/cooker.cgi

Если вы используете изолированную среду, вы должны также установить Cookutils на вашу хост-машину и изменить путь в переменной SLITAZ. Обычно изолированная среда находится по пути:

    /home/slitaz/cooking/chroot

Измените /etc/slitaz/cook.conf следующим образом:

    SLITAZ="/home/slitaz/cooking/chroot/home/slitaz"

Примечание: не обязательно устанавливать Cookutils на вашу хост-машину, чтобы использовать веб-интерфейс. Если вы используете Lighttpd, вы можете также скопировать файлы cooker.cgi и style.css, например, в папку ~/Public и использовать собственный cook.conf. Преимущество установки Cookutils на хост-машину в получении регулярных обновлений через менеджер пакетов TazPkg. Скажем, вы клонировали или загрузили Cookutils:

    $ cp -a cookutils/web ~/Public/cgi-bin/cooker
    $ cp -f cookutils/cook.conf ~/Public/cgi-bin/cooker

Отредактируйте конфигурационный файл ~/Public/cgi-bin/cooker/cook.conf, указав в переменной SLITAZ нужный путь, и это всё!

### Заметки (Cooknotes)

Функция Cooknotes позволяет записывать небольшие личные заметки о сборке пакетов и полезна для совместной работы. Cooknotes была написана, чтобы сопровождающие сборочного бота Cooker в SliTaz могли делиться заметками между собой и с другими участниками. Cooker может блокировать сборку пакета или пакеты можно пересобрать вручную, например, неплохо обратите внимание, когда пакет был заблокирован, чтобы сопровождающий знал, почему администратор сделал это. Cooknotes отображаются в веб-интерфейсе и могут быть проверены в командной строке:

    # cooker note "Заблокирован имя_пакета из-за высокой нагрузки на процессор"
    # cooker notes

### Cooker в качестве сборочного бота

Cooker был задуман как сборочный бот для SliTaz, это означает, что он следит за обновлениями двух wok на Hg, находит различия и готовит все необходимые пакеты. Безопасный и прозрачный способ запуска Cooker в качестве сборочного бота с помощью cron подразумевает использование изолированной среды, но при необходимости он может работать и непосредственно на хосте.

Для автоматического запуска Cooker вы должны использовать cron из изолированной среды и добавить одну строку в корень crontabs в папке /var/spool/cron/crontabs. Скажем, вы хотите, чтобы Cooker запускался каждые два часа:

    * */2 * * * /usr/bin/cooker

### Запуск Cooker BB при загрузке системы

Окружение Cooker и задачи cron могут быть автоматически запущены при загрузке. Вы должны установить пакет cookutils-daemon на хост и использовать стандартную установку SliTaz, чтобы заставить его работать должным образом (приготовление идет в /home/slitaz/cooking). Запущенная служба при необходимости смонтирует любую виртуальную файловую систему, так же как и папки с исходниками и пакетами. Исходники в /home/slitaz/src связаны с изолированной средой, чтобы вы могли поделиться исходниками пакетов между несколькими версиями (стабильная, cooking, undigest). Установите пакет, если он еще не установлен:

    # tazpkg get-install cookutils-daemon

Для запуска службы вам необходимо иметь файл описания задачи cron в корне изолированной среды, эта служба работает так же, как и все другие в системы и может управляться командами:

    # /etc/init.d/cooker [start|stop|restart]