20091205

Установка gentoo без выхода в интернет. Получение списка файлов для загрузки.

Снова столкнулся с проблемой при установке Gentoo
Потребовалось установить систему на компьютере, выходящем в интернет с помощью wifi.
Всё бы ничего, но для начала работы требуются: wpa_supplicant, поддержка устройства в ядре и микрокод чипсета.
Для решения поставленой задачи надо скачать требуемые для установки файлы и кинуть их в папку /usr/portage/distfiles
Ручками вычислять нужные файлы - глупость
намного проще и эфективнее использовать для этого скрипы.
В результате был написан скрипт, позволяющий решить проблему одной простой строкой:
eka ~ # /root/getFetchList "iwl4965-ucode gentoo-sources wpa_supplicant" /tmp/links.txt
Needed distfiles list calculator  v1.05 (2009-12-04)
Eugeny Borisov, 2009
Based on http://gentoo.ru/node/14449 post

Get list of links for fetch portage files at another system
You need for: iwl4965-ucode gentoo-sources wpa_supplicant
Results was ben placed to: /tmp/links.txt
done

 Далее идет текст скрипта.


Разумеется, имеются узкие места
Если в папке distfiles имеется файл с нужным именем, то скрипт его пропускает и не выдает в список для скачивания. Проблема может возникнуть, если этот файл битый. Но на компьютере без доступа к интернету ему не откуда взяться, поэтому я не стал париться и добавлять проверку контрольных сумм.


#/bin/bash
# Get file list of portage to fetching at another system

# $1 - portages list
# $2 - destation file
DIST_DIR=/usr/portage/distfiles/

about () {
 echo "Needed distfiles list calculator  v1.05 (2009-12-04) "
 echo "Eugeny Borisov, 2009"
 echo "Based on http://gentoo.ru/node/14449 post"
 echo
        echo "Get list of links for fetch portage files at another system"
}

printListForFetch () {
  for i in `emerge -qpf $@ | sed '/^$/d;s/ .*$//' | sort -u` ; do {
 if [ $i == "!!!" ] || [ $i == "emerge:" ]; then 
  echo "Error while execute emerge"
  echo "Restarting emerge for view error.."
  emerge -qpf $@
  exit
 fi
 fn=`echo $i | sed "/^$/d;s/^.*:\/\/.*\///"`
 if ! [ -a "${DIST_DIR}${fn}" ] ; then
  echo $i
 fi
 
 }; done

}

getListForFetch () {
  echo "Results was ben placed to: $2"
  printListForFetch $1 > $2
}

usage () {
 echo "Usage: $0 PORTAGE_LIST [DESTATION_FILE]"
 echo " PORTAGE_LIST is one or more space separated portage name"
 echo " DESTATIO_FILE is filename for storying list of needed links"
 echo "Examples:
    $0 eix
 show files needed for eix
    $0 eix links.txt
 put list of files needed for eix to links.txt
    $0 \"eix vim\"
 show files needed for eix and vim
    $0 \"eix vim\" links.txt
 put list of files needed for eix and vim to links.txt"
}

about

if [ "$1" = "--help" ] ;  then
 usage
 exit
elif [ "$1" = "" ] ; then 
 echo "error 1"
 usage
 exit
else 
 echo "You need for: $1"
fi

if [ "$2" = "" ] ; then 
 printListForFetch $1
 exit
else 
 getListForFetch "$1" "$2"
fi

echo "done"

Комментариев нет: