From: Kolotov Alexandr <koal DOG kirov.lug.ru>
Newsgroups: http://kirov.lug.ru
Date: Sun, 29 JuL 2005 17:02:14 +0000 (UTC)
Subject: Сборка программ для ALTLinux Master с использованием hasher
Введение
Установка hasher
Сборка программ в 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 architecture
Дело в том, что на платформах i686 (athlon, Kx, pentium4) сборка
автоматически происходит для нее. Вот что сказал Алексей Фролов
в community@altlinux.ru:
Платформа определяется по uname(2), после чего, если machine
получается i686, rpm лезет грязными руками в /proc/cpuinfo и
совершенно диким способом определяет какой это i686 - athlon, Kx,
pentium4...
У вас есть /proc/cpiunfo в hasher во время установки сборочных
зависимостей? Мне его туда запихать не удалось... i586 и i686
работают.
Тогда возможный путь решения проблемы находится в man hsh в виде опции
--target. То есть сборку можно осуществлять следующим образом:
Но приведенная выше ошибка выдавалась все равно. Оказалось,
что когда-то давно пакет 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@kirov.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: