Управление пакетами в Debian

Базовая конфигурация

APT использует файл, который содержит список "источников" из которых могут быть получены пакеты. Это файл /etc/apt/sources.list. Записи в этом файл обычно следуют формату:

deb http://URL/debian distribution parameter1 parameter2 parameter3
deb-src http://URL/debian distribution parameter1 parameter2 parameter3

Конечно, указанные выше записи приведены только для примера и не должны использоваться. Первое слово каждой линии, deb или deb-src, показывают тип архива: является ли эта строка ссылкой на бинарные пакеты (deb), которые являются прекомпилированными пакетами, которые мы обычно используем, или это это ссылки на исходные коды оригинальных программ, плюс контрольные файлы Debian (.dsc) и diff.gz, содержащие изменения необходимы для "дебианизации" программы.

В Debian версии 6.0.5, установленного загрузкой файлов из интернета, sources.list имеет следующее содержание:

#deb cdrom:[Debian GNU/Linux 6.0.5 _Squeeze_ - Official amd64 NETINST Binary-1 20120512-20:40]/ squeeze main

deb http://mirror.yandex.ru/debian/ squeeze main
deb-src http://mirror.yandex.ru/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

#squeeze-updates, previously known as 'volatile'
deb http://mirror.yandex.ru/debian/ squeeze-updates main
deb-src http://mirror.yandex.ru/debian/ squeeze-updates main

Здесь представлены строки, необходимые для базовой установки Debian. Первый блок указывает на региональный архив основных файлов, второй - на обновления безопасности, а третий на обновления Debian.

Строки, начинающиеся с deb - ссылки на архивы бинарных пакетов, начинающиеся с deb-src - ссылки на архивы исходных кодов пакетов.

Файл /etc/apt/sources.list может содержать различные типы строк. APT умеет использовать архивы следующих типов: http, ftp, file (локальные файлы, то есть директории, содержащие примонтированные файловые системы типа ISO9660) и ssh, насколько мне известно.

Не забудьте запустить команду apt-get update после изменения файла /etc/apt/sources.list. Вы должны сделать это чтобы APT мог получить списки пакетов из указанных вам источников. Когда вы устанавливаете пакет APT получает необходимые файлы с хостов перечисленных в /etc/apt/sources.list, сохраняет их в локальном репозитарии (/var/cache/apt/archives/) и переходит к установке.

Основные утилиты для управления пакетами

dpkg – установщик пакетных файлов Debian
apt-get – утилита командной строки для APT
aptitude – имеет как псевдографический интерфейс, так и вариант для командной строки
synaptic – графический (gui) интерфейс для APT
dselect – менеджер пакетов на основе меню
tasksel – установщик задач

Для установки программ с помощью apt выполните следующее:

# apt-get install software

Утилита имеет следующие параметры:

-h - отобразить справку
-d - только загрузить пакеты, но не устанавливать их
-f - попытаться продолжить, если тесты целостности не пройдены
-s - ничего не делать, только провести симуляцию установки
-y - отвечать Да на все вопросы и ничего не спрашивать
-u - также отобразить список обновляемых пакетов.

Примеры использования apt-get

Если вы как-либо повредили установленный пакет или просто хотите обновить пакет до последней версии, которая доступна, вы можете использовать параметр --reinstall, к примеру, так:

# apt-get --reinstall install packagename

Обновление списка пакетов из источников, перечисленных в вашем файле sources.list:

# apt-get update

Обновление программ с помощью APT:

# apt-get -u upgrade

Чтобы изменить список зеркал APT:

# apt-setup

Искать пакет в локальном кэше:

# apt-cache search package

Удалить программу с помощью APT:

# apt-get remove software

Обновить список пакетов:

# apt-get update

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

# dselect update

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

# apt-get upgrade

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

# apt-get install pkg

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

# apt-get remove pkg

Показать все установленные и удалённые пакеты:

# dpkg -l

Показать статус установки пакета:

# dpkg -l pkg

Показать все пакеты, удовлетворяющие маске:

# dpkg -S pattern

Показать пакеты, которые содержат строку:

# dpkg

Показать список файлов в пакете:

# dpkg -L pkg

Показать статус пакета:

# dpkg -s pkg

Показать детали пакета:

# dpkg -p pkg

Показать связанные пакеты:

# apt-cache search string

Установить пакет из deb файла:

# dpkg -i file.deb

Вычистить пакет из системы вместе с конфигурационными файлами:

# dpkg -P pkg

Повторно запустить конфигурацию для пакета:

# dpkg-reconfigure pkg

Получить исходные коды пакета:

# apt-get source pkg

Определяет зависимости для исходников и устанавливает их, если нужно:

# apt-get build-dep name

Установить пакет из указанного релиза:

# apt-get -t release install pkg

Предотвращает загрузку указанной программы при старте системы:

# update-rc.d -f name remove

Обновить дистрибутив:

# apt-get –u dist-upgrade

Параметр -u показывает список обновляемых пакетов:

# apt-show-versions -u

Как узнать, какие пакеты могут быть обновлены?

apt-show-versions - это программа, которая показывает какие пакеты в системе могут быть обновлены и, кроме того, некоторую полезную информацию.

Управление пакетами с помощью aptitude

Aptitude является в настоящий момент предпочтительной системой для работы с APT (Advanced Package Tool). Она запоминает, какие пакеты были установлены напрямую Вами, а какие пакеты были установлены за счет зависимостей. Недавние пакеты будут автоматически удалены системой aptitude, когда они будут уже не будут требоваться какому-либо пакету, установленному напрямую. Aptitude имеет продвинутые функции фильтрации пакетов, но они могут быть сложны в настройке.

Обновление локального кеша доступных пакетов (ранее: apt-get update):

# aptitude update

Обновить доступные пакеты (ранее: apt-get upgrade):

# aptitude upgrade

Обновить доступные пакеты, даже если это значит удаление части пакетов (ранее: apt-get dist-upgrade):

# aptitude dist-upgrade

Установить пакет (ранее: apt-get install):

# aptitude install pkgname

Удалить пакет (ранее: apt-get remove):

# aptitude remove pkgname

Удалить пакет и конфигурационные файлы (ранее: apt-get –purge remove):

# aptitude purge pkgname

Искать пакет с текстом "string" в имени или описании (ранее: apt-cache search string):

# aptitude search string

Показать подробную информацию о пакете (ранее: apt-cache show pkgname):

# aptitude show pkgname

Удалить загруженные файлы пакетов (ранее: apt-get clean):

# aptitude clean

Удалить только файлы пакетов старых версий, но пакеты текущих версий оставить (ранее: apt-get autoclean):

# aptitude autoclean

Зафиксировать пакет на текущей версии и не обновлять его автоматически (ранее: не понятная команда echo-to-file):

# aptitude hold pkgname

Чтобы снять фиксацию следует использовать параметр unhold.

Оптимизированный sources.list

Вообще говоря, усилия для создания оптимизированного sources.list не дают особого улучшения.

apt-spy создает sources.list автоматически, на основе задержек и пропускной способности. netselect-apt создает более полный sources.list, но использует более простой метод выбора лучшего зеркала (сравнения времени пингов).

# aptitude install apt-spy
# cd /etc/apt ; mv sources.list sources.list.org
# apt-spy -d testing -l sources.apt

Команда dpkg-divert

Файловые "отклонения" (divertions) - это способ заставить dpkg не устанавливать файл в директорию по умолчанию, но устанавливать в измененную директорию. "Отклонения" могут быть использованы с помощью дебиановских скриптов управления пакетами для перемещения файла в другое место когда он вызывает конфликты. Системные администраторы также могут использовать "отклонение" для подавления конфигурационного файла пакета или в случае, когда некоторые файлы (которые не помечены как conffiles) должны быть сохранены системой dpkg во время установки новой версии пакета, содержащего эти файлы.

# dpkg-divert [--add]  filename # add "diversion"
# dpkg-divert --remove filename # remove "diversion"

Что делать, если команда dpkg сломана

Сломанный dpkg делает невозможным установку любых .deb файлов. Процедура, описанная ниже, поможет вам в этой ситуации. Вам понадобится любая команда для браузинга сайтов, к примеру, links.

$ links http://http.us.debian.org/debian/pool/main/d/dpkg/
... download the good dpkg_version_arch.deb
$ su
password: *****
# ar x dpkg_version_arch.deb
# mv data.tar.gz /data.tar.gz
# cd /
# tar xzfv data.tar.gz

Для архитектуры i386, в URL может быть использована также ссылка http://packages.debian.org/dpkg

Локальный архив пакетов

Для того, чтобы создать локальный архив пакетов, совместимый с APT и системой dselect, пакеты должны быть созданы и занесены в особое дерево директорий.

Локальный deb репозитарий, похожий на официальный архив Debian, может быть создан следующим образом:

# aptitude install dpkg-dev
# cd /usr/local
# install -d pool # physical packages are located here
# install -d dists/unstable/main/binary-i386
# ls -1 pool | sed 's/_.*$/ priority section/' | uniq > override
# editor override # adjust priority and section
# dpkg-scanpackages pool override /usr/local/ \
  > dists/unstable/main/binary-i386/Packages
# cat > dists/unstable/main/Release << EOF
Archive: unstable
Version: 3.0
Component: main
Origin: Local
Label: Local
Architecture: i386
EOF
# echo "deb file:/usr/local unstable main" \ >> /etc/apt/sources.list

Другим способом, быстрый и грязный локальный deb архив может быть создан так:

# aptitude install dpkg-dev
# mkdir /usr/local/debian
# mv /some/where/package.deb /usr/local/debian
# dpkg-scanpackages /usr/local/debian /dev/null | \
gzip - > /usr/local/debian/Packages.gz
#  echo "deb file:/usr/local/debian ./" >> /etc/apt/sources.list

К этим архивам можно получить удаленный доступ, если предоставить доступ к этим директориям посредством HTTP или FTP и внести соответствующие изменения в файл /etc/apt/sources.list

Команда auto-apt

auto-apt - это приложение для установки пакетов по требованию.

$ sudo auto-apt update
... update database
$ auto-apt -x -y run
Entering auto-apt mode: /bin/bash
Exit the command to leave auto-apt mode.
$ less /usr/share/doc/med-bio/copyright # access non-existing file
...  Install the package which provide this file.
... Also install dependencies

Основные ошибки при управлении пакетами

Ошибки всегда случаются, многие из них по причине не внимательности пользователей. Ниже представлены наиболее часто встречающиеся ошибки и информация о том, что делать при их возникновении.

1. Если Вы получили представленное ниже сообщение, когда пытались выполнить команду вида apt-get install package

Reading Package Lists... Done
Building Dependency Tree... Done
W: Couldn't stat source package list 'http://people.debian.org unstable/ Packages' (/var/state/apt/lists/people.debian.org_%7ekov_debian_unstable_Packages) - stat (2 No such file or directory)
W: You may want to run apt-get update to correct these missing files
E: Couldn't find package penguineyes

то вы забыли выполнить команду apt-get update после того, как внесли изменения в файл /etc/apt/sources.list.

2. Если ошибка выглядит как эта:

E: Could not open lock file /var/lib/dpkg/lock - open (13 Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

в момент, когда вы пытаетесь воспользоваться одним из методов apt-get, кроме source, то у вас нет прав суперпользователя, то есть вы работаете под обычным пользователем.

Существует ошибка похожая на представленную выше, которая возникает когда вы запускаете две копии apt-get в одно и то же время или если вы даже пытаетесь запустить apt-get пока активен процесс dpkg. Единственный метод, который может использоваться одновременно с другими - это метод source.

3. Если установка прерывается в середине процесса и вы обнаруживаете, что более нет возможности устанавливать или удалять пакеты, попробуйте воспользоваться следующими двумя командами:

# apt-get -f install
# dpkg --configure -a

и затем попробуйте заново провести установку. Может понадобиться выполнить вторую из представленных выше команд больше чем один раз. Это может быть хорошим уроком для тех приключенцев, которые любят использовать "не стабильный" софт.

4. Если вы получили ошибку

E: Dynamic MMap ran out of room

во время работы apt-get update, то добавьте следующую строку в файл /etc/apt/apt.conf:

APT::Cache-Limit 10000000;

Наверх

Опубликовано