Cистема управления пакетами

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:12, 25 ноября 2016.

Система управления пакетами — набор программного обеспечения, позволяющего управлять процессом установки, удаления, настройки и обновления различных компонентов программного обеспечения. Системы управления пакетами активно используются в различных дистрибутивах операционной системы Linux и других UNIX-подобных операционных системах.

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

Для установки, удаления и обновления программ и поддержания целостности системы в Linux в первую очередь стали использоваться менеджеры пакетов. С точки зрения менеджера пакетов программное обеспечение представляет собой набор компонентов — программных пакетов,содержащих помимо дистрибутива программного обеспечения набор определённых метаданных, которые могут включать в себя полное имя пакета, номер версии, описание пакета, имя разработчика, контрольную сумму, отношения с другими пакетами. Метаданные сохраняются в системной базе данных пакетов. Менеджеры пакетов облегчают установку программ: они позволяют проверить наличие необходимых для работы устанавливаемой программы компонент подходящей версии непосредственно в момент установки, а также производят необходимые процедуры для регистрации программы во всех операционных средах пользователя: cразу после установки программа может быть доступна пользователю из командной строки и — если это предусмотрено — появляется в меню всех графических оболочек.

Часто компоненты, используемые различными программами, выделяют в отдельные пакеты и помечают, что для работы ПО, предоставляемого пакетом A, необходимо установить пакет B. В таком случае говорят, что пакет A зависит от пакета B или что между пакетами A и B существует зависимость.

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

Задача контроля целостности и непротиворечивости установленного в системе ПО ещё сложнее. Представим, что некие программы A и B требуют наличия в системе компоненты C версии 1.0. Обновление версии пакета A, требующее обновления компоненты C до новой, использующей новый интерфейс доступа, версии (скажем, до версии 2.0), влечёт за собой обязательное обновление и программы B.

Однако менеджеры пакетов оказались неспособны предотвратить все возможные коллизии при установке или удалении программ, а тем более эффективно устранить нарушения целостности системы. Особенно сильно этот недостаток сказывается при обновлении систем из централизованного репозитория пакетов, в котором последние могут непрерывно обновляться, дробиться на более мелкие и т. п. Этот недостаток и стимулировал создание систем управления программными пакетами и поддержания целостности системы.

Для автоматизации этого процесса и применяется Усовершенствованная система управления программными пакетами APT (от англ. Advanced Packaging Tool). Такая автоматизация достигается созданием одного или нескольких внешних репозиториев, в которых хранятся пакеты программ и относительно которых производится сверка пакетов, установленных в системе. Репозитории могут содержать как официальную версию дистрибутива, обновляемую его разработчиками по мере выхода новых версий программ, так и локальные наработки, например, пакеты, разработанные внутри компании.

Таким образом, в распоряжении APT находятся две базы данных: одна описывает установленные в системе пакеты, вторая — внешний репозиторий. APT отслеживает целостность установленной системы и, в случае обнаружения противоречий в зависимостях пакетов, руководствуется сведениями о внешнем репозитории для разрешения конфликтов и поиска корректного пути их устранения.

Система APT состоит из нескольких утилит. Чаще всего используется утилита управления пакетами apt-get: она автоматически определяет зависимости между пакетами и строго следит за их соблюдением при выполнении любой из следующих операций: установка, удаление или обновление пакетов.

Форматы файлов пакетов

Операционная система Формат
Debian .deb
Ubuntu .deb
CentOS .rpm
Fedora .rpm
FreeBSD порты, .txz

Команды для получения информации о пакетах

Система Команда
Debian/Ubuntu apt-cache show package

dpkg -s package

CentOS yum info package

yum deplist package

Fedora dnf info package

dnf repoquery —requires package

FreeBSD (пакеты) pkg info package
FreeBSD (порты) cd /usr/ports/category/port && cat pkg-descr

Источники программ (репозитории)

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

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

  • Важно!
    • Подключая одновременно несколько репозиториев, нужно следить за тем, чтобы они были совместимы друг с другом по пакетной базе, т. е. отражали один определённый этап разработки. Например, совместимыми являются основной репозиторий дистрибутива и репозиторий обновлений по безопасности к данному дистрибутиву. В то же время смешение среди источников APT репозиториев, относящихся к разным дистрибутивам, или смешение стабильного репозитория с нестабильной веткой разработки (Sisyphus) чревато различными неожиданными трудностями при обновлении пакетов.

APT позволяет взаимодействовать с репозиторием с помощью различных протоколов доступа. Наиболее популярные — HTTP и FTP, однако существуют и некоторые дополнительные методы.

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

rpm [подпись] метод:путь база название
rpm-src [подпись] метод:путь база название

rpm или rpm-src

Тип репозитория (скомпилированные программы или исходные тексты).

[подпись]

Необязательная строка-указатель на электронную подпись разработчиков. Наличие этого поля подразумевает, что каждый пакет из данного репозитория должен быть подписан соответствующей электронной подписью. Подписи описываются в файле /etc/apt/vendor.list.

метод

Способ доступа к репозиторию: ftp, http, file, rsh, ssh, cdrom, copy.

путь

Путь к репозиторию в терминах выбранного метода.

база

Относительный путь к базе данных репозитория.

название

Название репозитория.

Для добавления в sources.list репозитория на компакт-диске в APT даже предусмотрена специальная утилита — apt-cdrom. Чтобы добавить запись о репозитории на компакт-диске, достаточно вставить диск в привод и выполнить команду apt-cdrom add. После этого в sources.list появится запись о подключённом диске примерно такого вида:

rpm cdrom:[ALT Linux 4.0 Desktop DVD (Ajuga)]/ ALTLinux base contrib disk

После того как отредактирован список репозиториев в sources.list, необходимо обновить локальную базу данных APT о доступных пакетах. Это делается командой apt-get update.

Если в sources.list присутствует репозиторий, содержимое которого может изменяться (как происходит с любым постоянно разрабатываемым репозиторием, в частности, обновлений по безопасности (updates, backports или Sisyphus), то прежде чем работать с APT, необходимо синхронизировать локальную базу данных с удалённым сервером командой apt-get update. Локальная база данных создаётся заново каждый раз, когда в репозитории происходит изменение: добавление, удаление или переименование пакета. Для репозиториев, находящихся на компакт-дисках и подключённых командой apt-cdrom add, синхронизация производится единожды в момент подключения.

При выборе пакетов для установки, APT руководствуется всеми доступными репозиториями вне зависимости от способа доступа к ним. Так, если в репозитории, доступном по сети Интернет, обнаружена более новая версия программы, чем на компакт-диске, то APT начнёт загружать данный пакет из интернета. Поэтому если подключение к интернету отсутствует или ограничено низкой пропускной способностью канала или высокой стоимостью, то следует закомментировать те строчки в /etc/apt/sources.list, в которых говорится о ресурсах, доступных по интернету.

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

Система Команда
Debian/Ubuntu sudo apt-get install package

sudo apt-get install package1 package2 …

sudo apt-get install -y package

CentOS sudo yum install package

sudo yum install package1 package2 …

sudo yum install -y package

Fedora sudo dnf install package

sudo dnf install package1 package2 …

sudo dnf install -y package

dnf repoquery —requires package

FreeBSD (пакеты) sudo pkg install package

sudo pkg install package1 package2 …

FreeBSD (порты) cd /usr/ports/category/port && sudo make install

Репозитории ALT Linux

Все дистрибутивы ALT Linux выпускаются на основе репозитория Sisyphus команды ALT Linux Team. Следует иметь в виду, что Sisyphus не является самостоятельным дистрибутивом, а отражает текущее состояние разработки и может содержать нестабильные версии пакетов. Периодически на базе этого проекта выпускаются отдельные оттестированные «срезы» — дистрибутивы.

В отличие от Sisyphus, ежедневно обновляемого разработчиками, такие срезы являются «замороженными» — разработка в них не ведётся, и сами срезы сохраняются в целях обеспечения целостности среды дистрибутива, в которой уже не должны обновляться версии пакетов. Единственное исключение делается для обновлений, исправляющих проблемы в безопасности системы, однако такие обновления помещаются в отдельном репозитории для каждого дистрибутива. Срезы Sisyphus и репозитории обновлений также являеются полноценными репозиториями APT.

Пользователи стабильных дистрибутивов не всегда готовы переходить на нестабильную ветку разработки и в то же время заинтересованы в обновлении версий некоторых прикладных программ (в которых появляется новая функциональность и т. п.). Для этих целей заинтересованными пользователями для каждого дистрибутива ALT Linux создаются и поддерживаются специальные репозитории с обновлёнными версиями программ — backports [2]. Репозитории backports являются согласованными по пакетной базе с основным репозиторием соответствующего дистрибутива, и могут быть без опасений подключены параллельно с ним.

Непосредственно после установки дистрибутива ALT Linux в /etc/apt/sources.list обычно указывается несколько репозиториев:

  • репозиторий обновлений в системе безопасности дистрибутива;
  • полный срез репозитория Sisyphus, подмножеством которого является дистрибутив.

Поиск пакетов

Если вы не знаете точного названия пакета, для его поиска можно воспользоваться утилитой apt-cache, которая позволяет искать не только по имени пакета, но и по его описанию.

Команда apt-cache search подстрока позволяет найти все пакеты, в именах или описании которых присутствует указанная подстрока. Например:

$ apt-cache search dictionary
kdenetwork-kdict - A DICT (net dictionary) client for KDE
stardict-gtk - StarDict dictionary gtk version
stardict-mueller7 - V.K. Mueller English-Russian Dictionary, 7 Edition: stardict format
stardict-slovnyk_be-en - Dictionary: Slovnyk Belorussian-English
stardict-slovnyk_be-ru - Dictionary: Slovnyk Belorussian-Russian
stardict-slovnyk_be-uk - Dictionary: Slovnyk Belorussian-Ukranian
stardict-slovnyk_en-be - Dictionary: Slovnyk English-Belorussian
stardict-slovnyk_en-ru - Dictionary: Slovnyk English-Russian
stardict-slovnyk_en-uk - Dictionary: Slovnyk English-Ukranian
stardict-slovnyk_ru-be - Dictionary: Slovnyk Russian-Belorussian
stardict-slovnyk_ru-en - Dictionary: Slovnyk Russian-English
stardict-slovnyk_ru-uk - Dictionary: Slovnyk Russian-Ukranian
stardict-slovnyk_uk-be - Dictionary: Slovnyk Ukranian-Belorussian
stardict-slovnyk_uk-en - Dictionary: Slovnyk Ukranian-English
stardict-slovnyk_uk-ru - Dictionary: Slovnyk Ukranian-Russian
stardict-vera - V.E.R.A. -- Virtual Entity of Relevant Acronyms
stardict-wn - GCIDE - The Collaborative International Dictionary of English
 

Для того, чтобы подробнее узнать о каждом из найденных пакетов и прочитать его описание, можно воспользоваться командой apt-cache show, которая покажет информацию о пакете из репозитория:

$ apt-cache show stardict-mueller7 
Package: stardict-mueller7
Section: Text tools 
Installed Size: 3048495 
Maintainer: Alex Murygin <murygin@altlinux.ru>
Version: 1.0-alt5
Pre-Depends: rpmlib(PayloadFilesHavePrefix) (<= 4.0-1), rpmlib(CompressedFileNames) (<= 3.0.4-1)
Depends: stardict (>= 2.4.2)
Provides: stardict-mueller7 (= 1.0-alt5)
Architecture: noarch
Size: 3052715
MD5Sum: 85778415d4c33513492d935ec03791ef
Filename: stardict-mueller7-1.0-alt5.noarch.rpm
Description: V.K. Mueller English-Russian Dictionary, 7 Edition: stardict format
Electronic version of V.K. Mueller English-Russian Dictionary, 7 Edition
in stardict format. You can use it with stardict client.

apt-cache позволяет осуществлять поиск и по русскому слову, однако в этом случае будут найдены только те пакеты, у которых помимо английского есть ещё и описание на русском языке. К сожалению, русское описание на настоящий момент есть не у всех пакетов, хотя описания наиболее актуальных для пользователя пакетов переведены.

Команды для поиска файлов пакетов

Система Команда
Debian/Ubuntu apt-cache search search_string
CentOS yum search search_string

yum search all search_string

Fedora dnf search search_string

dnf search all search_string

FreeBSD (пакеты) pkg search search_string

pkg search -f search_string

pkg search -D search_string

FreeBSD (порты) cd /usr/ports && make search name=package

cd /usr/ports && make search key=search_string

Установка или обновление пакета

Установка пакета с помощью APT выполняется командой

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

apt-get позволяет устанавливать в систему пакеты, требующие для работы другие, пока ещё не установленные. В этом случае он определяет, какие пакеты необходимо установить, и устанавливает их, пользуясь всеми доступными репозиториями.

Установка пакета stardict-mueller7 командой apt-get install stardict-mueller7 приведёт к следующему диалогу с APT:

 # apt-get install stardict-mueller7
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  stardict-mueller7
0 upgraded, 1 newly installed, 0 removed and 0 not upgraded.
Need to get 0B/3053kB of archives.
After unpacking 3048kB of additional disk space will be used.
Committing changes...
Preparing...                 ############################################################## [100%]
1: stardict-mueller7         ############################################################## [100%]
Done.

Команда apt-get install имя_пакета используется и для обновления уже установленного пакета или группы пакетов. В этом случае apt-get дополнительно проверяет, не обновилась ли версия пакета в репозитории по сравнению с установленным в системе.

При помощи APT можно установить и отдельный бинарный rpm-пакет, не входящий ни в один из репозиториев (например, полученный из Интернет). Для этого достаточно выполнить команду apt-get install путь_к_файлу.rpm. При этом APT проведёт стандартную процедуру проверки зависимостей и конфликтов с уже установленными пакетами.

Иногда, в результате операций с пакетами без использования APT, целостность системы нарушается, и apt-get отказывается выполнять операции установки, удаления или обновления. В этом случае необходимо повторить операцию, задав опцию -f, заставляющую apt-get исправить нарушенные зависимости, удалить или заменить конфликтующие пакеты. В этом случае необходимо внимательно следить за сообщениями, выдаваемыми apt-get. Любые действия в этом режиме обязательно требуют подтверждения со стороны пользователя.

Команды для установки пакета из локальной файловой системы

Система Команда
Debian/Ubuntu sudo dpkg -i package.deb

sudo apt-get install -y gdebi&& sudo gdebi package.deb

CentOS sudo yum install package.rpm
Fedora sudo dnf install package.rpm
FreeBSD (пакеты) sudo pkg add package.txz

sudo pkg add -f package.txz

Удаление установленного пакета

Для удаления пакета используется команда apt-get remove имя_пакета. Для того, чтобы не нарушать целостность системы, будут удалены и все пакеты, зависящие от удаляемого: если отсутствует необходимый для работы приложения компонент (например, библиотека), то само приложение становится бесполезным. В случае удаления пакета, который относится к базовым компонентам системы, apt-get потребует дополнительного подтверждения производимой операции с целью предотвратить возможную случайную ошибку.

Если вы попробуете при помощи apt-get удалить базовый компонент системы, вы увидите такой запрос на подтверждение операции:

 # apt-get remove filesystem
Обработка файловых зависимостей... Завершено
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие пакеты будут УДАЛЕНЫ:
basesystem filesystem ppp sudo
Внимание: следующие базовые пакеты будут удалены:
В обычных условиях этого не должно было произойти, надеемся, вы точно
представляете, чего требуете!
basesystem filesystem (по причине basesystem)
0 пакетов будет обновлено, 0 будет добавлено новых, 4 будет
удалено(заменено) и 0 не будет обновлено. 
Необходимо получить 0B архивов. После распаковки 588kБ будет
освобождено.
Вы собираетесь совершить потенциально вредоносное действие
Для продолжения, наберите по-английски 'Yes, I understand this may be
bad'
 (Да, я понимаю, что это может быть плохо).

Каждую ситуацию, в которой APT выдаёт такое сообщение, необходимо рассматривать отдельно. Однако, вероятность того, что после выполнения этой команды система окажется неработоспособной, очень велика.

Команды для удаления пакетов

Система Команда
Debian/Ubuntu sudo apt-get remove package

sudo apt-get autoremove

CentOS sudo yum remove package
Fedora sudo dnf erase package
FreeBSD (пакеты) sudo pkg delete package

sudo pkg autoremove

FreeBSD (порты) sudo pkg delete package

cd /usr/ports/path_to_port && make deinstall

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

Для обновления всех установленных пакетов используется команда apt-get upgrade. Она позволяет обновить те и только те установленные пакеты, для которых в репозиториях, перечисленных в /etc/apt/sources.list, имеются новые версии; при этом из системы не будут удалены никакие другие пакеты. Этот способ полезен при работе со стабильными пакетами приложений, относительно которых известно, что они при смене версии изменяются несущественно.

Иногда, однако, происходит изменение в именовании пакетов или изменение их зависимостей. Такие ситуации не обрабатываются командой apt-get upgrade, в результате чего происходит нарушение целостности системы: появляются неудовлетворённые зависимости. Например, переименование пакета MySQL-shared, содержащего динамически загружаемые библиотеки для работы с СУБД MySQL, в libMySQL (отражающая общую тенденцию к наименованию библиотек в дистрибутиве) не приводит к тому, что установка обновлённой версии libMySQL требует удаления старой версии MySQL-shared. Для разрешения этой проблемы существует режим обновления в масштабе дистрибутива — apt-get dist-upgrade.

В случае обновления всего дистрибутива APT проведёт сравнение системы с репозиторием и удалит устаревшие пакеты, установит новые версии присутствующих в системе пакетов, а также отследит ситуации с переименованиями пакетов или изменения зависимостей между старыми и новыми версиями программ. Всё, что потребуется поставить (или удалить) дополнительно к уже имеющемуся в системе, будет указано в отчёте apt-get, которым APT предварит само обновление.

При работе с Sisyphus для обновления системы рекомендуется использовать команду apt-get dist-upgrade.

Команды для обновления списка пакетов

Система Команда
Debian/Ubuntu sudo apt-get update
CentOS yum check-update
Fedora dnf check-update
FreeBSD (пакеты) sudo pkg update
FreeBSD (порты) sudo portsnap fetch update

Команды для обновления установленных пакетов

Система Команда
Debian/Ubuntu sudo apt-get upgrade

sudo apt-get dist-upgrade

CentOS sudo yum update
Fedora sudo dnf upgrade
FreeBSD (пакеты) sudo pkg upgrade
FreeBSD (порты) less /usr/ports/UPDATING

cd /usr/ports/ports-mgmt/portmaster && sudo make install && sudo portmaster -a

Получение справки

Кроме веб-документации системы Unix предоставляют удобный справочник, в котором можно найти информацию о большинстве команд оболочки. Чтобы открыть мануал, введите:

man page

В справочнике можно перемещаться при помощи кнопок со стрелками. Нажмите /, чтобы искать по тексту страницы, и q, чтобы выйти.

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

Система Команда Примечания
Debian/Ubuntu man apt-get

man apt-cache

man dpkg

Обновление локальной базы данных пакетов и работа с пакетами.

Запрос локальной базы данных пакетов.

Управление индивидуальными файлами пакетов и запрос установленных пакетов.

CentOS man yum
Fedora man dnf
FreeBSD (пакеты) man pkg Управление предварительно скомпилированными файлами пакетов.
FreeBSD (порты) man ports Управление коллекцией портов.

Наиболее известные системы управления пакетами

  1. npm
  2. RPM
  3. dpkg
  4. Pacman
  5. Portage (Система Управления Пакетами)
  6. Entropy (Система Управления Пакетами)
  7. PiSi
  8. IPS
  9. NuGet

Ссылки

  1. Система управления пакетами [Электронный ресурс] : Материал из Википедии — свободной энциклопедии : Версия 81687914, сохранённая в 20:44 UTC 3 ноября 2016 / Авторы Википедии // Википедия, свободная энциклопедия. — Электрон. дан. — Сан-Франциско: Фонд Викимедиа, 2016. — Режим доступа: http://ru.wikipedia.org/?oldid=81687914
  2. ALT Linux 4.1 Desktop [Электронный ресурс]: Система управления пакетами APT / Дата обращения: 13.11.16. — Режим доступа: http://mirror.yandex.ru/altlinux/4.1/Desktop/4.1.1/docs/packages_apt/index.html
  3. 8 host [Электронный ресурс]: ОСНОВЫ УПРАВЛЕНИЯ ПАКЕТАМИ: APT, YUM, DNF, PKG / Дата обращения: 13.11.16. — Режим доступа: https://www.8host.com/blog/osnovy-upravleniya-paketami-apt-yum-dnf-pkg/