В операционных системах(ОС) UNIX и Linux под установкой программного обеспечения (ПО) следует понимать процедуру распространения пакетов. В данном случае пакет — это универсальный контейнер, содержащий не только само ПО, но также и соответствующие конфигурационные файлы, информацию о зависимостях распространяемого ПО, методах его распространения в системе и способы задания конфигураций. В отличие от неструктурированных архивных файлов (.tar.gz), пакеты обладают строго организованной структурой, взаимодействие с которой подчиняется определённым методам, изначально заложенным в Системы Управления Пакетами(СУП). Благодаря такой схеме, очень удобно распространять (устанавливать) не только ПО, но и административную информацию (конфигурацию), причём безболезненно, поскольку специализированные СУП «знают», как устроена структура системы и не переписывают конфигурацию, ранее заданную пользователем. В случае конфликтов предлагается просто сделать резервные копии существующих файлов конфигурации или конкретный вариант для их модификации по согласованию с пользователем или администратором системы. Очень важно, то, что СУП самостоятельно отслеживают и распознают зависимости пакетов, используя также для этого соответствующую информацию из самих приложений. В составе приложений также могут быть и целые служебные сценарии для их дополнительной обработки и настройки. Благодаря этому установка (или удаление) происходит как единая транзакция, полностью освобождая пользователей от выполнения рутины по поиску и установке зависимостей, распаковке файлов по требуемым каталогам и т. д.
Управление пакетами в Linux
Для операционной системы (ОС) Linux существует два основных типа пакетов: RPM (Red Hat Package Manager) и Debian. Первый, как можно видеть, изначально появился в дистрибутивах семейства Red Hat, но позже стал применяться и в других системах (SUSE, ROSA), второй был разработан для одноимённого дистрибутива и позже унаследован семейством ОС Ubuntu, созданных изначально на основе Debian. Средства упаковки пакетов RPM и Debian реализуются соответствующими СУП. Объединяет их то, что эти системы включают в себя два функциональных уровня — первый обеспечивает опрос требуемых пакетов, а также непосредственно их установку/обновление и удаление. На этом уровне используются команды rpm – для RPM-пакетов, и dpkg – для Debian (.deb). Второй уровень выполняет поиск программ в удалённых хранилищах, анализирует зависимости, обеспечивает корректное обновление и модернизацию самих программ и конфигурации, поскольку располагает информацией о структуре системы. Основными системами управления пакетами являются RPM и APT (Advanced Package Tool), которая изначально создавалась для управления приложениями Debian, но позже была доработана для работы в RPM-ориентированных ОС.
Установка RPM-пакетов
Для управления пакетами формата RPM в Linux используется соответствующая команда — rpm. Она производит установку, удаление, а также опрос состояния программ. Требуемый функционал этой команды определяется специальными опциями. Например, самыми распространёнными являются: -i – установка, -e – удаление, -U – обновление и -q – запрос. Если с первыми тремя опциями всё довольно просто, то последняя, т. е. -q очень часто используется совместно с другими опциями, т. е. она служит для включения опций конкретных запросов, например, команда:
$ rpm -qa
выводит список всех программ, установленных в ОС. Для установки приложения нужно выполнить команду следующего вида:
$ rpm -i apache2.rpm
В результате будет произведена установка веб-сервера «Апач», т. к. это в данном случае предписывает опция -i. Сам же файл программы должен быть предварительно загружен или иным способом помещён в файловую систему. Бывает и так, что при работе с приложениями возникают сложности — чаще всего с зависимостями, например:
$ sudo rpm -U openssh-2.9p2-12.i386.rpm error: failed dependencies: openssh = 2.9p2-7 is needed by openssh-askpass-2.9p2-7 openssh = 2.9p2-7 is needed by openssh-askpass-gnome-2.9p2-7 openssh = 2.9p2-7 is needed by openssh-clients-2.9p2-7 openssh = 2.9p2-7 is needed by openssh-server-2.9p2-7
Этот вывод означает, что при попытке обновить приложение openSSH будут затронуты другие, зависящие от него программы. Это помогает сориентироваться, в том, что ещё нужно сделать для выполнения успешного обновления приложения openSSH, т. е. удовлетворить зависимости. Следует обратить особое внимание на то, что опция —force, для принудительной установки/обновления здесь не помощник — запросто можно сломать приложение. Для того, чтобы заранее узнать, какие зависимости имеются у требуемого приложения, нужно выполнить команду следующего вида:
$ rpm -q --whatrequires openssh openssh-askpass-2.9p2-7 openssh-askpass-gnome-2.9p2-7 openssh-clients-2.9p2-7 openssh-server-2.9p2-7
Как видно, опция включения запроса -q предписывает выполнить сам запрос с требованием —whatrequires для фразы «openssh», т. е. «определить зависимости приложения openssh», и далее следует логичный вывод. Используя информацию из этого вывода можно скачать файлы нужных зависимостей и установить или обновить их последовательно, используя соответствующие ключи. Для удобства достаточно эти зависимости указать списком:
$ sudo rpm -U openssh-*
Для проверки результата нужно воспользоваться опцией запроса:
$ rpm -q openssh openssh-2.9p2-12
Этот вывод означает, что в ОС корректно установлен (в результате предыдущих действий) openSSH. Нужно заметить, что для команды необязательно указывать точное название программы и версий — она правильно распознаёт их и при сокращённой записи их наименований.
Установка программ в Debian
Аналогом команды rpm для работы с Debian-пакетами является команда dpkg. Режимы её работы указываются аналогично команде rpm – с помощью соответствующих опций. Опция -l позволяет получить список установленных в ОС программ, -i – установить или обновить, -r – произвести удаление. Основным отличием команды dpkg от rpm является то, что она позволяет использовать утилиту grep для опрашивания/поиска программ, а также отображает в выводе список выполняемых действий. Например:
$ dpkg -l|grep -i nano ii nano 2.4.2-1ubuntu0.1 amd64 small, friendli text editorinspired by Pico
Как можно видеть, команда отобразила список установленных приложений (в данном случае в ОС всего один) текстового редактора nano. Для установки/обновления того же nano следует выполнить команду через терминал:
$ dpkg -i nano2.4.-ubuntu0.1.deb
В процессе установки будет выводиться подробный лог, содержащий последовательность действий для данной установки/обновления. Для того, чтобы проверить информацию о конкретно установленной программе можно воспользоваться опцией -l, которая поддерживает работу с текстовыми шаблонами, например:
$ dpkg -l nano Желаемый=неизвестно[u]/установить[i]/удалить[r]/вычистить[p]/зафиксировать[h] | Состояние=не[n]/установлен[i]/настроен[c]/распакован[U]/частично настроен[F]/ частично установлен[H]/trig-aWait/Trig-pend |/ Ошибка?=(нет)/требуется переустановка[R] (верхний регистр в полях состояния и ошибки указывает на ненормальную ситуацию) ||/ Имя Версия Архитектура Описание +++-==============-============-============-==================== ii nano 2.4.2-1ubunt amd64 small, friendly text editor inspired by Pico
Системы управления пакетами (СУП)
Для облегчения поиска, загрузки программ, отслеживания зависимостей, а также для автоматизации обновлений приложений существуют соответствующие системы управления пакетами (СУП). Самыми распространёнными являются APT и yum. К слову сказать, yum – это ничто иное как та же самая APT, доработанная для работы с rpm-пакетами. Для хранения приложений существуют специальные хранилища — репозитории, в которых производится поиск и из которых загружаются для установки новые приложений. Репозитории организуют и поддерживают разработчики дистрибутивов, но при желании можно создать собственный, локальный по отношению к конкретной системе репозиторий. Поскольку система управления пакетами APT является универсальной, хорошо документированной (а ещё и бесплатной), то разумно рассмотреть работу подобных систем на примере APT. Эта СУП реализована в виде утилиты apt-get, с помощью которой удобно управлять всей системой. Важное значение для APT (как и для других подобных СУП) является файл с описанием источников хранилищ, т. е. репозиториев. Для APT это файл /etc/apt/sources.list. Если этот файл настроен и содержит верную информацию об источниках, то нужно перед каждыми обновлениями или установками приложений выполнять команду:
$ apt-get update
или в CentOS Red Hat
$ yum update
для обновления информации о пакетах. После чего можно проводить установку/обновление:
$ apt-get install имя пакета
или
$ yum install имя пакета
Эта команда автоматически найдет приложение (если он верно указан) в репозитории, проанализирует его зависимости, загрузит их и установит сам пакет и все требуемые, с учётом иерархии зависимости.
Например для установки редактора mc введите команду
$ apt-get install mc
или в RedHat CentOS
$ yum install mc
Следующая команда:
$ apt-get remove имя
произведёт удаление программы из ОС, причём зависимости могут быть оставлены. Для очистки ОС от всех неиспользуемых зависимостей следует выполнять последовательность следующих команд:
$ apt-get clean $ apt-get autoclean $ apt-get autoremove