Для полноценной регистрации пакета в системе обычно недостаточно, чтобы система хранила список файлов, принадлежащих пакету. При установке, удалении или обновлении пакета часто требуется выполнить ряд операций, чтобы обновить сведения о пакете, адаптировать настройки – как самого пакета к уже имеющимся в системе, так и наоборот. К тому же некоторые изменения в системе, например, добавление и удаление псевдопользователя, не сводятся к добавлению и удалению файлов, и вдобавок зависят от текущего состояния системы. Получается, что регистрация в системе – дело не только системы, но и самого пакета. Поэтому в каждом пакете должны храниться сведения о том, какие действия следует выполнять в ходе различных операций с ним – в этом состоит третья задача пакетирования.
Списки необходимых действий представлены в пакете в виде сценариев. Эти сценарии привязаны к процедурам установки и удаления пакета, причем могут быть вызваны по необходимости как до, так и после соответствующей процедуры. В результате процедуры установки и удаления пакета выглядят так:
· выполнение предшествующих установке/удалению сценариев;
· копирование файлов из архива в систему или удаление файлов из системы;
· выполнение следующих за установкой/удалением сценариев.
Нужно принимать во внимание, что любой пакет, содержащий программное обеспечение для Linux, не является универсальным. Если у вас есть такой пакет, это еще не означает, что его можно установить в вашей системе. Дело в том, что разные дистрибутивы Linux различаются именно тем, каким образом программное обеспечение организовано в систему. Дистрибутивы могут различаться размещением файлов и процедурами, предусмотренными для интеграции в систему программного обеспечения, не говоря уже о том, что в разных дистрибутивах используется разный формат пакетов. Это значит, что пакет, подготовленный в расчете на один дистрибутив, может оказаться несовместимым с другим. Чтобы в вашем дистрибутиве появилась некоторая программа, кто-то должен подготовить и сделать доступным соответствующий пакет.
Пакет. Ресурсы, необходимые для установки и интеграции в систему некоторого компонента (архив файлов, до- и послеустановочные сценарии, информация о пакете и его сопровождающем), объединенные в одном файле.
Несмотря на некоторые различия, дистрибутивы Linux представляют собой варианты одной и той же системы, поэтому в конечном итоге любую программу, работающую в одном дистрибутиве, можно "приспособить" к любому другому. Только для этого нужно располагать исходными текстами соответствующей программы. До сих пор речь шла только о так называемых двоичных пакетах, в которых программы содержатся в виде уже скомпилированных двоичных (исполняемых) файлов, в таком виде программа может зависеть от некоторых свойств системы и работать не везде. Чтобы получить работающую программу в системе, нужно установить именно двоичный пакет. Пакет, впрочем, может содержать и исходные тексты программ, такие пакеты называются исходными. Доступность исходных кодов – обязательное условие распространения большей части программного обеспечения для Linux. Если получилось так, что никто не подготовил пакет с нужной вам программой для вашего дистрибутива, можно установить исходный пакет и скомпилировать программу самостоятельно. При успешной компиляции из исходного пакета получается соответствующий двоичный, который уже можно установить в системе.
Зависимости
Пакеты – не всегда (точнее, почти никогда) бывают независимы от имеющейся системы. Для работы программы нужны различные ресурсы, причем несколько программ могут нуждаться в одном и том же ресурсе. В последнем случае общий ресурс может оказаться в отдельном собственном пакете (чтобы не включать его сразу в несколько), и этот пакет должен быть установлен в системе, чтобы заработали нуждающиеся в нем программы.
Допустим у вас есть пакет xxxx, зависящий от пакета yyyy. При попытке поставить xxxx система проверит, стоит ли в ней уже yyyy. Если да, то пакет будет поставлен без всяких вопросов. Если же нет, то Ubuntu обратится к репозиторию, скачает с него пакет yyyy, затем поставит сначала его и только потом xxxx. Всё это происходит в автоматическом режиме и не требует участия пользователя.
На всякий случай скажу, что абсолютно все компоненты системы входят в состав какого-нибудь пакета. Т.е. вся система как бы собрана из кирпичиков - deb-пакетов. Любой системный файл относится к какому-нибудь пакету и вообще весь учёт файлов программ происходит в автоматическом режиме в рамках программы управления пакетами. Поэтому пользователю даже не надо указывать место для установки новой программы, всё это записано внутри пакета и не подлежит изменению5). Удаление так же происходит в автоматическом режиме.
Потребность пакета в ресурсах, находящихся в другом пакете, называют зависимостью этого пакета от другого. В процедуре установки rpm проверяет,все ли зависимости устанавливаемого пакета удовлетворены (т. е. все ли необходимые пакеты уже установлены в системе), и если чего-то не хватает – прекращает установку.






