rendered paste body#!/bin/sh
# SCRIPT: emerge-pf [-a|--all] [-m|--mirrors] [emerge options] [package|class]
# Выдаем на стандартный вывод URL'ы для скачки пакетов,
# а на стандартный вывод ошибок список соответсвующих файлов,
# необходимых для построения указанных пакетов (или класса).
# Опция [-a|--all] игнорирует уже скаченные файлы в distfiles.
# Опция {-m|--mirrors} включает вывод URL всех зеркал.
# После опций скрипта (если они исп.) доступны типичные опции emerge.
# В качестве пакета можно указать слово "bootstrap" тогда процесс
# будет выполнен для пакетов необходимых для bootstrap.sh (EXPERIMENTED).
#
# Идея Alex Zorg 2004; Mellon 2007
flg=""
flg2=""
if [ "$1" == "-a" ] || [ "$1" == "--all" ]; then
flg="ALL"
shift 1
fi
if [ "$1" == "-m" ] || [ "$1" == "--mirrors" ]; then
flg2="MIRRORS"
shift 1
fi
pkg="$*"
if [ "$pkg" == "bootstrap" ]
then
pkg="baselayout portage gettext binutils gcc glibc texinfo zlib ncurses"
fi
tmp1=`tempfile || echo /tmp/_emerge-tmp1_`
tmp2=`tempfile || echo /tmp/_emerge-tmp2_`
tmp3=`tempfile || echo /tmp/_emerge-tmp3_`
tmp4=`tempfile || echo /tmp/_emerge-tmp4_`
> $tmp2
> $tmp3
print_all() {
emerge -p -f $pkg >$tmp1
if [ -n "$flg2" ]; then
cat $tmp1 | grep '^http:\|^ftp:' | sed s/" "/"\n"/g > $tmp4
else
cat $tmp1 | grep '^http:\|^ftp:' | awk '{print $1}' > $tmp4
fi
for i in `cat $tmp4`
do
#file=`echo "$i" | sed -e's|.*/||'`
file=`basename "$i"`
echo "$file" >> $tmp2 # files collector
echo "$i" >> $tmp3 # full URLs collector
done
}
print_needed_only() {
FETCHCOMMAND="echo \${URI}" RESUMECOMMAND="echo \${URI}" emerge -f $pkg >$tmp1 2>/dev/null
for i in `cat $tmp1 | grep '^http:\|^ftp:'`
do
#file=`echo "$i" | sed -e's|.*/||'`
file=`basename "$i"`
echo "$file" >> $tmp2 # files collector
echo "$i" >> $tmp4 # full URLs collector
done
cat $tmp4 > $tmp3
if [ -z "$flg2" ]; then
for i in `cat $tmp2`
do
grep -m 1 $i $tmp4 > $tmp3 # removing unneeded mirrors
done
fi
}
if [ -n "$flg" ]; then
print_all
else
print_needed_only
fi
cat $tmp2 | sort -u >&2
cat $tmp3 | sort -u
rm -f $tmp1 $tmp2 $tmp3 $tmp4