Разные, на мой взгляд, интересные замечания, связанные с компьютерами в частности и техникой вообще.

вторник, 17 ноября 2009 г.

Запись устанавливаемых зависимостей для пакета в Debian.

Часто приходится ставить софт "на посмотреть". Т.е. поставил, один-два раза запустил и удалил. Вроде бы ничего страшного - apt-get наш спаситель, но нередко бывает, что пакет при установке притягивает за собой толпы библиотек по зависимостям, и при удалении этого пакета все библиотеки остаются в системе. Часть из них, конечно, можно вычистить с помощью apt-get autoremove, но большая часть всё-таки остаётся. Я обычно в таких случаях записывал себе куда-нибудь список пакетов, устанавливаемых с нужным мне софтом и потом сносил его руками. Вот, решил этот процесс немного автоматизировать скриптом. Ничего особенного, просто небольшая экономия времени.

#!/bin/bash
#

INST_BASE=/var/cache/apt/Inst
INST_PROG=/usr/bin/apt-get

# Функция вывода ошибки в случае использования неправильных аргументов
f_argerror() {
    echo "depends_store.sh: Пропущен операнд."
    echo "Попробуйте \"depends_store.sh -h\" для получения более подробного описания."
}

# Функция записи данныхх о зависимостях с проверкой на наличие этих данных.
# Если данные имеются, вызывается функция их вывода.
f_install() {
  if [ -e ${INST_BASE}/${OPTARG} ]
  then
    echo "Данные о зависимостях для данного пакета уже присутсвуют."
    f_show
    exit 0
  fi
  ${INST_PROG} -s install ${OPTARG} | grep Inst | cut -d ' ' -f 2 > ${INST_BASE}/${OPTARG}
  echo `cat ${INST_BASE}/${OPTARG}`
}

# Функция удаления данных о зависимостях.
f_remove() {
  rm ${INST_BASE}/${OPTARG}
}

# Функция вывода данных о зависимостях.
f_show() {
  echo `cat ${INST_BASE}/${OPTARG}`
}

# Функция вывода списка пакетов, для которых есть записи о зависимостях.
f_list() {
  echo `ls ${INST_BASE}`
}

# Функция вывода справки.
f_help() {
echo "Использование: depends_store.sh КЛЮЧ [ПАКЕТ]"
echo "  -i ПАКЕТ      записать данные о зависимостях для пакета"
echo "  -r ПАКЕТ      удалить данные о зависимостях для пакета"
echo "  -s ПАКЕТ      показать данные о зависимостях для пакета"
echo "  -l              вывести список пакетов, для которых записаны данные о зависимостях"
echo "  -h              показать эту справку и выйти"
}

# Проверка на наличие аргументов коммандной строки.
if [ $# -eq "0" ]
then
  f_argerror
fi

# Проверка на наличие директории для хранения данных о пакетах и создание таковой в случае отсутсвия.
if [ ! -e ${INST_BASE} ]
then
  mkdir -p ${INST_BASE}
fi

# Перебор параметров командной строки.
getopts ":i:r:s:lh" Option
case $Option in
  i)
    f_install
  ;;
  r)
    f_remove
  ;;
  s)
    f_show
  ;;
  l)
    f_list
  ;;
  h)
    f_help
  ;;
  *)
    f_argerror
  ;;
esac

exit 0


Скрипт до безобразия простой, так что всё должно быть понятно из комментариев. :) Получился такой себе небольшой костыль над apt-get.
Работать с ним просто.
Нашли нужный пакетик, сказали на него ./depends_store.sh -i и всё запомнилось в базе. Поработали с пакетом, сделали apt-get purge `./depends_store.sh -s имя_пакета` && ./depends_store.sh -r имя_пакета и забыли о нём.

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

Отправить комментарий