Эта страница была перенесена на altlinux.org. Текст на freesource.info заморожен.
hasher
Инструмент для сборки src.rpm в «чистом» окружении, установленном из заданных в sources.list репозиториев пакетов (базовая сборочная система + развёрнутые BuildRequires собираемого пакета).
Описан в статье на FreeSource wiki; см. тж. hasher(3), hsh(1) и документацию пакета.
Монтирование /proc и др.
(которое для incoming регулируется при помощи BuildRequires: /proc)
> > > Из-за чего такое может быть? Команда: "hsh ~/Work/Repo <пакет>", до> > > этого собирал в hasher – проблем не было.> > добавьте --mountpoints=/proc> А почему не берётся информация из .spec?
это уже обсуждалось.
hasher не смотрит спек. его смотрит робот и пускает с этим параметром хашер.
у себя на рабочей машине вы выступаете в качестве робота :)
Что касатеся монтирования при сборке пакетов hasher'ом.
Согласно hsh(1), "--mountpoints=LIST Defines list of known mount points.
Every build dependence which belongs to this list will be mounted."
Другими словами, srpm-пакет с помощью сборочных зависимостей и зависимостей,
установленных в сборочную среду пакетов, говорит, что ему нужно монтировать,
а hsh --mountpoints=LIST определяет, что можно монтировать.
В результате будет смонтировано пересечение этих двух множеств.
Таким образом, если вы готовы для любой сборки разрешить монтировать любой
ресурс (из разрешённых системным администратором), то достаточно добавить
known_mountpoints=comma-separated-list-of-known-mount-points
в ~/.hasher/config
Заметьте, всё вышесказанное непосредственно следует из hsh(1)/hsh-rebuild(1)
и касается как самой утилиты hsh, так и утилиты hsh-rebuild.
У hsh-run/hsh-shell тоже есть ключ --mountpoints=LIST, но его семантика
отличается от одноимённого ключа hsh/hsh-rebuild, а именно LIST там определяет
список точек монтирования, которые должны быть смонтированы.
ldv@
> Как мне помнится, всегда указывать --mountpoints=/proc было > нежелательно, потому что это требует соотв. записи в> /etc/hasher-priv/fstab,> которой может и не быть.
С одной стороны, /etc/hasher-priv/fstab "может не быть" только если его удалил
администратор системы. С другой стороны, hasher-priv mount обучен
монтировать /dev/pts, /proc и /sys, так что гипотетическое отсутствие файла
/etc/hasher-priv/fstab (который нынче поставляется пустым) на монтирование
/proc не влияет.
Указывать hsh --mountpoints=/proc противопоказано только если /proc нет в списке
allowed_mountpoints, в противном случае это зависит от политики
безопасности, а не от содержимого spec-файла.
Сборочные зависимости будут удовлетворены если и только если
!required || allowed&&known&&required.
Т.е. если у пакета нет сборочной зависимости (прямой или косвенной) на /proc,
то этот пакет будет отправлен на сборку без монтирования /proc вне зависимости
от присутствия /proc в allowed_mountpoints и hsh --mountpoints=;
а если у пакета есть сборочная зависимость на /proc, то этот пакет будет
отправлен на сборку со смонтированным /proc только если /proc присутствует
и в allowed_mountpoints, и в hsh --mountpoints= (последний определяет
переменную known_mountpoints, которую можно указать в ~/.hasher/config).
ldv@
BuildPreReq vs BuildRequires(pre)
Requires:
> > Если в req/prov скриптах использовать опцию --verbose, то можно> > узнать что-нибудь интересное.> > $ rpm -ql rpm-utils |file -NF$'\t' -f – |/usr/lib/rpm/shell.req.files |/usr/lib/rpm/shell.req -v 2>&1| head> > shell.req: /usr/bin/add_changelog: cat -> /bin/cat -> ... (via which)> > shell.req: /usr/bin/add_changelog: /bin/cat -> coreutils (via rpmdb)> > Ой хорошо, сегодня только грепал recoll — где ж он lyx зацепил.> Кстати, куда кто смотрит, что умудряется вытащить (правильную)> зависимость на отсутствующий в чруте пакет lyx-qt?
Если собирается хешером, то он смотрит в
$build/cache/contents/contents_index_bin.
Этот contents index как раз нужен, чтобы лучше искать зависимости вопреки
минимальной сборочной среде и в ряде случаев давать более точные
зависимости, напр. зависимость на mutt должна разрешиться в /usr/bin/mutt,
а не в mutt или mutt1.5, т.к. любой из них сгодится.
Кстати я внес много исправлений в find-package (это типа диспетчер, как искать
такого рода зависимости), теперь в ряде "сложных" случаев
результат будет более корректным. См. commit messages, там есть примеры
с /sbin/ifup, openssl-config, arpsend и vim.
> Если все нежелающие править эту багу у себя дадут мне NMU — я это сделаю.> Сейчас несколько человек заявили что пересоберут свои пакеты. Оставшиеся я> починю сам, если их пропустят.
Пусть лучше скрипты работают.
В терминологии /usr/share/doc/hasher-*/rebuild-prog.sh,
if egrep -qs '^Build(Requires|PreReq):.*(libpq4|postgresql8)[^-]*-devel' "$specfile"; then
sed -i -e '/^Build\(Requires\|PreReq\):/ s/libpq4[^-]*-devel/libpq-devel/g;s/postgresql8[^-]*-devel/postgresql-devel/g' "$specfile"
e='- Fixed postgresql build dependencies.
– Rebuilt due to libpq.so.4 -> libpq.so.5 soname change.'
else
e='- Rebuilt due to libpq.so.4 -> libpq.so.5 soname change.'
fi