Отправляет email-рассылки с помощью сервиса Sendsay

KirovLUG: пользователи Linux в Вятке

Сборка программ для ALTLinux Master с использованием hasher

Сборка программ для ALTLinux Master с использованием hasher

Введение

Часто во время сборки пакетов по зависимостям предлагается
установить очень много <<лишнего>> ПО. Это не всегда бывает
удобно: не хочется <<мусорить>> в уже рабочей системе
или вообще нежелательно в ней иметь некоторые средства
(например, средства разработки на сервере), или часто
банальной причиной является нежелание где-то искать это ПО -
этот процесс утомляет, особенно если репозитарий пакетов
для дистрибутива представлен в виде нескольких дисков, то все
сводится к <<жонглированию>> дисками...

Поэтому в дистрибутиве ALTLinux Master заботливой рукой
мантейнера были оставлены пакеты имеющие отношение
к технологии hasher. Эта технология позволяет собирать пакеты
внутри <<чистого>> окружения (chroot), которое создается
при помощи пакетов входящих в состав репозитариев описанных
на пользовательской машине. Т.е. имитируется процесс установки
на <<чистую>> систему пакетов, необходимых для сборки данного,
из репозитариев, а уже в данном окружении и собирается пакет.
В реальную систему пакеты не ставятся. Таким образом, на входе
hasher получает src.rpm пакет, а на выходе выдает
уже собранные (только из данного src.rpm) пакеты, которые
мы уже можем использовать в наших репозитариях для установки
на рабочие системы.

За технологию hasher отвечают два пакета: hasher
и hasher-priv, для работы последнего также нужен пакет
sisyphus_check.
Внутри пакета hasher содержится краткая, но емкая
документация: README, QUICKSTART и FAQ файлы, а также
man-страницы - правда они на английском языке, хотя
разработчики программы вполне русскоговорящие. Этой
документации, в принципе, хватает чтобы начать работать
c hasher, а в FAQ рассмотрены некоторые проблемы, которые
могут возникать в работе. Но рассмотрим дополнительно
некоторые аспекты работы с hasher.

Установка hasher

На данном этапе все просто. От пользователя root делаем:

# apt-get install hasher

Затем, необходимо подготовить hasher - сказать какой
пользователь будет имеет право пользоваться услугами hasher:

# hasher-useradd koal

Теперь, если данным пользователь уже был произведен вход
в систему, то нужно произвести <<релогин>> (причем полный,
запуск нового терминального сеанса, например, в konsole -
не приведет к нужному эффекту).

Сборка программ в hasher

Сейчас, работа должна происходить от обычного пользователя (но
добавленного с помощью hasher-useradd). Сначала необходимо
создать каталог, в котором будет строиться сборочная среда:

$ mkdir HASHER

Следует также обратить внимание, что hasher работает только
с локальными репозитариями, то есть описанных (в
/etc/apt/sources.list) с помощью file:

После этого можно приступать к сборке:

$ hsh HASHER freetype-2.1.9-alt2.src.rpm

здесь
* HASHER - каталог-основа для сборочной среды
* freetype-2.1.9-alt2.src.rpm - пакет, который необходимо
собрать

При удачной сборке полученные пакеты будут лежать
в HASHER/repo/<платформа>/RPMS.hasher/. А если произошла
ошибка, то информация о ней будет выведена на экран. Например,
это информация о том, что какие-то пакеты, необходимые
для сборки данного, не были обнаружены в доступных
репозитариях.

Кстати, указанный выше репозитарий
(HASHER/repo/<платформа>/RPMS.hasher/) можно использовать
для установки, сразу после описания
его в /etc/apt/sources.list.

Проблемы

Разные архитектуры

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

package freetype2-devel-2.1.9-alt2 is for a different architec
ture

Дело в том, что на платформах i686 (athlon, Kx, pentium4)
сборка автоматически происходит для нее. Вот что сказал
Алексей Фролов в communi***@a*****.ru:

Платформа определяется по uname(2), после чего, если machine
получается i686, rpm лезет грязными руками в /proc/cpuinfo и
совершенно диким способом определяет какой это i686 - athlon,
Kx,
pentium4...
У вас есть /proc/cpiunfo в hasher во время установки сборочных
зависимостей? Мне его туда запихать не удалось... i586 и i68
6
работают.

Тогда возможный путь решения проблемы находится в man hsh
в виде опции --target. То есть сборку можно осуществлять
следующим образом:

$ hsh --target=i586 HASHER freetype-2.1.9-alt2.src.rpm

Но приведенная выше ошибка выдавалась все равно. Оказалось,
что когда-то давно пакет freetype2 версии 2.1.9 был уже собран
под платформу athlon и положен в репозитарий для данной
платформы. И hasher пытался использовать пакеты именно этой
сборки. Поэтому я удалил из athlon-репозитария все пакеты
касающиеся freetype-2.1.9: freetype2, freetype2-demos,
freetype2-devel. После этого сборка заработала.

Самосборные пакеты

Следующая проблема может возникнуть при самосборных src.rpm:
hasher будет ругаться на неверный PACKAGER у собираемого
пакета:

some-packet.src.rpm: wrong PACKAGER: Kolotov Alexandr <koal@ki
rov.lug.ru>

Тут все дело в том, что hasher предназначается
для тестирования сборки пакетов перед отправкой их в Sisyphus,
поэтому помимо самой сборки происходит проверка
на правильность заполнения служебной информации об rpm-пакете.
В случае с Sisyphus, пакеты в нем могут размещать только члены
ALT Linux Team, соответственно в поле PACKAGER должен быть
указан один их них. Это проверяется утилитой sisyphus_check
по наличию altlinux.com|net|org|ru после "@". man hsh говорит,
что данную проверку можно отключить, указав опцию
--no-sisyphus-check[=LIST], где LIST - список пропускаемых
тестов. О тестах, которые может пропустить sisyphus_cheсk,
логичнее спросить у него самого:

$ sisyphus_cheсk --help

Итак, пробуем отключить тест на PACKAGER, а за одним и GPG:

$ sh --target=i586 --no-sisyphus-check=packager,gpg HASHER
some-packet.src.rpm

Теперь работает...
Спасибо за помощь в <<разборках>> с hasher Алексею Фролову
aka raorn.

Ответить   Wed, 18 May 2005 17:14:57 +0400 (#369681)