Итак, sandman настроили, начинаем его использовать... Будем думать, что в каталоге ~/sandman у нас с-checkout-ены cvs модули release и packages (packages пока пустой): $ tree sandman sandman |--packages | `--CVS | |--Root | |--Repository | `--Entries `--release |--CVS | |--Root | |--Repository | `--Entries |--installer |--macros |--macros.generic |--modules |--modules.generic |--release `--release.generic Я буду рассказывать про метод "spec" (см. README)... $ cd sandman/packages (просто так, для удобства) $ rpm2cpio package-V-R.src.rpm| sandcl -d addsources package $ rpm2cpio package-V-R.src.rpm| cpio -i package.spec $ mv package.spec package Я рекомендую в самом начале файла со спеком добавить две строчки для редакторов типа vim или emacs (файл-то у нас получился без расширения): # vim: set ft=spec: -*- mode: rpm-spec; -*- # $Id$ Во второй строчке cvs сам проставит тэг с информацией о файле, дате последнего изменения, ревизии и коммитере (см. info cvs). $ cvs add package $ cvs commit -m "Added package" package Если всё в порядке, коммит пройдёт, если нет - sandman скажет в чём ошибка и предложит её исправить. Будем думать, что у нас всё в порядке ;-) Попробуем собрать наш пакет: $ sandcl -d build -pocket package_build package Тут package_build - имя "кармана", куда будет производиться сборка. В силу некоторых особенностей внутреннего устройства sandman'а - это наверно единственный способ собрать "текущую" версию пакета. Дело в том, что при изменении версии пакета (S:V-R) sandman проставляет тэг в cvs на предыдущую ревизию спека, а sandcl build будет собирать последнюю известную ему (по cvs тэгам) версию пакета. Всё это сделано по той причине, что спекфайл для одной версии пакета может изменяться несколько раз (например в процессе правки спека при исправлении ошибок сборки, например в новой версии потребовалось изменение сборочных зависимостей, а мантейнер это не сразу заметил). Но я отвлёкся. Итак, после выполнения команды build, сервер sandman создаст chroot, поставит туда, с отслеживанием всех зависимостей, basesystem (описаную в /etc/sandman/repos), потом buildsystem и наконец пакеты указанные в сборочных зависимостях (BuildPreReq и BuildRequires) в спекфайле. Если всё опять прошло нормально, в созданном chroot запустится rpm -ba... После сборки, все собраные бинарные и исходные пакеты будут положены в "карман", указаный в опции pocket. Достать из оттуда можно командой $ sandcl getpocket При этом файлы будут скопированы в текущий каталог. $ sandcl endpocket "закрывает карман", при этом пакеты в нём содержащися переносятся в "current" (см. README в %_docsir/sandman-server-*) а сам "карман" удаляется. "Карман" применяется при сборке текущей версии паекета, и при сборке нескольких зависимых друг от друга пакетов - при создании chroot'а sanman ищёт необходимые пакеты сначала в указаном "кармане" (если он указан в командной строке), потом в stable, указаном в repos. В этом месте рекомндуется отвлечься от HOWTO и прочитать man sandcl... Итак, при помощи команд getsources и addsources можно "достать" и "положить" исходные файлы и патчи из/в хранилище sandman'а. Например, если понадобилось изменить файл меню: $ sandcl -d getsources package package.menu $ $EDITOR package.menu $ sandcl -d addsources package package.menu Но что бы sandman приянл эти изменения, надо обязательно сделать коммит спекaайла в cvs, даже если он и не изменился. Честно говоря, я не нашёл у cvs опции --force, так что просто добавляю/удаляю пустую строку в конце файла ;-) $ cvs commit package Если всё в порядке, коммит пройдёт, если нет - sandman скажет в чём проблема. Да, один момент - команда addsources добавляет файлы только из текущего каталога. ... возможно to be continued ... -- Regards, Sir Raorn. ------------------- >ps: куплю билеты на матч ldv--rider, т.к. пока изложенные ими >позиции существенно противоречат друг другу ;[ Организуем на linuxfest. Билеты в танцевальный партер -- $50. -- aen in devel-kernel@