Ключевые слова:dpkg, packet, debian, linux, (найти похожие документы)
From: Тарасов Антон aka Ant0 <mailbox@ant0.ru.>
Date: Mon, 20 Oct 2006 14:31:37 +0000 (UTC)
Subject: Маленькие хитрости dpkg
Оригинал: http://ant0.ru/dpkg.html
Версия 1.0 от 2 Июня 2006
Составлено: Anton Tarasov aka Ant0 (mailbox@ant0.ru)
Для меня было удивлением узнать, что многие Debian-овцы не знают
большинства прелестей dpkg (менеджер пакетов Debian).
В этой статье попробую раскрыть некоторые приятные возможности,
которыми иногда пользуюсь.
Обновление системы из папки с новыми .deb пакетами.
У меня дома выход в Сеть очень дорогой (GPRS), а иметь свежую систему
хочеться. Для этого я регулярно приношу с работы домой кеш новых
пакетов на DVD. Далее сливаю все это в одну папочку и даю комманду:
dpkg -i -R -G -E --abort-after=10000 /путь/к/пакетам/
, здесь:
* -i - установить пакет;
* -R - делать это рекурсивно, начиная с указанного пути;
* -G - не устанавливать более старую версию пакета, чем стоит в
системе;
* -E - не устанавливать пакет той же версии, что и в системе;
* --abort-after=10000 - прервать выполнение комманды после 10000
ошибок.
Часто получаеться что в кеше существует несколько версий одного и того
же пакета. И если все они новее, чем в системе, то все они будут
установлены в порядке возрастания. Но иногда случаеться что этим
пакетам нужны разные версии других пакетов. Или устанавливливаються
конфликтующие пакеты. Все это и порождает ошибки, а abort-after по
дефолту равно 50 и этого не всегда достаточно.
После выполнения данной комманды иногда приходиться запустить еще
несколько раз комманду:
dpkg --configure -a --abort-after=10000
, здесь:
* --configure - сконфигурировать распакованный пакет;
* -a - сделать это для всех распакованных, но еще не сконфигуренных
пакетов;
* --abort-after=10000 - прервать выполнение комманды после 10000
ошибок.
Если ошибки остаються, то приходиться уже ручками исправлять чего не
нравится dpkg (удалить конфликтующий пакет или установить конкретную
версию нужного пакета).
Поиск пакета, которому принадлежит конкретный файл.
Иногда не понятно какому пакету принадлежит данный файл в системе.
Будь то исполняемый файл, библиотека и тп.
Для этого существует комманда dpkg -S чего_ищем, но здесь есть
маленькая хитрость:
Если указать просто имя програмки (к примеру ssh), то выдасться много
ненужного мусора. Чтобы этого не происходило, нужно указывать полный
путь к данной программе:
$ which ssh
/usr/bin/ssh
$dpkg -S /usr/bin/ssh
openssh-client: /usr/bin/ssh
или проще:
$ dpkg -S `which ssh`
openssh-client: /usr/bin/ssh
Здесь видно что программа ssh входит в пакет openssh-client.
Удаление группы пакетов по признаку в названии.
Иногда хочеться удалить группу пакетов содержащих что-то общее в
названии (к примеру kde или x-server).
Для этого поможет комманда dpkg -l 'чего_ищем' - показывает все пакеты
удовлетворяющие запросу.
К примеру: удалить все что содержит kde:
dpkg -P `dpkg -l '*kde*' | awk '{ print $2 }' | sed '1,6d'`
, здесь конвеер в подоболочке:
* dpkg -P пакет(ы) - удалить пакет(ы) вместе с конфигурационными
файлами
* dpkg -l '*kde*' - показать все пакеты содержащие слово kde в любой
части слова
* awk '{ print $2 }' - печатать только второй столбик (содержащий
имена пакетов)
* sed '1,6d' - удалить первые 6 строк (мусор)
У данного конвеера есть маленький недочет: dpkg пытаеться удалить даже
не установленные пакеты в системе. Скриптик работающий более правильно
пусть будет домашним заданием! ;-)
Прочие вкусности.
* dpkg -P имя_пакета - удалить пакет вместе с конфигурационными файлами;
* dpkg -s имя_пакета - показать подробную информацию о пакете;
* dpkg -L имя_пакета - показать список файлов содержащихся в пакете.