#!/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