|
||||||||||||
ПакетыПригодная для работы пользователя система состоит из множества (сотен и
тысяч) программ и утилит. В Linux каждый компонент системы представлен в виде
пакета. Все операции, связанные с изменением состава системы:
установка, удаление, проверка, обновление компонентов, — производятся над
пакетами. В целом, пакет — это средство сделать так, чтобы
пользователь-администратор, изменяя или обновляя программное наполнение системы,
работал не с файлами (имена которых ему подчас неизвестны), а с
определёнными функциональностями самой системы: например, добавлял в
неё не «500 файлов», а «WWW-сервер Архив файловНа первый взгляд, программа состоит из одного — исполняемого — файла: запускаем файл, получаем работающую программу. Однако во время работы даже самая простая программа использует другие файлы, содержащие различные ресурсы: библиотеки, конфигурационные файлы, файлы-дырки и даже запускает другие программы. Чтобы программа действительно заработала, необходимо помимо главного исполняемого файла обеспечить наличие в системе всех нужных файлов с ресурсами. Понятно, что при установке или удалении программы нужно позаботиться и обо всех используемых ею файлах (которых может быть даже очень много). Это — первая задача пакетирования: все файлы, используемые программой, объединяются в один файл — архив. Это позволяет не копировать при установке программы все файлы по-отдельности, а потом не удалять их таким же способом, а работать со всеми данными программы как с одним целым — устанавливать и удалять один пакет.
Нет жёсткого требования, чтобы один пакет содержал только одну программу. В
пакет естественно объединять такие ресурсы, с которыми удобно работать как с
одним целым. Это может быть отдельная программа или набор утилит (например,
Самый простой и традиционный для Linux способ объединить несколько файлов в
один — использовать утилиту
Первый параметр
С каждым указанным каталогом tar работает рекурсивно, т. е.
запаковывает все содержащиеся в нём файлы и подкаталоги.
Чтобы проверить, какие файлы попали в архив, Мефодий просмотрел содержимое
получившегося архива командой « При распаковке архива
Ключ « Формат пакетаПомимо хранения архива файлов у пакета есть и другие задачи (они обсуждаются
в двух следующих разделах), поэтому для пакета в Linux не очень подходит обычный
файловый архив, наподобие Пакет в формате Регистрация в системеИтак, пакет с компонентом системы — это в первую очередь файловый архив, в котором хранятся все необходимые файлы вместе с путями к ним (т. е. каталогами). Когда компонентов много, нужно обеспечить, чтобы в разных пакетах не оказалось файлов с одинаковым именем и путём, чтобы файл, принадлежащий одному пакету, не мог быть заменён файлом другого пакета при установке. Отслеживать такого рода конфликты пакетов — вторая задача пакетирования. Чтобы предупреждать конфликты, в системе должна храниться информация обо всех уже установленных пакетах и принадлежащих им файлах. Когда точно известно, какие файлы принадлежат пакету, можно полностью удалить пакет, не оставив и не удалив при этом ничего лишнего. Такой подход препятствует образованию в системе «мусора» — бесполезных файлов, оставшихся от удалённых программ — и делает операцию установки/удаления пакета полностью обратимой.
Мефодий получил довольно длинный список имён файлов, среди которых встретил
многие из уже знакомых ему утилит и кое-какие незнакомые. Причём запрашивая
список файлов, Мефодий использовал только имя пакета, без
версии — Можно выполнить и обратную процедуру — выяснить про любой файл, какому пакету он принадлежит:
Файлы, принадлежащие пакету, могут быть не только удалены, но и изменены. Это
может быть сделано сознательно (например, отредактирован конфигурационный файл),
в таком случае при обновлении или удалении пакета изменённый файл нужно
сохранить, потому что в нём содержится результат работы, проделанной
администратором. Для этого система должна уметь определять, что принадлежащий
пакету файл изменился. Для этого в пакете должна храниться информация обо всех
файлах архива: размер, атрибуты, контрольная сумма — в
этом случае процедура проверки сможет проверить соответствие атрибутов файла в
пакете атрибутам установленного в системе файла. Мефодий может проверить, что
изменилось в пакете командой «
Мефодий получил список изменившихся с момента установки пакета файлов.
Видимо, всё это — конфигурационные файлы, отредактированные администратором
системы. Мефодий догадался, что комбинация цифр, букв и точек — это список
атрибутов, по которым Система Linux раскладывается на компоненты без остатка: каждый файл
в Linux принадлежит какому-нибудь (и только одному!) пакету3. Это позволяет свести любые изменения в
составе системы к операциям над пакетами — от начальной установки до
сложных комплексных обновлений. В этом случае для всех изменений будет
использоваться одна и та же программа-установщик, например,
Изменение настроек системыДля полноценной регистрации пакета в системе обычно недостаточно, чтобы система хранила список файлов, принадлежащих пакету. При установке, удалении или обновлении пакета часто требуется выполнить ряд операций, чтобы обновить сведения о пакете, адаптировать настройки — как самого пакета к уже имеющимися в системе, так и наоборот. К тому же, некоторые изменения в системе, например, добавление и удаление псевдопользователя, не сводятся к добавлению и удалению файлов, и вдобавок зависят от текущего состояния системы. Получается, что регистрация в системе — дело не только системы, но и самого пакета. Поэтому в каждом пакете должны храниться сведения о том, какие действия следует выполнить в момент различных операций с ним — в этом состоит третья задача пакетирования. Списки необходимых действий представлены в пакете в виде сценариев. Эти сценарии привязаны к процедурам установки и удаления пакета, причём могут быть вызваны по необходимости как до, так и после соответствующей процедуры. В результате процедуры установки и удаления пакета выглядят так:
Мефодий выяснил, что сценарии в пакете В результате подобных операций по интеграции пакета в систему могут быть
изменены или удалены файлы, не принадлежащие данному пакету, созданы новые
файлы. Если программа, содержащаяся в пакете, пользуется услугами какой-нибудь
уже установленной службы (например, Цена удобстваУдобство, которое получает пользователь при работе с пакетами достигается не
само собой, а человеческим трудом: пакеты должен создавать человек, его работа
называется «сопровождающий» («package maintainer» или «packager»). В обязанности
сопровождающего пакет входит подготовка файлового архива, необходимых для
установки и удаления сценариев и прочей информации о пакете и его содержимом, и
объединение их в одном файле-пакете4. Узнать, кто и когда создал пакет, получить
краткую справку о программном обеспечении, которое в нём содержится, можно
командой «
Нужно принимать во внимание, что любой пакет, содержащий программное обеспечение для Linux, не является универсальным. Если у вас есть такой пакет, это ещё не означает, что его можно установить в вашей системе. Дело в том, что разные дистрибутивы Linux различаются именно тем, каким образом программное обеспечение организовано в систему (о дистрибутивах речь пойдёт в лекции Политика свободного лицензирования. История Linux: от ядра к дистрибутивам). Дистрибутивы могут различаться размещением файлов и процедурами, предусмотренными для интеграции в систему программного обеспечения, не говоря уже о том, что в разных дистрибутивах используется разный формат пакетов. Это значит, что пакет, подготовленный с ориентацией на один дистрибутив, может оказаться несовместимым с другим. Чтобы в вашем дистрибутиве появилась некоторая программа, кто-то должен подготовить и сделать доступным соответствующий пакет.
Несмотря на частные различия, дистрибутивы Linux представляют собой варианты одной и той же системы, поэтому в конечном итоге любую программу, работающую в одном дистрибутиве, можно «приспособить» к любому другому. Только для этого нужно располагать исходными текстами соответствующей программы. До сих пор речь шла только о так называемых двоичных пакетах, в которых программы содержатся в виде уже скомпилированных двоичных (исполняемых) файлов, в таком виде программа может зависеть от некоторых свойств системы и работать не везде. Чтобы получить работающую программу в системе, нужно установить именно двоичный пакет. Однако пакет может содержать и исходные тексты программ, такие пакеты называются исходными. Доступность исходных кодов — обязательное условие распространения большей части программного обеспечения для Linux, см. лекцию Политика свободного лицензирования. История Linux: от ядра к дистрибутивам. Если получилось так, что никто не подготовил пакет с нужной вам программой для вашего дистрибутива, у вас есть возможность установить исходный пакет и скомпилировать программу самостоятельно5. При успешной компиляции из исходного пакета получается соответствующий двоичный, который уже можно установить в системе. ЗависимостиМефодий нашёл в Интернете пакет с заинтересовавшей его программой в
подходящем формате
Однако
БиблиотекиМефодию помешала установить пакет самая типичная зависимость — на библиотеку. Библиотеки возникают оттого, что все программы, сколько бы они не отличались друг от друга, нуждаются в выполнении одних и тех же операций: вводе и выводе, получении доступа к ресурсам системы (памяти, процессорному времени, файлам), вычислениях, работе с сетью, рисовании окошек, кнопок, меню и т. п. Для выполнения таких операций используются небольшие подпрограммы — функции. Любые функции, необходимые более чем одной программе, есть смысл не включать в текст каждой программы, а собирать в отдельных библиотеках. Тогда программа сможет использовать не собственную подпрограмму, а готовую функцию из библиотеки. Поскольку библиотеки нужны нескольким программам, они обычно оформляются в виде отдельного пакета. Если библиотека не будет установлена, использующая её программа просто не будет работать. Библиотеки подвержены тем же изменениям с течением времени, что и все прочие программы: исправлению обнаруженных ошибок, модернизации, оптимизации и пр. Поэтому версии библиотек должны быть согласованы с версией программного обеспечения. Например, программа может отказаться работать даже при наличии библиотеки, если эта библиотека слишком старая либо слишком новая по сравнению с самой программой. Цепочки зависимостейОднако понятие зависимости включает не только зависимость программы от
библиотек. Вообще говоря, зависимость возникает там, где программное обеспечение
использует любой не поставляемый непосредственно с ним ресурс7. Это могут быть и утилиты, которые
запускаются при работе самой программы или во включённых в пакет сценариях,
программа-интерпретатор для исполнения этих сценариев, и даже определённые
файлы, которые должны присутствовать для правильной работы программы (например,
утилита Зависимость может быть и небезусловной. Например, в некоторых случаях нужно обеспечить наличие ресурса не к моменту запуска программы, а прямо к моменту установки пакета, так, для выполнения доустановочного сценария нужна программа-интерпретатор. В некоторых случаях требуется ресурс строго определённой версии, ни больше, ни меньше. Бывают случаи, когда зависимость имеет обобщённую форму, например, почтовому клиенту (программе для чтения и написания электронной почты) может требоваться служба доставки электронной почты. В Linux такую услугу предоставляют несколько разных программ, и любая из них удовлетворит зависимость. Разобравшись с понятием зависимости, Мефодий набрался твёрдой решимости установить-таки нужный ему пакет, установив всё, что он потребует. Но не тут-то было: взявшись устанавливать библиотеки, Мефодий выяснил, что каждой из них требуются какие-то ещё пакеты, отсутствующие в системе, у каждого из них тоже есть зависимости и т. п. — один единственный пакет повлёк за собой снежный ком других, вытягивая их по цепочкам зависимостей. Конфликты и альтернативыВ противоположность зависимости, когда пакет не может быть установлен при
отсутствии некоторого другого, конфликт пакетов — это
ситуация, когда пакет не может быть установлен при наличии некоторого
другого, т. е. они несовместимы в рамках одной системы. Одна из причин
возникновения конфликтов уже упоминалась выше — в пакетах есть файлы с
совпадающими именами. Самый распростанённый источник конфликтов —
программы, которые предоставляют разные реализации одной и той же
функциональности системы (например, службы доставки электронной почты или
печати, программы проверки орфографии, компиляторы и т. п.). Можно было бы,
конечно, просто назвать конфликтующие файлы по-разному, но и тогда
путаница неизбежна: если, допустим, старый компилятор Си называется
Каждый пакет помимо имени обозначен и номером версии, указывающим степень обновлённости содержащегося в пакете программного обеспечения и самого пакета. В системе одновременно может быть установлена только одна версия любого пакета, со всеми остальными версиями она конфликтует. Такой подход вполне понятен, поскольку файлы в пакете имеют строго определённый путь, по которому они должны быть размещены в файловой системе. Поэтому при использовании пакетов не должно (и не может) возникнуть ситуации, когда одна и та же программа установлена в разных местах файловой системы. Однако не все функции в системе должны эксклюзивно выполняться одной
программой. Например, в системе может быть установлено сколько угодно текстовых
редакторов, и даже несколько разных реализаций одного редактора, например, Vim
(Vi и nvi). Пакеты Vi и nvi не конфликтуют
друг с другом, однако оба могут с равным правом быть вызваны по команде
Установщики пакетовДля выполнения всех операций над пакетами требуется специальная программа — установщик пакетов. В её задачи входит весь цикл работ с пакетом: от создания пакета (компиляции исходного пакета в двоичный), до его установки, удаления, обновления, а также хранение и вывод по запросу пользователя или системы информации об установленных и неустановленных пакетах, принадлежащих им файлах и т. п. В системах Linux формат пакетов не унифицирован, распространено несолько
различных форматов, и для каждого из них требуется собственный установщик
пакетов. Наиболее известны уже описанный
В рамках этой лекции мы ограничимся обсуждением только одного из установщиков
пакетов — Обратной стороной популярности Случай Другая проблема установщиков пактов в том, что они годятся только для установки/удаления отдельных пакетов, но не предназначены для доставки пакетов в системы (пользователь сам должен найти и скачать нужный пакет, и указать местоположение файла пакета установщику в командной строке). Кроме того, установщик работает с каждым пакетом по отдельности: он может указать, что не удовлетворены некоторые зависимости, или имеют место конфликты, но не может в ходе процедуры установки ни установить все необходимые пакеты по цепочке зависимостей, ни удалить конфликтующие — пользователь должен делать это вручную. Установщики пакетов не предоставляют также никаких средств по автоматизации обновления системы. Менеджеры пакетовУстановщики пакетов делают атомарными (одношаговыми) операции с отдельными пакетами: вместо копирования множества файлов и запуска нескольких сценариев пользователь вводит одну команду «установить/удалить пакет». Однако атомарная с точки зрения пользователя операция — добавление в систему одного нового компонента может состоять из нескольких (и даже многих) операций над пакетами. Мефодий уже столкнулся с подобным случаем, изучая на собственном опыте понятие «цепочка зависимостей». Здесь установщики пакетов никак не могут облегчить работу пользователя. Чтобы сделать процедуру установки, удаления и обновления компонента системы атомарной, были разработаны менеджеры пакетов. Менеджер пакетов — это программа, которая вычисляет весь комплекс операций над отдельными пакетами, который нужно произвести для установки/удаления нового компонента (пакета), и сама запускает установщик пакетов сколько нужно раз с нужными параметрами. Кроме того, менеджер пакетов хранит информацию не только о пакетах, уже установленных в системе, но и обо всех, которые доступны для установки с какого-либо носителя или по Сети (подробнее об этом в разделе Package..Доставка).
Наиболее известный и популярный менеджер пакетов называется APT
(Advanced Package Tool).
Первоначально он был разработан в рамках дистрибутива Debian и работал только с
установщиком пакетов Чтобы установить пакет, прежде всего нужно узнать о его существовании.
Пакетов для каждого дистрибутива Linux доступны тысячи и даже десятки тысяч,
ориентироваться в них непросто. APT предоставляет возможность поиска нужного
среди доступных пакетов, для этого используется утилита
Для установки и удаления пакетов предназначена утилита
Процедуру установки APT выполняет в несколько этапов: сначала он ищет
запрошенный пакет в списках доступных, найдя, рассчитывает, какие пакеты следует
установить, чтобы удовлетворить его зависимости, после чего получает файлы всех
нужных пакетов (в данном случае APT нашёл нужные пакеты на диске CD-ROM), и
запускает установщик пакетов последовательно для установки всего необходимого.
Аналогично, чтобы удалить пакет, достаточно выполнить команду « Кроме APT, есть ещё несколько менеджеров пакетов. Большинство из них
специфичны для определённого дистрибутива, как, например, Контроль целостностиПоскольку менеджер пакетов умеет строить цепочки зависимостей пакетов друг от друга, с его помощью всегда можно определить, все ли зависимости удовлетворены у пакетов, установленных в системе. Система, в которой нет пакетов с неудовлетворёнными зависимостями, называется целостной. Если целостность нарушена, это означает, что часть установленного в системе программного обеспечения попросту неработоспособна или работает некорректно. Целостность системы может нарушиться в момент каких-то изменений в её составе: при установке, удалении или обновлении части пакетов или всей системы. Если для всех этих операций использовать менеджер пакетов, то целостность системы не должна нарушиться. Хотя иногда даже менеджеру пакетов бывает сложно найти правильное решение, чтобы удовлетворить все зависимости и устранить конфликты. При наличии менеджера пакетов механизм зависимостей можно обернуть и на
пользу человеку. Так, можно создать пакет, в котором есть только зависимости и
нет никаких ресурсов — такой пакет называется виртуальным.
Это бывает полезно в том случае, когда нужно упростить пользователю установку
полной среды для выполнения какой-либо задачи. Необходимые для этого пакеты
могут напрямую не зависеть друг от друга, но чтобы установить их все за один
шаг, пользователю будет достаточно установить один — виртуальный —
пакет. Таким виртуальным пакетом оказался сам пакет ДоставкаВажная задача, которую не решает установщик пакетов — доставка файла пакета в систему для последующей установки. Архивы пакетов обычно не хранятся в самой системе: они слишком велики (тысячи пакетов) и должны регулярно обновляться (выход обновлений программ, т. е. новых версий пакетов). Поэтому для установки обычно требуется сначала скопировать необходимые файлы с того носителя, где они хранятся (это либо установочные диски дистрибутива, либо хранилища в сети Интернет). Чтобы APT мог работать с пакетами, они должны содержаться в организованном по
специальным правилам хранилище — репозитории. Список
доступных APT репозиториев хранится в файле
После каждого изменения файла APT позволяет и просто доставить пакет в систему, не устанавливая его. Так,
например, всегда происходит с исходными пакетами, которые
просто копируются из репозитория в определённый каталог системы по команде
« ОбновлениеПрограммное обеспечение в мире Linux (и не только) постоянно обновляется: исправляются ошибки, расширяются возможности. Разработчики каждого дистрибутива по мере выхода новых версий программ готовят новые версии соответствующих пакетов и делают их доступными в своём репозитории (репозитории, отражающие наиболее современное состояние программного обеспечения, доступны через Интернет). Пользователю имеет смысл не отствавать от обновлений программного обеспечения, потому что новые версии программ — это и большая надёжность работы системы, и новые возможности. Менеджеры пакетов позволяют делать комплексные обновления
всей системы. В APT эту процедуру можно выполнить одной командой: « Цена удобстваУдобство менеджеров пакетов оплачивается тем, что они могут успешно работать только со специальными целостными областями источников (репозиториями пактов). Хотя для большинства пользователей это ограничение не так существенно: те дистрибутивы, в которых используются менеджеры пакетов, обычно имеют огромные репозитории пакетов, где можно найти любое мыслимое и немыслимое программное обеспечение. Если же нужной программы всё-таки нет в официальном репозитории дистрибутива, обычно находятся «частные» репозитории, доступные по сети Интернет, включающие не вошедшие в официальный репозиторий пакеты. Если всё-таки нужный вам пакет нигде не найти собранным именно для вашего дистрибутива, можно установить и сторонний пакет, но это может быть выполнено только при помощи установщика пакетов, менеджер пакетов в этой ситуации будет бесполезен. Можно установить программу и самостоятельно скомпилировав её из исходных кодов, однако здесь стоит иметь в виду следующее. Автор программы совершенно не обязан учитывать в ней все тонкости
всех дистрибутивов, поэтому возможны, с одной стороны, прямые конфликты с
файлами в системе (которые никто уже не отследит), а с другой стороны —
конфликты и противоречия скрытые (например, программа устанавливается в
подкаталог каталога Наконец, во многие современные дистрибутивы включаются средства, помогающие
сборке двоичных пакетов. Такие средства (например, пакет 1 2Что логично, поскольку в системе может быть установлена только одна версия данного пакета. См. подробнее раздел Package..Конфликты и альтернативы. 3Естественно, кроме тех файлов, которые созданы пользователями. 4Функции по созданию пакета в формате 5Слухи о том, что для сборки программы из исходных текстов не обязательно даже знать, что такое «компилятор», далеки от действительности. 6Для установки и удаления пакетов нужны права администратора — это серьёзные изменения в системе. 7Имеет смысл исключать из понятия зависимости использование
наиболее стандартных ресурсов, без которых немыслима система Linux как таковая.
К таким ресурсам можно отнести системные вызовы и некоторые
стандартные файлы, вроде |
||||||||||||
Новости сайта Антивирус |
Дизайн: Alex