Управление программным обеспечением linux

Управление пакетами в ОС Linuх

В далекие времена установка программного обеспечения под операционные системы семейства Линукс могла серьезно напугать начинающих пользователей этих ОС. Загрузка исходников, борьба с зависимостями, которая зачастую превращалась в нетривиальный квест, ручная правка конфигов и другие “прелести” установка приложений того времени сейчас покажутся глубоким анахронизмом.

Сейчас любой уважающий себя дистрибутив Линукс имеет в своем составе возможность установки программного обеспечения с помощью менеджеров пакетов.

Системы управления пакетами (которые также иногда «менеджер пакетов» или «пакетный менеджер») — это набор программного обеспечения, позволяющего управлять процессом установки, удаления, настройки и обновления различных компонентов ПО.

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

Какие пакеты бывают

Различные дистрибутивы ОС Linux имеют свои форматы пакетов. Вот основные форматы:

  • .deb – Debian и производные (Ubuntu, Mint и т.д.)
  • .rpm – Red Hat и производные (CentOS, Fedora и т.д.), OpenSUSE
  • .apk – Android
  • .ebuild – Gentoo

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

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

Из чего состоит пакет

Прежде, чем начать рассмотрение принципов работы с пакетами, поговорим о том, что содержат в себе пакеты. Пакет, как правило, содержит само приложение, в откомпилированном виде, то есть, по сути в виде бинарного файла.

Также в пакете указывается метаинформация, то есть информация о другой информации, используемая инструментами управления пакетами.

Метаинформация представляет собой составленное по определённым правилам описание, которое содержит имя пакета, номер версии и сборки, сведения о разработчике и его мастер-сайте, список файлов, их положение в файловой иерархии, список зависимостей. Также, здесь могу присутствовать установочные и настроечные сценарии, необходимые для развертывания приложения.

Помимо установочных сценариев, пакет также содержит набор действий, выполняемых после установки (например, пост-инсталляционную конфигурацию). Также пакет содержит сценарий, выполняемый в случае удаления пакета.

Посмотрим пример структуры пакетов для Debian. Зависимости определены в поле Dependents в заголовке пакета. Это список условий, которые должны быть выполнены для корректной работы пакета. Данная информация используется такими инструментами, как apt, для установки необходимых библиотек, утилит, драйверов и т.д. в соответствующих версиях, удовлетворяющих зависимостям устанавливаемого пакета. Для каждой зависимости можно ограничить диапазон версий, удовлетворяющих этому условию. Другими словами, если нам нужен пакет libc6 в версии, равной или превышающей “2.15” ( “libc6 (>= 2.15)”), то операторы сравнения версий следующие:

=: greater than or equal to; >>: greater than.

При этом, стоит отметить, что не все пакеты содержат программы, некоторые содержат шрифты, изображения, темы и т.д.

Читайте также:  Can you customise linux

Зависимости и конфликты

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

Здесь возможны различные варианты реагирования, в общем случае пакетный менеджер откажется устанавливать пакет, если он вызывает конфликт с уже установленным пакетом. Однако возможна ситуация, когда в новом пакете явно указано, что он “заменит” установленный пакет, и в этом случае менеджер предпочтет заменить старый пакет новым. А вот менеджер apt всегда следует вашим инструкциям: если вы решите установить новый пакет, он автоматически предложит удалить пакет, который создает проблему.

Также, в случае конфликта возможен следующий вариант реагирования: пакетный менеджер просигнализирует о том, что установка пакета “сломает” другой пакет (или определенные его версии) и далее уже пользователь должен решать, что делать в подобной ситуации. При этом различные менеджеры по-разному отреагируют на такую ситуацию. Так, dpkg откажется устанавливать пакет, который нарушает работу уже установленного пакета. А вот apt попытается решить проблему, обновив пакет, который был бы нарушен, до более новой версии (предполагается, что она исправлена и, таким образом, снова совместима).

Такого рода ситуация может возникнуть в случае обновлений без обратной совместимости: это тот случай, когда новая сигнализирует о том, что установка пакета “сломает” другой пакет (или определенные его версии).

Некоторые форматы пакетов можно конвертировать. Так, например пакеты .deb можно конвертировать в другие форматы с помощью утилиты alien. В качестве примера преобразуем deb пакет в rpm.

Для этого сначала установим утилиту alien:

sudo apt-get install alien

Далее выполним конвертацию пакета Teamviewer из deb в rpm. Общий формат работы с alien будет следующий:

Для нашего примера с teamviewer:

sudo alien —to-rpm teamviewer_amd64.deb

Основные операции с пакетами

Установка пакетов во всех менеджерах производится схожим образом. Необходимо сначала скачать пакет (.deb, .rpm . ), далее установить пакет вручную, используя команду данного дистрибутива (dpkg, rpm и т.д.). Например, для dpkg это будет dpkg –i firefox-19.0.deb, а для apt apt-get install firefox.

Читайте также:  Linux socks5 proxy client

При этом, все зависимости разрешаются и устанавливаются автоматически.

Обновление списков пакетов и самих пакетов для apt выполняется следующим образом:

Обновление репозитория. Загружает только список пакетов, а не сами пакеты.

Загрузка более новых версий локально установленных пакетов.

И для удаления пакетов в apt используется следующая команда:

apt-get remove [ —purge ] package

Если «—purge» указан, удаляет и конфигурационные файлы.

Где искать пакеты

Для поиска пакетов под различные дистрибутивы можно конечно воспользоваться поисковиками, но лучше использовать проверенные ресурсы, чтобы не столкнуться с сомнительным содержимым. Так, пакеты для Ubuntu можно поискать на следующем ресурсе:

А для RPM можно посмотреть здесь:

Заключение

В этой статье мы рассмотрели основные моменты, связанные с работой с различными пакетами и пакетными менеджерами. А про стандартные потоки ввода/вывода мои коллеги из OTUS расскажут на бесплатном уроке специализации Administrator Linux.

Источник

Альманах пакетных менеджеров Linux

Иногда может возникнуть вопрос: чьих этот файл, откуда вообще взялась эта библиотека? Удобный менеджер пакетов решает очень многие проблемы ОС. Можно с уверенностью сказать, что если вы подружитесь с МП, то подружитесь и с дистрибутивом как таковым. Причем важно освоить именно набор основных команд, и знать где найти дополнительную информацию.

Управление пакетами

Далее следует джентльменский набор необходимых для повседневной рутины команд основных Linux дистрибутивов: установить, обновить и удалить пакет, накатить обновления, проверить зависимости, установить принадлежность файла пакету и пр.

Debian и родственные

Популярность и образ дружественного к пользователю Linux дистрибутива сыграли с Ubuntu злую шутку. Некоторым новичкам кажется, что можно на нем делать все, что угодно без помощи командной строки. Это заблуждение и лучше от него поскорее избавиться.

То, что в примерах aptitude не значит, что он правильнее, чем apt-get . Для меня это всего лишь дело привычки.

$ aptitude install package #установить пакет; $ aptitude safe-upgrade package #обновить пакет; $ aptitude update #проверить и установить обновления; $ aptitude remove package #удалить пакет; $ aptitude purge package #удалить пакета с концами, все данные и настройки; $ apt-get dist-upgrade #обновить ОС, killer-feature и оно работает! $ aptitude search package #искать пакет. $ apt-cache depends package #зависимости пакета; $ apt-cache rdepends package #обратные зависимости от пакета.

Некоторые функции доступны с дополнительным МП dpkg .

$ dpkg -l #список установленных программ; $ dpkg -L package #список файлов пакета

Есть еще такое чудо — wajig. Несмотря на странное звучание, вполне годный МП с человеко-читабельным выводом информации на экран.

Настройка репозиториев производится правкой файла /etc/apt/sources.list

$ wajig install package $ wajig distupgrade #обновить ОС; $ wajig install --fileinput filename #установить пакеты списком; $ wajig listinstalled

В целом ПМ Debian один из лучших, с которыми мне доводилось иметь дело.

Redhat и другие RPM дистрибутивы

RPM нельзя назвать образцовым пакетным менеджером, скорее это был кактус, который мыши употребляли в пищу со слезами на глазах. Затем появились более или менее вменяемые МП: yum , dnf , zypper и другие. Только что на сервере RHEL 7.4 yum за раз обновил более 700 пакетов и ничего при этом не сломал, неплохой результат я считаю.

$ yum install package $ yum update package $ yum update $ yum remove package $ yum deplist package #зависимости пакета; $ dnf repoquery --deplist #то же самое, для Fedora $ yum whatprovides package #установить принадлежность файла какому-либо пакету; $ yum list all #список всех установленных программ

Команды rpm на те случаи, когда использовать yum не с руки.

$ rpm -i package #установить пакет; $ rpm -e packate #удалить пакет; $ rpm -qa #список установленных пакетов; $ rpm -qi package #вывод информации об установленном пакете; $ rpm -q --whatrequires package #обратные зависимости от пакета.

Чтобы настроить репозитории Yum , откройте файл /etc/yum.repos.d/*.repo , или используйте команду yum-config-manager .

Читайте также:  Linux несколько версий php

Zypper

На SuSE Linux используется Zypper / YaST для управления пакетами, движок ZYpp крутится поверх RPM.

$ zypper in mc #установить пакет, если его нет, а противном случае - обновить его; $ zypper up nginx openssh #обновить программу; $ zypper se gnome-desktop #найти программу; $ zypper remove package; $ zypper se --provides --match-exact hg #установить принадлежность файла какому-либо пакету; $ zypper se --requires package #обратные зависимости от пакета. 

Можно использовать операторы и регулярные выражения.

Управление репозиториями производится командой zypper mr .

$ zypper lr #список реп, укаханы номера репозиториев; $ zypper mr -d 5 #выключить 5-у репу; $ zypper mr -e 5 #включить 5-у репу.

Pacman

Этот МП используется в Арче и Manjaro.

$ pacman -S package #установить пакет; $ pacman -R package #удалить пакет; $ pacman -Su package #обновить пакет; $ pacman -Q1 package #список файлов пакета; $ pacman -Qo filename #установить принадлежность файла какому-либо пакету; $ whoneeds package #обратные зависимости от пакета; $ pacman -Qdt #список пакетов-сирот, без обратных зависимостей.

Движок поиска в базе данных поддерживает регулярные выражения.

$ pacman -Ss package #простой полнотекстовый поиск; $ pacman -Ss '^vim-' #поиск с регулярными выражениями; $ pacman -Qs package #поиск среди установленных пакетов;

Настройка репозиториев и зеркал производится из файла /etc/pacman.conf

Gentoo emerge

Конечно же это скорее умозрительный сценарий, чем реальный, так как сложно предположить, что красноглазый пользователь Gentoo Linux не знает необходимых опций emerge . Тем не менее, без этого альманах был бы неполным.

$ emerge package #установить пакет; $ emerge -av package # интерактивный режим установки пакета; $ emerge -pv package # показать сценарий установки пакета; $ emerge -u package # обновить пакет; $ emerge -C package # удалить пакет; $ emerge -auDv world # обновить все программы с учетом зависимостей; $ emerge -auDNv word # обновить все программы с учетом зависимостей и новых USE опций.

С дополнительными утилитами можно получить больше информации о файлах, ненужных пакетах и т. д.

$ revdep-rebuild #проверить и восстановить неудовлетворенные зависимости; $ eix package #искать пакет; $ equery belongs package #установить принадлежность файла какому-либо пакету; $ equery depends package #обратные зависимости от пакета; $ equery uses package #USE флаги пакета; $ qlop -l #история операций emerge;

Репозитории, зеркала и все самое важное для emerge / portage содержится в /etc/make.conf .

Материалы по теме

Источник

Оцените статью
Adblock
detector