Установка и удаление программ (пакетов)

Александр Боковой, Дмитрий Левин

Введение

Современные системы на базе Linux включают огромное число общих для многих программ ресурсов: разделяемых библиотек, содержащих стандартные функции, исполняемых файлов, скриптов и стандартных утилит, необходимых для корректной работы многих программ и т. д. Удаление или изменение версии одного из составляющих систему компонентов может повлечь неработоспособность других, связанных с ним компонентов, или даже вывести из строя всю систему. В контексте системного администрирования проблемы такого рода называют нарушением целостности системы. Задача администратора — обеспечить наличие в системе согласованных версий всех необходимых программных компонентов (обеспечение целостности системы).

Для установки, удаления и обновления программ и поддержания целостности системы в Linux в первую очередь стали использоваться менеджеры пакетов (такие, как RPM в дистрибутивах RedHat или dpkg в Debian GNU/Linux). С точки зрения менеджера пакетов программное обеспечение представляет собой набор компонентов — программных пакетов. Такие компоненты содержат в себе набор исполняемых программ и вспомогательных файлов, необходимых для корректной работы ПО. Менеджеры пакетов дают возможность унифицировать и автоматизировать сборку двоичных пакетов и облегчают установку программ, позволяя проверять наличие необходимых для работы устанавливаемой программы компонент подходящей версии непосредственно в момент установки, а также производя все необходимые процедуры для регистрации программы во всех операционных средах пользователя. Сразу после установки программа оказывается доступна пользователю из командной строки и появляется в меню всех графических оболочек.

Важно

Благодаря менеджерам пакетов, пользователю Linux обычно не требуется непосредственно обращаться к установочным процедурам отдельных программ или непосредственно работать с каталогами, в которых установлены исполняемые файлы и компоненты программ (обычно это /usr/bin, /usr/share/имя_пакета) — всю работу делает менеджер пакетов. Поэтому установку, обновление и удаление программ в Linux обычно называют управлением пакетами.

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

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

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

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

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

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

Первоначально APT был разработан для управления установкой и удалением программ в дистрибутиве Debian GNU/Linux. При разработке ставилась задача заменить используемую в Debian систему выбора программных пакетов dselect на новую, обладающую большими возможностями и простым пользовательским интерфейсом, а также позволяющую производить установку, обновление и повседневные «хозяйственные» работы с установленными на машине программами без необходимости изучения тонкостей используемого в дистрибутиве менеджера программных пакетов.

Эти привлекательные возможности долгое время были доступны только пользователям Debian, поскольку в APT поддерживался только один менеджер пакетов, а именно применяемый в Debian менеджер пакетов dpkg, несовместимый с используемым в ALT Linux RPM. Эта несовместимость заключается прежде всего в различии используемых форматов данных (хотя существуют программы-конвертеры), но имеются и другие различия, обсуждение которых выходит за рамки изложения.

APT, однако, изначально проектировался как не зависящий от конкретного метода работы с установленными в системе пакетами, и эта особенность позволила разработчикам из бразильской компании Conectiva реализовать в нём поддержку менеджера пакетов RPM. Таким образом, пользователи основанных на RPM дистрибутивов (ALT Linux входит в их число) получили возможность использовать этот мощный инструмент.

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

Графический интерфейс для APT

synaptic — это графическая оболочка для APT. Она значительно проще в использовании, чем другие оболочки для APT. Вместо использования дерева для отображения пакетов synaptic основан на мощной системе фильтрации пакетов. Это значительно упрощает интерфейс и вместе с тем предоставляет гораздо больше гибкости при навигации по очень длинным спискам пакетов. Если вы хотите устанавливать и удалять пакеты и предпочитаете работать с программами с графическим интерфейсом, прежде всего попробуйте synaptic.

Использование APT

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

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

# apt-get update

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

В качестве источника пакетов можно использовать и компакт-диски дистрибутива, поскольку на каждом диске присутствует вся необходимая для APT информация о содержащихся на нём пакетах. Для этого необходимо использовать утилиту apt-cdrom с единственным параметром add. Повторите эту операцию для всех CD в вашем наборе.

После этого в /etc/apt/sources.list появится запись о подключённом диске:

rpm cdrom:[Junior Disk 1]/ ALTLinux main
rpm-src cdrom:[Junior Disk 1]/ ALTLinux main

Если подключение к Internet отсутствует, то следует закомментировать те строчки в /etc/apt/sources.list, в которых говорится о ресурсах, доступных по Интернет. Непосредственно после установки дистрибутива ALT Linux в /etc/apt/sources.list указаны несколько таких источников:

  • репозиторий обновлений в системе безопасности дистрибутива;

  • бинарные пакеты из репозитория Sisyphus («Сизиф»);

  • исходные тексты архивов, использовавшихся для сборки пакетов в репозитории Sisyphus.

Проект Sisyphus команды ALT Linux Team содержит большое количество программ, в том числе и не вошедших в тот или иной дистрибутив. Следует иметь в виду, что он не является самостоятельным дистрибутивом, а отражает текущее состояние разработки и может содержать нестабильные версии пакетов. Периодически на базе этого проекта выпускаются отдельные оттестированные «срезы» — дистрибутивы. Репозиторий ежедневно обновляется разработчиками, поэтому необходимо синхронизировать локальную базу данных с сервером ALT Linux (или его зеркалами) перед началом работы с APT. Такую синхронизацию достаточно делать один раз в день командой apt-get update. Для репозиториев, находящихся на компакт-дисках и подключённых командой apt-cdrom add, синхронизацию достаточно сделать один раз в момент подключения.

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

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

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

$ apt-cache search master

xcdroast - A GUI program for burning Cds
bluefish - A WYSIWYG GPLized HTML editor
xmess - X-Mess Multi Emulator Super System
mkisofs - Creates an image of an ISO9660 filesystem

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

Пакет: bluefish
Секция: Networking/WWW
Размер установленных пакетов: 2018
Упаковщик: AEN <aen@logic.ru>
Версия: 1:0.7-alt0.1
..
Предоставляет: bluefish
Архитектура: i586
..
Имя файла: bluefish-0.7-alt0.1.i586.rpm
Описание: A WYSIWYG GPLized HTML editor
Bluefish is a programmer's HTML editor, designed to save the
experienced webmaster some keystrokes.
It features a multiple file editor, multiple toolbars, custom menus,
image and thumbnail dialogs, open from the web, HTML validation and
lots of wizards.
It is in continuous development, but it's already one of the best
WYSIWYG HTML editors.

Как можно заметить, в кратком описании этого пакета нет слова «master», которое было задано в качестве подстроки для поиска. Однако здесь присутствует слово «webmaster», что объясняет наличие этого пакета в результате поиска по слову «master».

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

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

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

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

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

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

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

Обработка файловых зависимостей... Завершено
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие дополнительные пакеты будут установлены:
clanlib clanlib-mikmod clanlib-sound libmikmod
Следующие НОВЫЕ пакеты будут установлены:
clanbomber clanlib clanlib-mikmod clanlib-sound libmikmod
0 пакетов будет обновлено, 5 будет добавлено новых,
0 будет удалено(заменено) и 0 не будет обновлено.
Необходимо получить 0B/2577kB архивов. После распаковки 3862kБ будет
использовано.
Продолжить? [Y/n] y
Выполняется программа RPM (/bin/rpm -Uv --replacepkgs -h)...
Подготовка... ##########################################
libmikmod ##########################################
clanlib ##########################################
clanlib-mikmod ##########################################
clanlib-sound ##########################################
clanbomber ##########################################

Внимание

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

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

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

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

Для удаления пакета используется команда 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 выдаёт такое сообщение, необходимо рассматривать отдельно. Однако, вероятность того, что после выполнения этой команды система окажется неработоспособной, очень велика.

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

Для обновления всех установленных пакетов используется команда 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.

Настройка APT

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

Настройка описаний репозиториев задаётся в файле /etc/apt/sources.list в следующем виде:

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

  • rpm или rpm-src — тип репозитория (скомпилированные программы или исходные тексты);

  • подпись — необязательная строка-указатель на сигнатуру разработчиков. Сигнатуры описываются в файле /etc/apt/vendor.list;

  • метод — способ доступа к репозиторию: ftp, http, file, rsh, ssh, cdrom;

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

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

  • название — название репозитория;

Например, при установке ALT Linux в /etc/apt/sources.list записываются следующие настройки:

# Sisyphus
rpm [alt] ftp://ftp.altlinux.com/pub/distributions/ALTCOMP/Sisyphus i586 classic
rpm-src [alt] ftp://ftp.altlinux.com/pub/distributions/ALTCOMP/Sisyphus i586 classic

При этом, реальная структура репозитория по адресу ftp://ftp.altlinux.com/pub/distributions/ALTCOMP/Sisyphus выглядит следующим образом:

ftp://ftp.altlinux.com/pub/distributions/ALTCOMP/Sisyphus
|--SRPMS.base
|--SRPMS.castle
|--SRPMS.classic
|--SRPMS.contrib
|--SRPMS.junior
|--SRPMS.kernel
|--SRPMS.master
`--i586
   |--RPMS.base
   |--RPMS.castle
   |--RPMS.classic
   |--RPMS.contrib
   |--RPMS.junior
   |--RPMS.kernel
   |--RPMS.master
   `--base

APT позволяет работать одновременно с несколькими репозиториями, описанными в его конфигурационных файлах. Ранее такие описания могли быть размещены только в файле /etc/apt/sources.list. В новых версиях APT, используемых в дистрибутивах ALT Linux, появилась возможность поддерживать множественные описания репозиториев в отдельных файлах в каталоге /etc/apt/sources.list.d. Все файлы в этом каталоге, имена которых составлены только из букв латинского алфавита, цифр, символов «-» и «_», трактуются APT как конфигурационные файлы, аналогичные /etc/apt/sources.list. С помощью этого расширения можно оформлять описания локальных репозиториев, не опасаясь, что при обновлении файлы конфигурации будут переписаны.

Описанная выше схема с /etc/apt/sources.list.d используется также и для описаний подписей разработчиков в каталоге /etc/apt/vendors.list.d.

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

# apt-get update mysource.list

Более подробное описание команд программы apt-get можно найти в справочной системе дистрибутива, на страницах apt-get(8) и apt.conf(5).