Пакет, как правило, содержит программу и вспомогательные файлы. Но не всегда в пакете находится все необходимое для запуска программы. Пакет может не содержать библиотеку, которую использует программа, а также другие программы, которые нужны для работы устанавливаемой программы. Почему так происходит? Представим, что у нас есть графическая библиотека размером 10 Мбайт. Размер устанавливаемой программы — 500 Кбайт. Да, можно было бы включить библиотеку в состав пакета, но тогда размер пакета был бы не 500 Кбайт, а 10,5 Мбайт. При этом есть и другие программы, которые также используют данную библиотеку. Выходит, что каждый пакет с такой программой «весил» бы на 10 Мбайт больше только потому, что библиотека содержится в пакете. Это нерационально — логичнее вынести библиотеку в отдельный пакет.
Ясно, что пакет с библиотекой должен быть установлен до установки первой программы, которая использует эту библиотеку, иначе программа просто не будет работать. Чтобы пользователь случайно не установил пакет с программой раньше пакета с библиотекой (ведь пользователь может и не подозревать, что программа требует какую-то библиотеку, которая не установлена на его компьютере), в пакет помещается специальная инструкция, в которой системе говорится, что для правильной работы данной программы нужен определенный пакет. Это называется
Зависимости могут быть и обратного характера, т. е. требовать не установить, а удалить определенный пакет. Это случается, когда одна программа конфликтует с другой, и пользователю нужно выбрать, какую программу использовать. Например, в системе может быть установлен только один почтовый сервер. Но в Интернете можно найти несколько почтовых серверов, а вот установить только один — поскольку если установить оба, то они будут мешать друг другу работать.
Но пакет пакету рознь. Сейчас в мире Linux существуют два основных формата пакетов: RPM и DEB. RPM-пакеты устанавливаются в системах, совместимых с дистрибутивами типа Red Hat. Ubuntu к числу таких систем не относится. Поэтому нас интересует только второй формат пакетов. Впрочем, если вы не можете найти DEB-пакет с нужной вам программой, имеется возможность преобразовать RPM-пакет в DEB-пакет и попытаться его установить
9.1.2. Архивы
В архиве программы распространяются редко, но иногда такое случается. Может быть, разработчикам программы было лень собирать пакет, может, была и какая-нибудь другая причина. Но в большинстве случаев в архивах распространяется исходный код программы, следовательно, после распаковки архива программу требуется откомпилировать. У вас, как у начинающего пользователя Ubuntu, такой необходимости не будет — практически все программное обеспечение для Ubuntu распространяется в виде DEB-пакетов, т. е. не нуждается в компиляции.
9.2. Программа
Программа
dpkg
Для запуска
Предположим, у нас есть пакет package.deb. Для его установки откройте терминал (Приложения | Стандартные | Терминал) и введите команду:
sudo dpkg — i /
Как видите, ничего сложного тут нет. Интересующимся поясню, что процесс установки пакета состоит из следующих шагов:
1. Извлечение управляющих файлов из пакета.
2. Если уже была установлена старая версия этого пакета, тогда из старого пакета запускается сценарий prerm, который подготавливает систему к удалению старой версии пакета. Другими словами, если нужно, то обновление пакета выполняется автоматически.
3. Выполняется сценарий preinst, если он есть в данном пакете.
4. Распаковываются остальные файлы из пакета. При этом если был установлен старый пакет, то его файлы не удаляются, а сохраняются в другом месте, чтобы их можно было восстановить, если что-то пойдет не так.
5. Если была установлена старая версия пакета, то выполняется сценарий postrm (действия после удаления) из старого пакета. Данный сценарий запускается сразу после выполнения сценария preinst нового пакета, поскольку старые файлы удаляются во время записи новых файлов.
6. Выполняется настройка пакета:
• распаковываются новые конфигурационные файлы, а старые сохраняются, если нужно будет их восстановить в случае ошибки во время установки нового пакета;
• запускается сценарий postinst, если он есть в данном пакете.
Удалить пакет тоже просто:
sudo dpkg — r package