Урок #28. Пакеты, репозитории и другие термины

Я решил сделать теоретическое отступление и объяснить некоторые термины, которые можно встретить довольно часто при поиске информации по работе с семейством операционных систем Линукс.

Итак, все операционные системы семейства Linux организованы по пакетному принципу. Это означает что каждый пакет представляет собой некоторую завершенную часть программы и совокупность пакетов представляет собой операционную систему или дополнительное приложение. То есть как операционную систему Линукс, так и программы, предназначенные для работы в этой операционной системе, можно разделить на отдельные составные части — пакеты.

Термин «пакет» может иметь два смысла. Во-первых, пакетом могут называть набор исходных текстов программы, который создали разработчики. То есть это сам код программы, написанный на некотором языке программирования и такие тексты называют исходниками. Но для того чтобы программа заработала ее нужно скомпилировать, то есть превратить исходный текст в исполняемый файл (файлы). Такие пакеты называют бинарниками и этот термин можно услышать тоже очень частот. Работая с Линукс мы будем иметь дело именно с такими пакетами.

Бинарные пакет могут иметь разные форматы и могут отличаться для разных дистрибутивов Linux. В Linux Mint используется формат deb и пакеты, предназначенные для Linux Mint в большинстве случаев совместимы с пакетами дистрибутивов Ubuntu и Debian.

Дистрибутив операционной системы Linux или какой-либо программы представляет собой комплект скомпелированных из исходников исполняемых и всех дополнительных файлов, собранных по определенным принципам. Этот процесс сборки пакетов логично называется «сборкой» или от английского «майнтейном», а людей, которые это делают называют, соответственно, майнтайнерами.

Дополнительный файлы или пакеты, необходимые для работы основного пакета, называют зависимостями. Объяснить это важное понятие можно так. Поскольку лицензия использования Linux подразумевает открытость исходных кодов, то при написании программы разработчик опирается на функционал созданного ранее другим разработчиком пакета. В результате для работы вновь созданного пакета, требуется наличие пакета другого разработчика (или созданного ранее пакета). В свою очередь второй пакет для своей работы может требовать наличие еще каких-то пакетов, и так далее.

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

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

Библиотеки для нас, как для обычных пользователей, не представляют никакого интереса. Зато они очень сильно помогают разработчикам программ. Дело в том, что есть масса стандартных, типовых действий, которые свойственны всем или большинству программ. Например, открытие/закрытие файла, его сохранение, отрисовка окна программы и его графических элементов и так далее… Эти действия и элементы в плане программирования ничем не отличаются и нет смысла их создавать каждый раз для каждой отдельной программы. Все эти участки программного кода вынесены в специальные программные модули, которые и называются библиотеками. Именно это позволяет программистам не дублировать одно и то же в своих программах, а пользоваться одной единственной библиотекой на всех. Достаточно чтобы такая библиотека была установлена в системе и все программы для своей работы будут использовать ее.

Пакеты могут быть созданы под конкретный дистрибутив Линукс, а значит будут отличаться и могут не работать в других дистрибутивах или работать с ошибками.

Для хранения пакетов существуют специальные хранилища — репозитории. Репозитории, как я уже упоминал в одном из предыдущих видео, ориентированы на конкретные дистрибутивы, а для некоторых дистрибутивов Линукс можно использовать репозитории других дистрибутивов, так как пакеты этих дистрибутивов совместимы. Так, например, обстоит дело в случае с Linux Mint и Ubuntu.

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

Если нам нужна какая-либо программа, то мы можем обратиться к репозиторию и установить ее. Подобные действия выполняют специальные утилиты и работа с ними осуществляется с помощью специальных команд через командную строку (терминал) и об этом речь пойдет в одном из следующих видео. Но все же далеко не для всех удобен принцип работы с операционной системой посредством команд, я бы даже сказал, что для обычных рядовых пользователей это очень неудобный способ взаимодействия с операционной системой и он вызывает множество проблем. Именно поэтому на базе таких утилит появились программы, имеющие графический интерфейс и позволяющие работать с пакетами визуально, с помощью мыши и кнопок в привычном графическом режиме.

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

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