Инструмент для сборки src.rpm в «чистом» окружении, установленном из заданных в sources.list репозиториев пакетов (базовая сборочная система + развёрнутые BuildRequires собираемого пакета).
Описан в статье на FreeSource wiki; см. тж. hasher(3), hsh(1) и документацию пакета.
(которое для 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@
> > Если в 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
ldv@