% ! Hey Emacs, it's a *latex-mode*
\documentclass[russian, a4paper, 12pt]{article}
\usepackage[margin=20pt,head=20pt,headsep=20pt,foot=20pt]{geometry}
\usepackage[koi8-r]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage{babel}
%\usepackage{charter}
%\usepackage[pdftex=true,colorlinks=true,urlcolor=blue]{hyperref}
%\usepackage[pdftex]{graphicx}
\gdef \distribution {ALT Linux Master\ }
\title{Использование усовершенствованного средства управления пакетами APT для обеспечения целостности \distribution}
\author{Александр Боковой \verb~<ab@altlinux.ru>~}
\begin{document}
\maketitle


\section{Введение}

Усовершенствованное средство управления программными пакетами APT
(Advanced Packaging Tool) первоначально было разработано для
управления пакетами в дистрибутиве Debian GNU/Linux. Основной целью,
которая ставилась при разработке APT, была замена системы выбора
пакетов dselect в Debian на более мощную, способную сочетать в себе
простоту пользовательского интерфейса с возможностью установки,
обновления и повседневной работы с установленными на машине
программами без необходимости изучения пользователем тонкостей
используемой в дистрибутиве системы управления пакетами,
предоставляющими эти программы. Долгое время система APT была доступна
только пользователям Debian GNU/Linux, поскольку поддерживала только
один тип системы управления пакетами --- применяемый в Debian
GNU/Linux менеджер dpkg. Dpkg несовместим с используемой в \distribution
 системой управления пакетами RPM и эта несовместимость
заключается не только в выборе разных форматов, используемыми для
хранения данных о пакетах программ, она значительно глубже.

Однако APT изначально проектировалась как система, не зависящая от
метода управления установленными в системе пакетами, и эта особенность
позволила разработчикам из бразильской компании Conectiva
(www.conectiva.com.br) реализовать в ней поддержку менеджера пакетов
RPM. Таким образом, пользователи дистрибутивов, базирующихся на RPM
(\distribution входит в их число), также получили возможность
использовать эту мощную систему.

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

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

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

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

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

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

\section{Использование APT}

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

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

\verb|apt-get update|

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

После установки дистрибутива \distribution в
\verb|/etc/apt/sources.list| указаны два источника:
\begin{itemize}
\item репозитарий пакетов программ, скомпилированных для процессоров
Intel\texttrademark{} i80586 и старше;

\item репозитарий исходных архивов, использовавшихся для сборки пакетов в
первом репозитарии.
\end{itemize}

Оба репозитария являются частью проекта ``Сизиф'' команды ALT Linux Team
и  ежедневно обновляются разработчиками, поэтому
синхронизация локальной базы данных с репозитарием перед началом
работы с APT является необходимостью. Такую синхронизацию достаточно
делать один раз в день.

\subsection{Установка или обновление пакета}

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

\verb|apt-get install имя-пакета|

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

Команда

\verb|apt-get install имя-пакета|

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

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

\begin{verbatim}
Обработка файловых зависимостей... Завершено
Чтение списков пакетов... Завершено         
Построение дерева зависимостей... Завершено
Следующие дополнительные пакеты будут установлены:
  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                   ##########################################
\end{verbatim}

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

\subsection{Удаление установленного пакета}

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

Запрос на подтверждение операции удаления базовой компоненты системы
выглядит следующим образом:

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

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

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

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

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

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

\subsection{Настройка APT}

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

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

\begin{verbatim}
rpm [подпись] метод:путь база название
rpm-src [подпись] метод:путь база название
\end{verbatim}

\begin{tabular}{l|p{400pt}}
rpm или rpm-src & тип репозитария (скомпилированные программы или исходные тексты)\\
подпись & опциональная строка-указатель на сигнатуру разработчиков. Сигнатуры описываются в файле \verb|/etc/apt/vendor.list|\\
метод & способ доступа к репозитарию: ftp, http, file, rsh, ssh, cdrom\\
путь & путь к репозитарию в терминах выбранного метода\\
база & относительный путь к базе данных репозитария\\
название & название репозитария
\end{tabular}

Например, при установке \distribution в \verb|/etc/sources.list| записываются следующие
настройки:
{\small
\begin{verbatim}
# 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
\end{verbatim}
}

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

{\small
\begin{verbatim}
ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/Sisyphus
|-- SRPMS
|-- i586
|   |-- Mandrake
|   |   |-- RPMS
|   |   |-- RPMS.sisyphus -> RPMS
|   |   |-- SRPMS.sisyphus -> ../../SRPMS
|   |   |-- base
\end{verbatim}
}

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

\subsection{Поиск в репозитарии}

Для поиска в репозитарии нужного пакета можно воспользоваться утилитой
\verb|apt-cache|, которая позволяет искать не только по имени пакета, но и по
его описанию.

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

\begin{verbatim}
$ 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
\end{verbatim}

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

\begin{verbatim}
Пакет: 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.
\end{verbatim}

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

\end{document}