Hasher/parallel
Для применения нескольких экземпляров hasher одновременно следует создать дополнительные пары псевдопользователей при помощи hasher-useradd с --number=1 и далее, а также дополнительные префиксы (например, $TMP/hasherN И перелогиниться тем пользователем, от которого будет запущена сборка, для подхватывания новых групп (см. `id`); обратите внимание, что при отсутствии явного указания hsh и компания пытаются определить N по правам на содержимое префиксного каталога[1]).
При желании автоматизировать параллельную сборку можно воспользоваться parallel; например, mike@ делал так (важно применять --without-stuff для избежания воздействия сборок друг на друга -- как изменением сборочного окружения, так и гонками):
~/bin/rebuild-hsh-quiet:
#!/bin/sh -e
[ $# -ge 1 ] || exit 1
num=
case "$1" in
-[1-9]) num="${1#-}"; shift;;
esac
mkdir -p ~/logs-parallel/{DONE,FAILED}
for i in "$@"; do
f="`basename "$i"`"
l=~/logs-parallel/"$f"
o=~/hasher/repo/SRPMS.hasher/"$f"
# FIXME: looks like ENOFILE provoking bug somewhere
while :; do
LANG=C hsh ${num:+--number=$num} --without-stuff \
"$TMP/hasher$num" "$i" \
>"$l" 2>&1 \
&& d=DONE || d=FAILED
if tail "$l" | grep -qs "^E: I wasn't able to locate file"; then
echo -n "rebuilding $i ... "
chmod +x "$l"
else
echo "built $i"
chmod -x "$l"
break
fi
done
mv "$l" ~/logs-parallel/"$d"/
done
~/bin/nightly-rehash-parallel:
#!/bin/sh
rm -rf ~/logs-parallel/{DONE,FAILED}
cd ~/repo/SRPMS.hasher &&
ls -rt *.src.rpm |
time parallel --jobs 4 --load 3 --delay 5 --eta 'rebuild-hsh-quiet -{%} {}'
- ↑ если наткнётесь на hsh: Failed to deduce hasher config number from directory ownership. -- это давний раздражающий баг hasher, который всем лень исправлять; не должен бы проявляться при прямом задании --number, однако же проявляется. Лечение -- сносом префикса перед запуском hsh (hsh-rmchroot и затем rm -rf)