Глава 3. Управление пакетами

Содержание

Обеспечение и поддержание целостности системы с помощью APT

В нашем дистрибутиве программы (состоящие, как правило, из нескольких файлов) распространяются объединенными в пакеты формата RPM (RedHat Packet Manager).

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

Каждый пакет определяется именем программы, номером ее версии и номером версии релиза этой программы нашего дистрибутива, а также архитектурой пакета. Например, bash-2.0.5-alt2.i586.rpm: в этом пакете имя – bash, номер версии – 2.0.5, номер релиза – alt2, архитектура – i586. Чем больше номер версии (или при одинаковых номерах версии – чем больше номер релиза), тем, соответственно, новее пакет.

Управлять пакетами можно из командной строки при помощи программы rpm, которая имеет следующий синтаксис:

rpm -options rpm_package_name

Далее приводятся возможные параметры. вставить насчет rpm4, db3, ^C, rm -f /var/lib/rpm/__* ---- mike, 02.22.2002, 18:58 ----

Будьте осторожны с опцией --force – ее можно употреблять только в тех случаях, когда вы хорошо знаете, что делаете. Если надо установить два или более пакетов, зависящих друг от друга, то установите их одновременно:

# rpm -ihv foo-1.1-3mdk.rpm libfoo-1.5-2mdk.rpm

Для получения дополнительной информации наберите man rpm.

Обеспечение и поддержание целостности системы с помощью APT

Введение

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

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

Усовершенствованная система управления программными пакетами APT (Advanced Packaging Tool) первоначально была разработана для управления установкой и удалением программ в дистрибутиве Debian GNU/Linux. При разработке ставилась задача заменить используемую в Debianсистему выбора программных пакетов dselect на новую, обладающую большими возможностями и простым пользовательским интерфейсом, а также позволяющую производить установку, обновление и повседневные “хозяйственные” работы с установленными на машине программами без необходимости изучения тонкостей используемой в дистрибутиве менеджера программных пакетов.

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

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

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

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

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

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

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

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

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

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

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

# apt-get update
	  

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

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

# apt-cdrom add

Используется точка монтирования CD-ROM /mnt/cdrom/
Размонтирование CD-ROM
Пожалуйста, вставьте диск в устройство и нажмите <Enter>
Монтирование CD-ROM
Используется точка монтирования CD-ROM /mnt/cdrom
Определение... [8d56fef8c93e5255540c843e4b9f49fa-2]
Сканирование диска в поисках индексных файлов...
Найдено 1 бинарных пакетов и 1 исходных пакетов.
Пожалуйста, укажите имя этого диска, например, 'Мой Дистрибутив Диск
1':
Master Disk 1
Этот диск называется
'Master Disk 1'
Reading Indexes... Завершено
Reading Indexes... Завершено
Запись нового списка источников
Список источников для этого диска:
rpm cdrom:[Master Disk 1]/ Mandrake Master
rpm-src cdrom:[Master Disk 1]/ Mandrake Master
	  

Повторите этот процесс для всех CD в вашем наборе.

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

rpm cdrom:[Master Disk 1]/ i586/Mandrake Master
rpm-src cdrom:[Master Disk 1]/ Mandrake Master
	  

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

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

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

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

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

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

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

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

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

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

Пример 3.1. Установка пакета 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-get -f install, и APT постарается разрешить найденные конфликты, предложив удалить или заменить конфликтующие пакеты. Любые действия в этом режиме обязательно требуют подтверждения со стороны пользователя.

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

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

В кратком описании каждого из перечисленных пакетов не присутствует слово “master”.

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

Наличие слова “webmaster” и объясняет наличие этого пакета в результате поиска по слову “master”.

Настройка 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;

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

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

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

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

   
# Sisyphus
rpm [alt] ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/Sisyphus i586/Mandrake sisyphus
rpm-src [alt] ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/Sisyphus i586/Mandrake sisyphus
	  

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

ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/Sisyphus
|-- SRPMS
|-- i586
| |-- Mandrake
| | |-- RPMS
| | |-- RPMS.sisyphus -> RPMS
| | |-- SRPMS.sisyphus -> ../../SRPMS
| | |-- base
	  

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

Создание собственного репозитория

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

i586

архитектура, под которую собраны пакет (совпадает с таковой в имени бинарных RPM-пакетов)

Mandrake

название подсистемы. Этот уровень в дереве может отсутствовать (то есть, каталоги RPMS и base могут идти сразу следом за архитектурой)

RPMS

каталог, в котором размещены бинарные пакеты

SRPMS

каталог, в котором размещены пакеты с исходными текстами программ

RPMS.sisyphus

ссылка на каталог RPMS. При этом sisyphus заменяется на собственное название репозитория, например, local

base

служебный каталог, в котором размещается база данных APT

Следующий шаг в создании своего репозитория заключается в помещении бинарных пакетов в каталог RPMS, а пакетов с исходными текстами — в каталог SRPMS и в генерации служебной информации для APT при помощи команды genbasedir; ее формат:

genbasedir [опции] {название подсистемы} {репозиторий 1} [репозиторий 2...]

Из опций, список которых можно увидеть при запуске genbasedir без параметров, наиболее важной является опция --topdir, позволяющая указать путь к репозиторию. Все остальные параметры задаются относительно этого пути. Выглядит это следующим образом. Допустим, что наше дерево каталогов выглядит так:

/opt/repository/
|-- SRPMS
|-- SRPMS.security
|-- i386
| |-- MyDistro
| | |-- RPMS
| | |-- RPMS.local -> RPMS
| | |-- RPMS.security
| | |-- SRPMS.local -> ../../SRPMS
| | |-- SRPMS.security -> ../../SRPMS.security
| | |-- base
	  

Тогда строка запуска genbasedir будет выглядеть так:

$ genbasedir --topdir=/opt/repository i386/MyDistro local security
	  

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

rpm file:/opt/repository i386/MyDistro local
rpm-src file:/opt/repository i386/MyDistro local
rpm file:/opt/repository i386/MyDistro security
rpm-src file:/opt/repository i386/MyDistro security
	  

Репозиторий MyDistro.security, хранящий пакеты с исправлениями ошибок в системе безопасности, имеет смысл подписывать PGP-ключом, чтобы при установке пакета можно было проверить аутентичность репозитория и хранящихся в нем пакетов. Для этого необходимо создать соответствующий PGP-ключ, используя программу GnuPG (gpg) и запомнить его отпечаток (fingerprint) на клиентских машинах в файле /etc/apt/vendors.list в формате:

simple-key "краткое название ключа" {
Fingerprint "отпечаток ключа";
Name "Полное название ключа";
}
	  

Примером может служить ключ службы безопасности ALT Linux Team, которым подписаны пакеты репозитория Sisyphus и обновления безопасности для различных дистрибутивов ALTLinux:

simple-key "alt" {
Fingerprint "BB1DD157A9722953847C5DB25B433A0EEAC91CA0";
Name "ALT Security Team <security@altlinux.ru>";
}
	  

Для того, чтобы APT проверял аутентичность подписи, необходимо указать, что соответствующий репозиторий подписан PGP-ключом в /etc/apt/sources.list:

rpm [alt] file:/opt/repository i386/MyDistro security
rpm-src [alt] file:/opt/repository i386/MyDistro security
	  

Необходимо также сгенерировать информацию для APT в репозитории с указанием опции --sign команды genbasedir. Дополнительно, можно указать идентификатор ключа, если он отличается от ключа по умолчанию, используя опцию --uid=идентификатор. Значением этой опции является идентификатор ключа в том виде, как он передается программе GnuPG в опции --default-key:

$ genbasedir --topdir=/opt/repository --sign \
--uid='ALT Security Team' i386/MyDistro security
	  

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