Памятка по управлению пакетами в Debian и Ubuntu

15 августа 2012

Помните, как некоторое время назад у меня не срослось с установкой FreeBSD на Asus Eee PC 1215P и я был вынужден поставить Xubuntu? Тот случай неиллюзорно намекнул мне, что поддержка железа операционной системой имеет большее значение, нежели я полагал. Притом не только на десктопе — на серверах также требуется поддержка сетевых карт, RAID контроллеров и тп. А теперь я понял еще кое-что. Система управления пакетами во FreeBSD очень далека от совершенства. Это вынужден признать даже такой фанат Фряшки, как я.

Вот некоторые из проблем, с которыми сталкивается пользователь FreeBSD:

  • Необходимо следить за /usr/ports/UPDATING и периодически выполнять описанные там действия;
  • Софт во FreeBSD зачастую обновляется не так быстро, как в Linux;
  • Не всякий софт во FreeBSD доступен в виде бинарного пакета, вспомним хотя бы OpenOffice;
  • А некоторого софта вообще нет (из недавнего припоминаю wxFormBuilder);
  • Иногда удивляют опции, с которыми были собраны бинарные пакеты (так бинарный пакет Perl собран без поддержки нитей);
  • Заморочки с лицензиями, например, при установке шрифтов или софта, написанного на Java;
  • Удаление пакетов, ставших ненужными, автоматизировано лишь частично (в утилите pkg_cleanup);

А вот пользователи Debian и основанных на нем дистрибутивах с этими проблемами не сталкиваются. Все управление пакетами в Debian происходит с помощью следующих простых команд.

Обновление базы доступных пакетов:

sudo apt-get update

Пакеты можно искать через веб-интерфейс или с помощь команды:

apt-cache search mysql | less

Просмотр дополнительной информации о пакете:

apt-cache show mysql-server

Получения списка доступных версий пакета:

apt-cache madison postgresql

Установка пакета:

sudo apt-get install имя_пакета

… или, в случае всяких там Dropbox, Skype и тп:

sudo dpkg -i dropbox_1.4.0_i386.deb

Переустановка пакета:

sudo apt-get install --reinstall имя_пакета

Даунгрейд или установка определенной версии:

sudo apt-get install имя_пакета=версия

Если не переустанавливается, можно попробовать так (осторожно, временно ломаются зависимости):

sudo dpkg --purge --force-depends имя_пакета
sudo apt-get install имя_пакета

Обновление всех пакетов (с подробностями):

sudo apt-get -V upgrade

Запретить/разрешить обновление конкретного пакета:

sudo apt-mark hold имя_пакета
sudo apt-mark unhold имя_пакета

Посмотреть список пакетов на холде:

sudo dpkg --get-selections | grep hold

Проверка контрольных сумм установленных пакетов:

sudo dpkg --verify

Список установленных пакетов и поиск по нему:

dpkg -l | grep firefox

Удаление пакета:

sudo apt-get remove firefox

Удаление вместе с файлами конфигурации:

sudo apt-get purge firefox

Удаление пакетов, которые были установлены в качестве зависимостей и более не требуются:

sudo apt-get autoremove # --purge для удаления конфигов

Чистка кэша deb-пакетов (каталог /var/cache/apt/archives/):

sudo apt-get clean

Просмотр логов — что и когда ставилось:

/var/log/dpkg.*

Иногда нужно определить, к какому пакету относится файл. Данную задачу можно решить так:

dpkg -S /usr/bin/pstree

А еще можно получить список всех файлов, содержащихся в пакете:

dpkg-query -L package_name

В общем, все легко и просто, если не считать пары моментов. Во-первых, иногда требуется установить какой-нибудь экспериментальный пакет (из ветки sid). Для этого нужно открыть файл /etc/apt/sources.list и дописать в него строчку:

deb http://ftp.ru.debian.org/debian sid main

… после чего говорим «sudo apt-get update», ставим нужный пакет, удаляем строчку из sources.list и вновь говорим «sudo apt-get update».

Во-вторых, некоторые пакеты тянут за собой слишком много лишнего софта. Например, mail-notifications тянет за собой postfix и требует его настроить. Для решения это проблемы следует прописать в /etc/apt/apt.conf следующее:

APT::Install-Recommends "0";

После чего все должно пройти как по маслу:

sudo apt-get update
sudo apt-get install mail-notification

Альтернативное решение, не требующее правки apt.conf:

sudo apt-get --no-install-recommends install mail-notification

Бывает еще так, что нужно создать резервную копию уже установленного пакета. Например, если он по каким-то причинам был удален из репозитория. Такое иногда бывает в случае со внутренними репозиториями компании. Решается эта проблема так:

sudo apt-get install dpkg-repack
sudo dpkg-repack имя_пакета

Из приятных фишек Debian/Ubuntu мне особенно хотелось бы отметить умение выводить суммарный размер пакетов при их установке/удалении, а также способность делать так:

$ dia
Приложение 'dia' может быть найдено в следующих пакетах:
 * dia-gnome
 * dia
Попробуйте: sudo apt-get install <выбранный пакет>

Чтобы такая же фишка появилась в zsh, нужно прописать в ~/.zshrc:

command_not_found_handler() {
  /usr/lib/command-not-found $1
}

Также вас могут заинтересовать следующие ссылки:

Следует отметить, что активно пользоваться Linux я начал недавно (после многолетнего перерыва), так что если вы видите в заметке какой-нибудь косяк, не постесняйтесь сообщить о нем в комментариях. А ежели косяков не видно, тогда просто поведайте мне, пользуетесь ли вы Linux, если да, то каким, похож ли его менеджер пакетов на APT, и довольны ли вы им.

Метки: .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.