Что такое зависимости в Linux

Что такое зависимости в Linux

Современные дистрибутивы Linux (да и все представили семейства операционных систем UNIX) — это модульные системы. Они состоят из множества программ, которые взаимодействуют между собой. Разделяемые библиотеки, в свою очередь, используются множеством программ. Данная идеология означает, что один некоторые компоненты системы не могут работать без наличия других компонентов — например, программам графической среды GNOME требуются библиотеки тулкита GTK, компонентам KDE нужна библиотека Qt и так далее.

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

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

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

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

21.1. Менеджер пакетов RPM

В большинстве инсталляций современных популярных дистрибутивов Linux в качестве менеджера пакетов используется разработка фирмы RedHat, программа rpm . Ее главными возможностями являются установка, обновление и удаление пакетов с соблюдением зависимостей, верификация пакетов и предоставление информации о пакетах и файлах, входящих в состав пакетов. Для своей работы rpm использует собственную базу данных, расположенную обычно в каталоге /var/db/rpm . Более подробную информацию можно узнать в справочной системе, воспользовавшись командой man rpm.

Нет особого смысла в том, чтобы рассказывать о базовом функционале rpm, поскольку он подробно описан в документации, и просто кратко пробежимся по ним, и более подробно рассмотрим лишь некоторые редко используемые, но часто необходимые его возможности:

Данные вызовы иллюстрируют примеры установки, обновления или удаления пакета. Следует помнить, что при установке или обновлении пакета надо указывать имя файла, а при удалении пакета — только имя пакета. Устанавливать и удалять можно и по несколько пакетов сразу, при этом достаточно перечислить в командной строке несколько файлов или пакетов.

Ключ -i означает установку пакета.

Ключ -U означает установки или обновление пакета, то есть если в системе уже установлен этот же пакет, но более старой версии, то будет выполнено обновление. Если пакет не был установлен — то он будет установлен.

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

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

В качестве имени файла можно также использовать и ссылку:

21.2. Конфликты зависимостей

Рассмотрим пример следующей команды:

В данном случае мы попытались удалить пакет, который используется другими пакетами, и rpm в после проверки отказался удалять пакет exiv2-libs. Аналогичное сообщение можно увидеть, если устанавливать пакет, для работы которого нужен какой-либо другой пакет, не установленный в системе.

Чтобы деинсталировать пакет, в нашем примере, есть два пути: деинсталировать его принудительно, или деинсталировать также те пакеты, которые ссылаются на пакет exiv2-libs:

В данном примере было произведено удаление пакета exiv2-libs и тех пакетов, от которых он зависит, причем удалось это только со второй попытки. Аналогичная ситуация возникает и в случае установки пакета:

В этом примере при попытке установить пакет exiv2 утилита rpm сообщила, что ей нужен пакет exiv2-libs, и со второй попытки была произведена удачная установка пакета exiv2 и пакета exiv2-libs, нужного для его работы. Иногда встречаются ситуации, когда два пакета ссылаются друг на друга. Решается эта проблема аналогично — при вызове rpm достаточно просто указать одновременно оба пакета.

21.3. Дополнительные возможности rpm

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

Данный пример иллюстрирует проверку пакета httpd. В выводе команды rpm сообщается, что на компьютере где была вызвана эта команда изменялся только один файл из состава пакета httpd, и этот файл отличается от исходной версии по трем критериям — размеру (S), контрольной сумме (5) и времени модификации (T). Соответственно, при миграции или обновлении сервера следует сохранить резервную копию этого файла.

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

Менеджеры пакетов в системах linux

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

Что такое зависимости пакетов

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

Система пакетов

Практически любой софт устанавливаемый в современную linux систему можно найти в Интернете. Он может быть предоставлен разработчиками конкретного дистрибутива через официальные репозитарии (хранилища программного обеспечения, которые могут содержать тысячи пакетов, каждый из которых был скомпилирован, протестирован и поддерживается для распространения и использования в данном дистрибутиве linux) или доступен в виде исходного кода, который можно загрузить и установить вручную. Поскольку разные семейства дистрибутивов linux используют разные системы упаковки (Debian — пакеты в формате deb, CentOSrpm формат, openSUSE — тоже rpm но созданный специально для openSUSE), пакет, предназначенный для одного дистрибутива, не будет совместим с другим дистрибутивом. Большинство дистрибутивов linux входят в одно из трех основных семейств linux, включенных в сертификацию LFCS.

Высоко- и низкоуровневые инструменты управления пакетами.

  • Debian, Ubuntu и подобные — менеджер пакетов dpkg
  • CentOS — менеджер пакетов rpm
  • OpenSUSE — менеджер пакетов rpm (opensuse)
  • Debian, Ubuntu и подобные — apt-get/aptitude
  • CentOS — менеджер пакетов yum
  • OpenSUSE — менеджер пакетов zipper

Apt-get — высокоуровневый пакетный менеджер в Debian linux и производных дистрибутивах. Apt-get представляет из себя простой способ получения и установки необходимых пакетов из различных источников, с разрешением зависимостей, через командную строку. В отличии от dpkg, apt-get не работает напрямую с .deb файлами пакетов, только пакетом по его имени.

Aptitude, это еще один высокоуровневый инструмент управления пакетами в debian-подобных операционных системах и может быть использован для управления пакетами (установка, обновление и удаление пакетов с автоматическим разрешениме зависимостей), быстрым и простым способом. Он обеспечивает те же функциональные возможности что и apt-get, плюс некоторые расширенные, такие как доступ к нескольким версиям пакета. Rpm — система управления пакетами, используемая Linux Standard Base (LSB) — совместимыми дистрибутивами для низкоуровневой обработки пакетов. Как и dpkg, он может запрашивать, устанавливать, проверять, обновлять и удалять пакеты, чаще используется в дистрибутивах на базе Fedora, таких как RHEL и CentOS.

Yum — высокоуровневый инструмент для работы с пакетами (установка, удаление, обновление), с управлением зависимостями в системах на основе RPM пакетов. Yum как apt-get и aptitude, работает с репозитариями

Распространенные задачи низкоуровневых инструментов.

1. Установка пакета из скомпилированного *.deb или *.rpm файла.

Минус подобной установки, это невозможность разрешения зависимостей пакета. Вероятней всего вы будете использовать данный способ установки, если в репозитариях соответствующее ПО отсутствует и не может быть установлено с помощью инструментов высокого уровня. В данном случае, пакет не сможет скачать и установить зависимости, если они ему потребуются, и установка будет прервана ошибкой. Не пытайтесь устанавливать в CentOS, rpm пакет, скомпилированный для OpenSUSE, и наоборот.

2. Обновление пакета из скомпилированного файла.
3. Список установленных пакетов

Если в ваше распоряжение попала уже работающая система, будет не лишним узнать, что на ней установлено: Если вам нужно узнать, установлен-ли какой-то конкретный пакет, можно воспользоваться командой grep. перенаправив на нее вывод менеджера пакетов: Еще один способ получить аналогичный результат: 4. Какому пакету принадлежит файл.

Распространенные задачи высокоуровневых инструментов

1. Поиск пакетов

если yum получает ключ search all, поиск производится не только по имени пакета но и по описанию Каким пакетом установлен файл

2. Установка пакета из репозитария

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

3. Удаление пакетов

Если aptitude указан ключ remove, пакет будет удален, за исключением конфигурационных файлов. Что-бы удалить все следы установки пакета, нужно использовать ключ purge. В OpenSUSE обратите внимание на знак «минус» перед именем пакета. Практически любой менеджер пакетов потребует подтвердить удаление пакета.

Понятие дистрибутива ОС

Слово «дистрибутив» является калькой с английского «distribution», которым описывается набор совместимого программного обеспечения. Совместимость может быть реализована как на уровне исходных кодов, так и на уровне бинарных кодов.

Примерами дистрибутивов могут служить:

  • Windows 10 1809
  • macOS 10.15

Дистрибутивы исторически появились для решения задачи поставки данных до конечных пользователей

  • Пользователь дистрибутива получает ПО в бинарном формате
    • Пользователю нет необходимости скачивать исходный код приложения
    • Пользователю не надо разбираться в системе сборке пакетов: со временем увеличивается число языков и систем сборок

    Дистрибутивы позволяют получить быстро доступ к ПО унифицированным способом

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

    Дистрибутив Дата выпуска Окончание поддержки
    Debian 9 (Stretch) 17 июня 2017 18 июля 2020
    Debian 10 (Buster) 6 июля 2019 2022

    Пакетные менеджеры

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

    Аналогом пакетного менеджера в Linux можно назвать:

    • Магазины приложений (вместе со списком приложений) на Android и iOS
    • Магазины игр Steam, GoG и т.д.
    • Менеджеры пакетов языков программирования PyPI, Rubygems, Maven

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

    Пакетный менеджер Дистрибутивы Linux
    Debian (.deb) Debian, Ubuntu, Linux Mint, Raspbian, Astra Linux
    Red Hat (.rpm) Fedora, CentOS, Red Hat Enterprise Linux, openSUSE

    Пакетные файлы, пакеты

    Базовой единицей распространения ПО в дистрибутиве является пакетный файл

    • Пакетный файл является архивом из файлов
      • Большая часть из них — это файлы для установки в файловую систему
      • Оставшиеся — это различные скрипты, выполняющиеся на различных этапах установки пакета: до установки, в разные моменты установки, после установки

      Пакетный файл обычно создаётся с помощью автоматизированной системы сборки пакетов, настройкой которой для каждого отдельного пакета занимается мейнтейнер (от английского maintain — поддерживать)

      • Исходный код для пакета берётся от производителя приложения
      • Мейнтейнер создаёт конфигурацию пакета для сборочной системы, локально собирает пакеты, модифицирует исходный код
      • Загружает конфигурацию в центральное хранилище производителя дистрибутива

      Репозитории

      Пакеты могут быть созданы также разработчиками ПО

      • Пользователи могут скачать пакет с сайта разработчика и установить его, если он совместим с установленным дистрибутивом
      • При выходе новой версии ПО пользователю необходимо будет опять скачать и поставить приложение

      Репозиторий представляет собой хранилище пакетов для дистрибутива

      • Производители дистрибутивов предоставляют для каждого дистрибутива свои репозитории, которые включают тысячи собранных пакетов
      • Производители ПО могут предоставлять свои репозитории с новыми версиями
      • Пакетный менеджер может работать со множеством репозиториев одновременно
      • Пакетный менеджер может обновлять пакеты, если в репозитории появились более свежие версии
      • Официальные репозитории могут содержать подразделы:
        • Ввиду патентных ограничений
        • Ввиду ограничений на лицензию ПО

        Зависимости пакетов

        Для работы приложения зачастую недостаточно только одного исполняемого файла, нужны также библиотеки, интерпретаторы, возможно другие исполняемые файлы

        • Эти зависимости могут быть у множества других приложений
        • У библиотек могут быть найдены ошибки, связанные с безопасностью
        • Библиотеки в дистрибутивах Linux обычно являются общими между множеством исполняемых файлов
        • Библиотеки поставляются в отдельных пакетах
        • В пакете приложения пакет библиотеки указывается в списке зависимых пакетов
        • При установке пакета будут установлены все его зависимости, и зависимости зависимых пакетов, и …

        Инструменты пакетных менеджеров

        Пакетные менеджеры обычно включают в себя инструменты

        • Низкого уровня, в задачу которых входит установка и удаление конкретных пакетов на локальный компьютер
        • Высокого уровня, в задачу которых входит работа с репозиторием, решение задачи разрешения зависимостей

        Инструменты различных дистрибутивов

        Дистрибутив Низкоуровневый инструмент Высокоуровневый инструмент
        Debian производные, Astra dpkg apt, apt-get, aptitude
        Fedora, RHEL, CentOS rpm yum, dnf, zypper
        Alt Linux rmp apt-get, aptitude

        Поиск пакета в репозитории

        Обновление кеша

        В Debian поиск пакетов в репозитории всегда происходит по локальному кешу

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

        Для обновления кеша пакетов в Debian-linux необходимо выполнить команду apt-get update или apt update

        Поиск пакета

        Для поиска пакета по имени или его краткому описанию можно использовать

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

        Поиск пакета на packages.debian.org

        Дистрибутив Debian предлагает графический инструментарий для поиска пакетов https:/packages.debian.org

        • Поиск пакетов по категориям
        • Поиск пакетов по имени
        • Поиск пакетов по файлам, входящих в пакеты

        Поиск с помощью передачи аргумента

        Помимо взаимодействия с графическим интерфейсом можно сформировать запросы в адресной строке:

        • По названию пакета: https://packages.debian.org/PACKAGE . Вместо PACKAGE надо написать название пакета
        • По файлам: https://packages.debian.org/file:PATH . Вместо PATH надо указать путь к файлу, который ищется

        Установка пакета

        Из репозитория

        Для установки пакета из репозитория необходимо выполнить команду apt-get install PACKAGE или apt install PACKAGE . Вместо PACKAGE необходимо указать имя пакета для установки

        Внимание если вы давно не обновляли локальный кеш пакетов, то его необходимо обновить с помощью apt update

        Из файла

        Если вы хотите поставить .deb-пакет не из репозитория, то необходимо

        1. Скачать данный пакет на компьютер
        2. Установить с помощью низкоуровнего инструмента dpkg : dpkg -i PATH , где вместо PATH указать путь к .deb-пакету

        Если пакету не хватает зависимостей, то его установка завершится с ошибкой

        Удаление пакета

        Удаление обычно выполняется высокоуровневыми инструментами

        В Debian для удаления пакета надо выполнить apt-get remove PACKAGE или apt remove PACKAGE , где вместо PACKAGE необходимо указать пакет, который нужно удалить

        Важно понимать, что необходимо указать точное название пакета

        Отображение списка установленных пакетов

        • На низком уровне можно воспользоваться dpkg -l
        • На высоком уровне доступна команда apt list

        Обновление пакетов

        Обновление пакета из репозитория

        Наиболее частая операция при использовании пакетного менеджера — обновление установленных пакетов в связи с выходом исправлений безопасности или новых функциональных версий

        Для обновления локальных пакетов необходимо выполнить apt-get upgrade или apt upgrade

        Внимание. Не забывайте обновлять локальный кеш пакетов перед выполнением данных операций с помощью apt update

        Обновление с помощью файла-пакета

        Обновление из файла-пакета не отличается от установки нового пакета. Достаточно вызвать dpkg -i PACKAGE , где вместо PACKAGE надо указать путь к deb-файлу

        Использование графических приложений

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

        • Synaptic, требует графического пользовательского окружения
        • aptitude, псевдографический менедежр, работает в консоли
        • tasksel, позволяет настроить сервер для выполнения “задач”, например сервер баз данных, веб-сервер

        Особенности aptitude

        • Интерактинвный список пакетов
        • Поиск по списку
        • Разрешение конфликтов

        Процесс выпуска версий GNU/Debian

        • Новая версия пакета обычно попадает в unstable, sid
        • После базовой проверки пакет переносится в testing
        • Примерно за 6 месяцев testing замораживается и начинает принимать только пакеты с исправлением ошибок
        • Когда количество критических проблем в testing значительно снижается, то из него формируется очередной стабильный выпуск. Стабильный выпуск получает своё уникальное имя, которое берётся из мульт-франшизы Toy Story
        • Для стабильного выпуска формируются исправления. При накоплении критической массы формируется обновление для стабильного выпуска
        • Потенциально в систему можно поставить пакеты из разных выпусков, но это официально не поддерживается и может привести к поломке системы

        Разделы репозиториев Debian

        Debian в целом разделяет пакеты на «свободные» и «несвободные». Для определения категории используются The Debian Free Software Guidelines (DFSG)

        В соответствии с этим определением пакеты делятся на 3 категории:

        • полностью свободные пакеты, предоставляющие исходный код без ограничений, main
        • пакеты, содержащие несвободное по какому-либо критерию ПО, non-free
        • свободные пакеты, зависящие от несвободных пакетов contrib

        Последние две категории пакетов официально не являются частью дистрибутива, но их мейнтенеры могут использовать инфраструктуру Debian

        Конфигурация репозиториев в Debian

        Для настройки списка доступных репозиториев используются

        • Файл /etc/apt/sources.list
        • Файлы в каталоге /etc/apt/sources.list.d

        Каждая строка в этих файлах описывает подключённый репозиторий

        • В начале находится deb для бинарных репозиториев, deb-src для репозиториев с пакетами исходных кодов (из которых были собраны бинарные пакеты)
        • В поле uri вносится путь к репозиторию, может быть интернет-адресом https://. или путём к файловой системе file://.
        • Затем идёт наименование дистрибутива: stable , testing …
        • Список компонентов описывает какие компоненты дистрибутива следует использовать: main , contrib , non-free

        Полезные репоизтории экосистемы Debian

        Между выпусками Debian проходит от полутора до двух лет, за которые успевает выйти много версий ПО, которые могут быть необходимы пользователю

        Мультимедийные компоненты

        Проект deb-multimedia нацелен на предоставление самых последних версий мультимедиа-пакетов в Debian. Пользователи получают самые последние версии от производителя, включая самые последние функции и ошибки

        Скачайте и установите пакет с ключом:

        Добавьте файл deb-multimedia.list в /etc/apt/sources.list.d :

        Подключение раздела debian-backports

        Похожую задачу решает Debian Backports

        В рамках этого проекта создан репозиторий, в который помещаются пакеты из Debian Testing, которые были скомпилированы для достижения бинарной совместимости с текущим стабильным выпуском

        Подключение репозитория

        Debian backports стали распространяться вместе с официальными выпусками debian, поэтому достаточно добавить -backports -дистрибутив в список репозиториев:

        Установка пакетов из debian-backports

        В отличие от debian-multimedia пакеты автоматически не обновятся до версий debian-backports, их необходимо явно установить:

        Подключение репозиториев от других производителей

        Некоторые крупные производители ПО предлагают собственные репозитории

          node.js репозиторий репозитории репозиторий

        Некоторые из них предлагают новые имена для пакетов, некоторые предлагают конкретные версии своих пакетов

        Переход на новую версию дистрибутива

        Пользователи зачастую хотят перейти на новую версию дистрибутива:

        • Чтобы получить новые версии ПО, включающие новые функции и оптимизации
        • Чтобы получить новую версию ядра Linux, чтобы получить поддержку нового оборудования, т.к. драйвера обычно поставляются внутри ядра Linux
        • Новые версии служб могут могут изменить своё поведение, форматы конфигурационных файлов
        • Приложения, распространяемые не через пакетный менеджер, могут перестать работать, так как станут бинарно несовместимыми
        • В новой версии дистрибутива может не поставляться нужное ПО, потребуется переход на альтернативу
        • Скорее всего потребуется обновление настроек ПО

        Выполнение перехода на новую версию

        1. Отредактируйте конфигурацию пакетного менеджера, чтобы она ссылалась на новую версию дистрибутива
        2. Обновите локальный кеш пакетов, apt-get update
        3. Выполните обновление дистрибутива, apt-get dist-upgrade
        • Обычно поддерживается переход только на новую версию дистрибутива, возврат к предыдущей версии обычно недоступен
        • При выполнении операции dist-upgrade часть пакетов может быть удалена, их надо будет поставить заново при необходимости
        • Для перехода можно использовать графические инструменты, чтобы помочь алгоритму разрешения зависимостей выбрать нужные версии пакетов

        Особенности распространения ПО

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

        Мейнтенерами пакетов являются не разработчики ПО, а отдельные люди, что снижает нагрузку на разработчика

        ПО внутри репозитория совместимо друг с другом, используются общие библиотеки

        При использовании репозиториев пользователи обычно работают не с самой последней версией ПО, а версий, что была доступна на момент формирования репозитория

        ПО может не входить в состав репозитория

        Дистрибутив может поставлять только более свежую версию ПО, например Java 14 вместо Java 11

        Репозитории, пакеты, менеджеры пакетов и зависимости в Linux

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

        Как Вы наверняка знаете и помните, я обещал потихоньку (по вашим просьбам) охватывать цикл Linux , знакомя Вас с разными основами и очень постепенно перетекая из теории в практику.

        linux

        Сегодня мы пока что продолжим тему знакомства с теорией и основами, а посему поговорим о такой штуке, как репозитории и обо всём, что с ними связано, т.е. разберемся как же выглядит изнутри софт в Linux , как это все хранится и всё такое прочее.

        Как и в случае со статьей «Графические оболочки в Linux [основы основ, работа в KDE]», всё, в общем-то, просто, но необходимо по ходу чтения несколько напрячь мозг, дабы не запутаться в хитросплетении терминов и несколько скомканном повествовании. В общем, следите за мыслью :) При необходимости прочитайте статью дважды ;)

        Поехали. Все программы в дистрибутивах Linux это отдельные проекты, которые развиваются сами по себе. Вы должны представить себе некую цепочку: есть отдельные пакеты (программное обеспечение), есть зависимости (ниже мы более подробно рассмотрим эти понятия). Цель же всего этого – собрать все эти программы, с их зависящими друг от друга библиотеками вместе, да не просто собрать, а сделать так, чтобы все это работало в комплексе.

        У каждого дистрибутива есть свои разработчики (майнтейнеры). Эти люди занимаются тестированием различных пакетов на их нормальное функционирование, взаимную совместимость, а также часто добавляют собственные усовершенствования или не успевшие войти в официальную сборку и, в конечном итоге, отвечающие за включение пакета в дистрибутив патчи. Т.е. разработчики берут программы из открытых исходных кодов и начинают подгонять их друг к другу, упаковывая в пакеты и соблюдая все зависимости, тестируя и удаляя ошибки из этих самых программ. Представили? Тогда, думаю, Вы понимаете, что это непростое занятие. Так вот, все эти подогнанные друг к другу программы, библиотеки и нескучные обои, упакованные в пакеты со всеми зависимостями, – это и есть репозиторий Вашего дистрибутива, откуда программы и устанавливаются на Ваш компьютер.

        О репозиториях в Linux. Что это и зачем нужно

        Т.е. еще раз и чуть иначе: репозиторий в Линуксе – это все файлы пакетов, принадлежащие одному дистрибутиву (например, Fedora ), одной его версии (например, 16 ), то бишь сие есть огромное хранилище пакетов, которое находится в сети Интернет и которым Вы можете спокойно воспользоваться (причем бесплатно). Те самые ISO -файлы образов для записывания на болванку и последующей установки содержат как раз репозитории пакетов со всеми зависимостями и менеджером пакетов плюс установочную программу, которая разметит жёсткий диск, всё поставит и приготовит Вам рабочий стол (или сервер, или что попросите).

        reprs

        Для чего создаются репозитории? Ответ прост – для централизованного управления обновлением пакетов. Представим на секунду, что у нас нет репозиториев, и Вы установили Linux с диска с определенными (стандартными) программами. Однако время не стоит на месте, все программы обновляются и всё такое прочее. Как же тогда узнать – есть ли обновление для Вашей программы или нет? Естественно, придется посещать сайт разработчиков программы, чтобы выяснить это, что, согласитесь, не совсем удобно, особенно, если программ у Вас установлено очень много. Ну и понеслось, Вы раз проверили, два проверили наличие обновлений, в третий раз забыли, а потом и вообще надоело каждый раз смотреть, вышло там обновление или нет. И тут раз..

        Вспоминаем, для чего у нас существуют обновления? А для того, чтобы не просто иметь новый (и улучшенный старый) функционал в оных программах, но еще и залатывать дыры, которые нередко приводят к различным неприятностям, начиная от глюков программы/системы и заканчивая проблемами с безопасностью (я, например, очень не люблю «терять» пароль, скажем, от почты по вине дыр в софте). Поэтому-то разработчики Linux и создали репозитории, с помощью которых можно быстро и удобно отслеживать обновления тех или иных пакетов (да и вообще обновления всей системы в целом), устанавливать новые и обновленные и всё такое прочее. Кстати, почему для Windows оным еще не озадачились, решительно непонятно (хотя там частично спасают программы для обновления программ, пусть это и не совсем то).

        О пакетах и менеджерах пакетов в Linux. Что это и зачем нужно

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

        Под пакетами в Linux подразумевается программное обеспечение (ПО), которое Вы хотите установить на компьютер. Скажем, например, в Windows софт устанавливается с помощью мастера (программы) установки – setup.exe или install.exe . Вы запускаете этот мифический экзешный файл, и процесс установки начинается едва ли не мгновенно после выбора пути и мелких побочных настроек.

        packet

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

        Обычно менеджер пакетов является сердцем дистрибутива, обеспечивая полный контроль целостности и работоспособности всей системы, и он же обеспечивает пользователю интерфейс для автоматизированного получения пакета, его зависимостей и его установку. Пакеты, как уже говорилось, собираются в репозитории, т.е. всё это можно сложить в одну цепочку: пользователь запрашивает установку пакета – менеджер пакетов отслеживает зависимости – он же получает необходимые пакеты из репозитория(ев) – и он же устанавливает зависимости и требуемый пакет. Практически каждый дистрибутив Linux имеет свои репозитории, зачастую несовместимые с другими дистрибутивами. Менеджер же пакетов – консольная утилита, однако обычно для нее существуют многочисленные графические оболочки, которые легко отыскать в каждом дистрибутиве, введя в поиск « Установка/удаление программ ».

        Пакетные менеджеры бывают разные. Для управления пакетами в разных дистрибутивах используются разные программы. В общем-то, их не так уж и мало, а посему выделим «основные», которые «умеют» разрешать зависимости. Фраза «умеют разрешать зависимости» означает следующее – если при установке пакета будет обнаружено, что для корректной его установки нужны дополнительные пакеты, то менеджер пакетов установит их сам, т.е. Вам не придется искать дополнительные пакеты в репозиториях. Те менеджеры пакетов, которые не обладают такой функцией (умением разрешать зависимости), мы рассматривать не будем, ибо оные только сообщат Вам, что пакет установить невозможно и выведут весь список файлов (именно файлов, а не пакетов), которые нужны для установки данного пакета. А уж какой файл в каком пакете находится, Вы будете догадываться и искать самостоятельно.

        Вот небольшой список:

        • Yum (Yellow Dog Update Modified) – мощный менеджер пакетов, основанный на rpm (простой МП, не умеет разрешать зависимости), работающий в текстовом режиме и умеющий разрешать зависимости, а также умеющий поддерживать репозитории (источники пакетов). Используется в RedHat Linux , а так же в Fedora , SuSe и некоторых других;
        • APT [Advanced Package Tool] создана для дистрибутивов Linux , основанных на Debian , используется в Ubuntu (и клонах), АLT Linux и др. Мощный менеджер пакетов, работающий в текстовом режиме. Умеет разрешать зависимости и поддерживает репозитории (источники пакетов);
        • Portage package management system имеет много разновидностей, примером может служить дистрибутив Gentoo . Как вариант пакетного менеджера можно привести emerge .

        К слову, пакетные менеджеры не просто ищут желаемые Вами программы по описаниям, но прежде нам нужно ввести еще один не раз уже упомянутый термин и объяснить его.

        О зависимостях в Linux. Что это и зачем нужно

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

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

        all

        Вся эта огромная куча пакетов с их ворохом зависимостей друг от друга, управляемая пакетным менеджером, как раз и составляет Ваш дистрибутив Linux . Но это не просто куча мусора, а упорядоченная система, которая называется — та-дам! — репозитории пакетов программ . Круг замкнулся – мы вернулись к первому понятию – что такое репозиторий :)

        Несколько слов о нюансах

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

        1. Не надо искушать судьбу и ставить программы в Linux в обход менеджера пакетов, простой компиляцией. Работать они будут, но пакетный менеджер ничего о них не будет знать, из-за чего при обновлении системы или программ Вы рискуете получить больше проблем на свою голову, чем представляете. Устанавливайте программы только в виде пакетов.
        2. Не надо подключать те репозитории, о которых имеете совсем смутное представление. Например, не надо подключать репозитории со словами testing , debug и тому подобными терминами, ибо эти репозитории в первую очередь предназначены для самих разработчиков дистрибутивов и далеко не всегда стабильны.
        3. Не подключайте подряд все доступные репозитории, это тоже может сыграть с Вами злую шутку. Подключайте только самые необходимые, не надо жадничать :)

        Например, при установке операционной системы Fedora по умолчанию сразу подключены два репозитория:

        • Fedora (пакеты, которые подходят на любую комбинацию из компакт-дисков или DVD-дисков)
        • Updates (обновленные пакеты, новее, чем репозиторий (хранилище) Fedora)

        Для нормальной работы нужно подключить дополнительный репозиторий rpmfusion (без него Вам действительно не обойтись), что даст доступ к программам, которые не могли быть включены в дистрибутив из-за лицензионных ограничений (приложения, которые требуются для воспроизведения мультимедиафайлов, таких как mp3 , dvd и т.д.; драйвера – к ним относятся проприетарные драйвера для ATI и NVIDIA ; игры: Bub’s Brothers, Secret Maryo Chronicles, UFO: Alien Invasion, Wörms of Prey, xrick, GLtron и многие, многие другие; эмуляторы: эмулятор Commodore 64 , а также Commodore 8 bit , эмулятор Amiga, Nestopia, ZSNES и много других). Чтобы подключить этот репозиторий, достаточно в командной строке (терминале) от суперпользователя (root) ввести команды:
        $ sudo rpm -ivh https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm
        $ sudo rpm -ivh https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
        Обратите внимание, что репозиторий rpmfusion разделяется на две части: free и nonfree . Первый содержит чисто свободные программы в понимании FSF , распространяемые под GPL и совместимыми с ней лицензиями. Содержимое второго, вопреки названию, — также программы по преимуществу свободные, но попадающие под пресловутые патентные ограничения некоторых государств (например, аудио- и видеокодеки).

        То же самое касается и менеджера пакетов в Fedora . Для нормальной и удобной работы менеджера пакетов (yum) в Fedora рекомендуется подключить дополнительный плагин fastestmirror . Этот плагин очень важен: он определяет не просто ближайшее зеркало, как это делают аналогичные утилиты из других систем управления пакетами, а устанавливает именно самое быстрое зеркало в данный момент – по времени отклика.
        $ sudo yum install yum-plugin-fastestmirror
        В двух словах как-то так :)

        Послесловие

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

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

        Как и всегда, если есть какие-то вопросы, дополнения и всё такое прочее, то буду рад видеть их в комментариях к этому материалу.

        P.S. За существование данной статьи спасибо члену команды Pantera

        Белов Андрей (Sonikelf) Заметки Сис.Админа [Sonikelf’s Project’s] Космодамианская наб., 32-34 Россия, Москва (916) 174-8226

        Cистема управления пакетами

        Материал из Национальной библиотеки им. Н. Э. Баумана
        Последнее изменение этой страницы: 00:12, 25 ноября 2016.

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

        Содержание

        О системе управления пакетами

        Для установки, удаления и обновления программ и поддержания целостности системы в Linux в первую очередь стали использоваться менеджеры пакетов. С точки зрения менеджера пакетов программное обеспечение представляет собой набор компонентов — программных пакетов,содержащих помимо дистрибутива программного обеспечения набор определённых метаданных, которые могут включать в себя полное имя пакета, номер версии, описание пакета, имя разработчика, контрольную сумму, отношения с другими пакетами. Метаданные сохраняются в системной базе данных пакетов. Менеджеры пакетов облегчают установку программ: они позволяют проверить наличие необходимых для работы устанавливаемой программы компонент подходящей версии непосредственно в момент установки, а также производят необходимые процедуры для регистрации программы во всех операционных средах пользователя: cразу после установки программа может быть доступна пользователю из командной строки и — если это предусмотрено — появляется в меню всех графических оболочек.

        Часто компоненты, используемые различными программами, выделяют в отдельные пакеты и помечают, что для работы ПО, предоставляемого пакетом A, необходимо установить пакет B. В таком случае говорят, что пакет A зависит от пакета B или что между пакетами A и B существует зависимость.

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

        Задача контроля целостности и непротиворечивости установленного в системе ПО ещё сложнее. Представим, что некие программы A и B требуют наличия в системе компоненты C версии 1.0. Обновление версии пакета A, требующее обновления компоненты C до новой, использующей новый интерфейс доступа, версии (скажем, до версии 2.0), влечёт за собой обязательное обновление и программы B.

        Однако менеджеры пакетов оказались неспособны предотвратить все возможные коллизии при установке или удалении программ, а тем более эффективно устранить нарушения целостности системы. Особенно сильно этот недостаток сказывается при обновлении систем из централизованного репозитория пакетов, в котором последние могут непрерывно обновляться, дробиться на более мелкие и т. п. Этот недостаток и стимулировал создание систем управления программными пакетами и поддержания целостности системы.

        Для автоматизации этого процесса и применяется Усовершенствованная система управления программными пакетами APT (от англ. Advanced Packaging Tool). Такая автоматизация достигается созданием одного или нескольких внешних репозиториев, в которых хранятся пакеты программ и относительно которых производится сверка пакетов, установленных в системе. Репозитории могут содержать как официальную версию дистрибутива, обновляемую его разработчиками по мере выхода новых версий программ, так и локальные наработки, например, пакеты, разработанные внутри компании.

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

        Система APT состоит из нескольких утилит. Чаще всего используется утилита управления пакетами apt-get: она автоматически определяет зависимости между пакетами и строго следит за их соблюдением при выполнении любой из следующих операций: установка, удаление или обновление пакетов.

        Форматы файлов пакетов

        Операционная система Формат
        Debian .deb
        Ubuntu .deb
        CentOS .rpm
        Fedora .rpm
        FreeBSD порты, .txz

        Команды для получения информации о пакетах

        Система Команда
        Debian/Ubuntu apt-cache show package

        yum deplist package

        dnf repoquery —requires package

        Источники программ (репозитории)

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

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

        • Важно!
          • Подключая одновременно несколько репозиториев, нужно следить за тем, чтобы они были совместимы друг с другом по пакетной базе, т. е. отражали один определённый этап разработки. Например, совместимыми являются основной репозиторий дистрибутива и репозиторий обновлений по безопасности к данному дистрибутиву. В то же время смешение среди источников APT репозиториев, относящихся к разным дистрибутивам, или смешение стабильного репозитория с нестабильной веткой разработки (Sisyphus) чревато различными неожиданными трудностями при обновлении пакетов.

          APT позволяет взаимодействовать с репозиторием с помощью различных протоколов доступа. Наиболее популярные — HTTP и FTP, однако существуют и некоторые дополнительные методы.

          Для того, чтобы APT мог использовать тот или иной репозиторий, информацию о нем необходимо поместить в файл /etc/apt/sources.list (этот файл может называться и иначе, другое имя файла со списком источников программ можно указать в конфигурационном файле /etc/apt/apt.conf. ). Описания репозиториев заносятся в этот файл в следующем виде:

          rpm или rpm-src

          Тип репозитория (скомпилированные программы или исходные тексты).

          Необязательная строка-указатель на электронную подпись разработчиков. Наличие этого поля подразумевает, что каждый пакет из данного репозитория должен быть подписан соответствующей электронной подписью. Подписи описываются в файле /etc/apt/vendor.list.

          Способ доступа к репозиторию: ftp, http, file, rsh, ssh, cdrom, copy.

          Путь к репозиторию в терминах выбранного метода.

          Относительный путь к базе данных репозитория.

          Для добавления в sources.list репозитория на компакт-диске в APT даже предусмотрена специальная утилита — apt-cdrom. Чтобы добавить запись о репозитории на компакт-диске, достаточно вставить диск в привод и выполнить команду apt-cdrom add. После этого в sources.list появится запись о подключённом диске примерно такого вида:

          После того как отредактирован список репозиториев в sources.list, необходимо обновить локальную базу данных APT о доступных пакетах. Это делается командой apt-get update.

          Если в sources.list присутствует репозиторий, содержимое которого может изменяться (как происходит с любым постоянно разрабатываемым репозиторием, в частности, обновлений по безопасности (updates, backports или Sisyphus), то прежде чем работать с APT, необходимо синхронизировать локальную базу данных с удалённым сервером командой apt-get update. Локальная база данных создаётся заново каждый раз, когда в репозитории происходит изменение: добавление, удаление или переименование пакета. Для репозиториев, находящихся на компакт-дисках и подключённых командой apt-cdrom add, синхронизация производится единожды в момент подключения.

          При выборе пакетов для установки, APT руководствуется всеми доступными репозиториями вне зависимости от способа доступа к ним. Так, если в репозитории, доступном по сети Интернет, обнаружена более новая версия программы, чем на компакт-диске, то APT начнёт загружать данный пакет из интернета. Поэтому если подключение к интернету отсутствует или ограничено низкой пропускной способностью канала или высокой стоимостью, то следует закомментировать те строчки в /etc/apt/sources.list, в которых говорится о ресурсах, доступных по интернету.

          Команды для установки пакетов из репозиториев

          Система Команда
          Debian/Ubuntu sudo apt-get install package

          sudo apt-get install package1 package2 …

          sudo apt-get install -y package

          sudo yum install package1 package2 …

          sudo yum install -y package

          sudo dnf install package1 package2 …

          sudo dnf install -y package

          dnf repoquery —requires package

          sudo pkg install package1 package2 …

          Репозитории ALT Linux

          Все дистрибутивы ALT Linux выпускаются на основе репозитория Sisyphus команды ALT Linux Team. Следует иметь в виду, что Sisyphus не является самостоятельным дистрибутивом, а отражает текущее состояние разработки и может содержать нестабильные версии пакетов. Периодически на базе этого проекта выпускаются отдельные оттестированные «срезы» — дистрибутивы.

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

          Пользователи стабильных дистрибутивов не всегда готовы переходить на нестабильную ветку разработки и в то же время заинтересованы в обновлении версий некоторых прикладных программ (в которых появляется новая функциональность и т. п.). Для этих целей заинтересованными пользователями для каждого дистрибутива ALT Linux создаются и поддерживаются специальные репозитории с обновлёнными версиями программ — backports [2]. Репозитории backports являются согласованными по пакетной базе с основным репозиторием соответствующего дистрибутива, и могут быть без опасений подключены параллельно с ним.

          Непосредственно после установки дистрибутива ALT Linux в /etc/apt/sources.list обычно указывается несколько репозиториев:

          • репозиторий обновлений в системе безопасности дистрибутива;
          • полный срез репозитория Sisyphus, подмножеством которого является дистрибутив.

          Поиск пакетов

          Если вы не знаете точного названия пакета, для его поиска можно воспользоваться утилитой apt-cache, которая позволяет искать не только по имени пакета, но и по его описанию.

          Команда apt-cache search подстрока позволяет найти все пакеты, в именах или описании которых присутствует указанная подстрока. Например:

          Для того, чтобы подробнее узнать о каждом из найденных пакетов и прочитать его описание, можно воспользоваться командой apt-cache show, которая покажет информацию о пакете из репозитория:

          apt-cache позволяет осуществлять поиск и по русскому слову, однако в этом случае будут найдены только те пакеты, у которых помимо английского есть ещё и описание на русском языке. К сожалению, русское описание на настоящий момент есть не у всех пакетов, хотя описания наиболее актуальных для пользователя пакетов переведены.

          Команды для поиска файлов пакетов

          Система Команда
          Debian/Ubuntu apt-cache search search_string
          CentOS yum search search_string

          yum search all search_string

          dnf search all search_string

          pkg search -f search_string

          pkg search -D search_string

          cd /usr/ports && make search key=search_string

          Установка или обновление пакета

          Установка пакета с помощью APT выполняется командой

          apt-get позволяет устанавливать в систему пакеты, требующие для работы другие, пока ещё не установленные. В этом случае он определяет, какие пакеты необходимо установить, и устанавливает их, пользуясь всеми доступными репозиториями.

          Установка пакета stardict-mueller7 командой apt-get install stardict-mueller7 приведёт к следующему диалогу с APT:

          Команда apt-get install имя_пакета используется и для обновления уже установленного пакета или группы пакетов. В этом случае apt-get дополнительно проверяет, не обновилась ли версия пакета в репозитории по сравнению с установленным в системе.

          При помощи APT можно установить и отдельный бинарный rpm-пакет, не входящий ни в один из репозиториев (например, полученный из Интернет). Для этого достаточно выполнить команду apt-get install путь_к_файлу.rpm. При этом APT проведёт стандартную процедуру проверки зависимостей и конфликтов с уже установленными пакетами.

          Иногда, в результате операций с пакетами без использования APT, целостность системы нарушается, и apt-get отказывается выполнять операции установки, удаления или обновления. В этом случае необходимо повторить операцию, задав опцию -f, заставляющую apt-get исправить нарушенные зависимости, удалить или заменить конфликтующие пакеты. В этом случае необходимо внимательно следить за сообщениями, выдаваемыми apt-get. Любые действия в этом режиме обязательно требуют подтверждения со стороны пользователя.

          Команды для установки пакета из локальной файловой системы

          Система Команда
          Debian/Ubuntu sudo dpkg -i package.deb

          sudo apt-get install -y gdebi&& sudo gdebi package.deb

          sudo pkg add -f package.txz

          Удаление установленного пакета

          Для удаления пакета используется команда apt-get remove имя_пакета. Для того, чтобы не нарушать целостность системы, будут удалены и все пакеты, зависящие от удаляемого: если отсутствует необходимый для работы приложения компонент (например, библиотека), то само приложение становится бесполезным. В случае удаления пакета, который относится к базовым компонентам системы, apt-get потребует дополнительного подтверждения производимой операции с целью предотвратить возможную случайную ошибку.

          Если вы попробуете при помощи apt-get удалить базовый компонент системы, вы увидите такой запрос на подтверждение операции:

          Каждую ситуацию, в которой APT выдаёт такое сообщение, необходимо рассматривать отдельно. Однако, вероятность того, что после выполнения этой команды система окажется неработоспособной, очень велика.

          Команды для удаления пакетов

          Система Команда
          Debian/Ubuntu sudo apt-get remove package

          sudo apt-get autoremove

          sudo pkg autoremove

          cd /usr/ports/path_to_port && make deinstall

          Обновление всех установленных пакетов

          Для обновления всех установленных пакетов используется команда apt-get upgrade. Она позволяет обновить те и только те установленные пакеты, для которых в репозиториях, перечисленных в /etc/apt/sources.list, имеются новые версии; при этом из системы не будут удалены никакие другие пакеты. Этот способ полезен при работе со стабильными пакетами приложений, относительно которых известно, что они при смене версии изменяются несущественно.

          Иногда, однако, происходит изменение в именовании пакетов или изменение их зависимостей. Такие ситуации не обрабатываются командой apt-get upgrade, в результате чего происходит нарушение целостности системы: появляются неудовлетворённые зависимости. Например, переименование пакета MySQL-shared, содержащего динамически загружаемые библиотеки для работы с СУБД MySQL, в libMySQL (отражающая общую тенденцию к наименованию библиотек в дистрибутиве) не приводит к тому, что установка обновлённой версии libMySQL требует удаления старой версии MySQL-shared. Для разрешения этой проблемы существует режим обновления в масштабе дистрибутива — apt-get dist-upgrade.

          В случае обновления всего дистрибутива APT проведёт сравнение системы с репозиторием и удалит устаревшие пакеты, установит новые версии присутствующих в системе пакетов, а также отследит ситуации с переименованиями пакетов или изменения зависимостей между старыми и новыми версиями программ. Всё, что потребуется поставить (или удалить) дополнительно к уже имеющемуся в системе, будет указано в отчёте apt-get, которым APT предварит само обновление.

          При работе с Sisyphus для обновления системы рекомендуется использовать команду apt-get dist-upgrade.

          Команды для обновления списка пакетов

          Система Команда
          Debian/Ubuntu sudo apt-get update
          CentOS yum check-update
          Fedora dnf check-update
          FreeBSD (пакеты) sudo pkg update
          FreeBSD (порты) sudo portsnap fetch update

          Команды для обновления установленных пакетов

          Система Команда
          Debian/Ubuntu sudo apt-get upgrade

          sudo apt-get dist-upgrade

          cd /usr/ports/ports-mgmt/portmaster && sudo make install && sudo portmaster -a

          Получение справки

          Кроме веб-документации системы Unix предоставляют удобный справочник, в котором можно найти информацию о большинстве команд оболочки. Чтобы открыть мануал, введите:

          В справочнике можно перемещаться при помощи кнопок со стрелками. Нажмите /, чтобы искать по тексту страницы, и q, чтобы выйти.

          Команды для получения справки

          Система Команда Примечания
          Debian/Ubuntu man apt-get

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

          Управление индивидуальными файлами пакетов и запрос установленных пакетов.

          Неудовлетворенные зависимости Ubuntu

          При установке пакетов из официальных или сторонних репозиториев вы можете столкнуться с проблемой неудовлетворенные зависимости Ubuntu. Чтобы понять причину возникновения этой ошибки сначала надо разобраться как работают пакетные менеджеры в Linux. Здесь всё компоненты системы, библиотеки и сами программы разделены на пакеты. И если какой-либо программе нужна определенная библиотека, она не поставляется вместе с этой библиотекой, а ожидает, что эта библиотека будет уже установлена в системе.

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

          Неудовлетворенные зависимости в Ubuntu

          По английски наша ошибка ещё может писаться как the following packages have unmet dependencies. Она может возникнуть в нескольких случаях, давайте сначала рассмотрим основные из них:

          • Вы используете dpkg для установки deb пакета. Эта утилита не занимается установкой зависимостей. Вместо неё надо использовать apt install или потом просто установить недостающие зависимости с помощью apt, как это делается описано ниже;
          • Вы используете старую версию дистрибутива — в старых версиях могло что-то изменится в репозитории и часть пакетов была удалена или переименована. С LTS версиями такое случается редко, но с обычными релизами вполне может произойти;
          • Вы пытаетесь установить программу не от своего дистрибутива — несмотря на родство всех дистрибутивов семейства Debian, не желательно использовать программы из других дистрибутивов, так, как они могут требовать пакеты, которые в этом дистрибутиве называются по другому;
          • У вас установлен устаревший пакет, который не позволяет обновить некоторые зависимости — случается, когда в системе уже есть какой-нибудь пакет старый пакет, требующий старую версию библиотеки, а новая программа, которую вы собираетесь установить уже хочет более новую версию и не позволяет её обновить. Эта проблема не очень типична для Ubuntu, так как здесь большинство версий программ в репозиториях заморожено, но часто встречается при использовании дистрибутивов с системой роллинг релизов.

          1. Обновление и исправление зависимостей

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

          sudo apt update

          sudo apt install -f

          Эта команда установит зависимости, которые есть во официальных репозиториях (поможет при использовании dpkg) и если это не решит проблему, то удалит пакеты, для которых зависимости удовлетворить не удалось. Также после этого можно выполнить:

          sudo dpkg —configure -a

          А потом повторить предыдущую команду. Следующим шагом можно попробовать обновить систему до самой последней версии. Это тоже может помочь если вы пытаетесь установить пакет из официальных репозиториев и при этом возникает проблема с зависимостями:

          sudo apt upgrade
          sudo apt full-upgrade

          Если причиной вашей проблемы стал устаревший пакет надо его удалить или придумать для него замену. Например, если у вас установлена старая версия php, могут возникнуть проблемы с установкой новой версии, потому что будут конфликтовать версии библиотек, от которых зависит программа. Однако можно найти PPA со специально подготовленной старой версией php, которая ни с кем конфликтовать не будет.

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

          2. Установка зависимостей

          Дальше установка зависимостей Ubuntu. Следующий этап, если вы скачали пакет в интернете, например, от другого дистрибутива с таким же пакетным менеджером, можно попытаться установить таким же способом библиотеки, которые он просит. Это может сработать особенно, если вы пытаетесь установить программу из старой версии дистрибутива. Пакеты можно искать прямо в google или на сайте pkgs.org:

          Здесь собрано огромное количество пакетов от различных дистрибутивов, в том числе и от Ubuntu и Debian. Просто выберите нужную версию пакета для вашей архитектуры. Скачать файл можно чуть ниже на странице пакета:

          После загрузки пакета с сайта его можно установить через тот же dpkg:

          sudo dpkg -i ffmpegthumbs_19.04.3-0ubuntu1~ubuntu19.04~ppa1_amd64.deb

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

          3. Удаление зависимостей

          Если у вас есть скачанный пакет, и он говорит, что он зависит о версии библиотеки, которой в вашей системе нет, но вы уверены, что ему подойдет и другая версия, то можно просто убрать эту зависимость из пакета. Но для этого надо его перепаковать. Такая ситуация была когда-то с популярным менеджером Viber. Рассмотрим на примере того же вайбера.

          Сначала распакуйте пакет в подпапку package командой:

          dpkg-deb -x ./viber.deb package

          Затем туда же извлеките метаданные пакета:

          dpkg-deb —control viber.deb package/DEBIAN

          В файле package/DEBIAN есть строчка Depends, где перечислены все библиотеки, от которых зависит пакет и их версии. Просто удалите проблемную библиотеку или измените её версию на ту, которая есть в системе.

          Затем останется только собрать пакет обратно:

          dpkg -b viber package.deb

          И можете устанавливать, теперь с зависимостями будет всё верно:

          sudo dpkg -i package.deb

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

          4. Распаковать пакет

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

          5. Использовать snap пакеты

          Самый простой способ обойти проблемы с зависимостями — использовать новый формат установщика программ, в котором программа содержит все зависимости в установочном архиве и они устанавливаются аналогично Windows в одну папку. Установка такой программы будет дольше, но зато такие там вы точно не получите проблем с зависимостями Ubuntu. Всё программы, которые поддерживают этот формат есть в центре приложений Ubuntu:

          Выводы

          В этой статье мы разобрали как исправить проблемы с зависимостями Ubuntu. Некоторые из способов довольно сложные, а другие проще. Но сама эта система, согласно которого пакеты зависят от других, а те ещё от других очень сложная и не удивительно, что время от времени в ней возникают ошибки. А какие способы решения этой проблемы вы знаете? Напишите в комментариях?

          Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

          Примеры базового и продвинутого использования команд apt, apt-cache, dpkg для управления пакетами в Ubuntu/Debian

          Одна важная вещь, которую нужно освоить при администрировании системы/сервера Linux, — это управление пакетами с использованием различных инструментов управления пакетами.

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

          Инструменты управления пакетами помогают администраторам системы/сервера во многих отношениях, например:

          • Скачивание и установка программного обеспечения
          • Компилирование программного обеспечение из исходников
          • Отслеживание всего установленного программного обеспечения, его обновлений и обновлений
          • Обработка зависимостей
          • А также хранение другой информации об установленном программном обеспечении и многом другом

          В этой статье объясняется, как быстро вы можете научиться устанавливать, удалять, обновлять и искать программные пакеты с помощью команд apt и apt-cache из командной строки. В этой статье представлены некоторые полезные команды, которые помогут вам справиться с управлением пакетами в системах на основе Debian/Ubuntu.

          Что такое apt?

          Утилита apt — это мощная и бесплатная программа командной строки для управления пакетами, которая используется для работы с библиотекой APT (Advanced Packaging Tool) в Debian и производных дистрибутивах для установки новых пакетов программного обеспечения, удаления существующих пакетов программного обеспечения, обновления существующих пакетов программного обеспечения и даже используется для обновления всей операционной системы.

          Что такое apt-cache?

          Инструмент командной строки apt-cache используется для поиска в кэше пакетов программного обеспечения apt. Проще говоря, этот инструмент используется для поиска пакетов программного обеспечения, сбора информации о пакетах, а также для поиска доступных пакетов, готовых к установке в системах на основе Debian или Ubuntu.

          Обновления кэша с информацией о приложениях

          Когда в репозиторий вносятся изменения, например, при обновлении пакета, необходимо синхронизировать эту информацию с локальным кэшем вашей операционной системы Linux. Это делается командой:

          Этого же результата (обновления кэша) можно достичь разными способами, в том числе имеется ещё несколько команд. Например, следующая команда также обновит кэш (нет принципиальной разницы, какую команду вы используете):

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

          Установка пакета

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

          Поиск пакетов

          Для поиска пакетов предназначена команда вида:

          Данная команда ищет по описанию пакетов и может выводить слишком большой список. Эта команда может пригодиться, если имя нужной утилиты не совпадает с названием пакета (например, один пакет содержит несколько утилит).

          Обратите внимание, что для данной команды, в отличие от большинства других с apt, не требуются права root (можно использовать без sudo).

          Поиск пакетов только по названию

          Предыдущая команда бывает бесполезной из-за слишком большого вывода информации. Вы можете использовать следующую команду для поиска по имени пакета:

          Вы также можете указать подстановочные символы, например для поиска по названию, начинающемуся на слово ПАКЕТ:

          Для поиска по названию, оканчивающемуся на слово ПАКЕТ:

          Для поиска по названию, в котором присутствует слово ПАКЕТ:

          Ещё более удобной, на мой взгляд, командой для поиска пакетов является:

          Последняя команда ищет в именах по слову ПАКЕТ и выводит список всех пакетов, где оно встречается. Использовать подстановочные символы не нужно.

          Как проверить, установлен ли пакет

          Вы можете использовать команды apt list или apt search не только для поиска пакетов, но и просмотра информации о том, установлены ли они.

          Рядом с описанием пакетов вы можете увидеть один из трёх вариантов:

          • строка «[установлен]» — пакет установлен вручную
          • строка «[установлен, автоматически]» — пакет установлен как зависимость или как включённый в метапакет (во время установке операционной системы Kali Linux активно использует метапакеты, поэтому многие инструменты имеют такую отметку)
          • ничего не написано — значит пакет не установлен

          Просмотр информации о пакете

          Эта команда поможет вам отобразить информацию о пакете или пакетах, запустите команду, указав все пакеты, информацию о которых вы хотите отобразить.

          Как удалить пакет

          Для удаления используйте команду вида

          Можно удалять сразу много пакетов за раз:

          Как полностью удалить пакет, вместе с конфигурационными файлами

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

          Итак, для полного удаления пакета используйте команду вида:

          Обновление всех пакетов системе в Kali Linux

          Чтобы обновить все пакеты, для которых вышли новые версии, а также установить необходимые зависимости и удалить мешающие пакеты, используется команда:

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

          Аналогичный результат можно получить командами (это одна из немногих команд, которая различается для apt и apt-get):

          Для удобства можно объединить команду обновления кэша и команду запуска полного обновления системы в одну, опция -y используется для того, чтобы у нас не спрашивалось подтверждение, а сразу начался процесс установки новых пакетов:

          Как узнать, в каком пакете содержится файл

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

          С помощью программы apt-file можно искать по именам файлов в пакетах (как установленных, так и нет). Также она может показать все файлы в пакете.

          Сразу после установки кэш данных о программах пуст. Чтобы его обновить нужно выполнить команду:

          Когда всё готово, то поиск осуществляется так:

          К примеру поиск файла ffi.h:

          У программы apt-file есть альтернативы, подробности смотрите в статье «Как в Linux узнать, в каком пакете содержится файл».

          Как проверить все зависимости пакета

          Эта команда поможет вам отобразить необработанную информацию о зависимостях конкретного указанного вами пакета.

          Как узнать, для каких программ данный пакет является зависимостью

          Если вы хотите удалить программу, но не уверены, нужна ли она для других программ, то вы можете проверить, для каких пакетов она является зависимостью командой вида:

          Как просмотреть список изменений пакета

          Для пакетов вы можете вывести список изменений, сделанных в различных версиях программы. Для этого выполните команду вида:

          Как скачать пакет без установки

          Если вы хотите скачать пакет без установки, например, чтобы изучить его или внести изменения, то выполните команду вида:

          Как проверить, всё ли впорядке с кэшем приложений

          Если вы хотите узнать, имеются ли сломанные зависимости, то выполните диагностическую команду:

          Как установить файл .deb

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

          Как удалить неиспользуемые пакеты

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

          Её использование безопасно и не должно приводить к проблемам.

          Как очистить старый репозиторий загруженных пакетов.

          Опция «clean» или «autoclean» удалит все старые локальные репозитории загруженных файлов пакетов.

          Исправление ошибок установки пакетов и зависимостей

          Опция -f исправляет, пытается привести в норму систему с нарушенными зависимостями. Эта опция, когда используется с install/remove, может пропустить какие-либо пакеты, чтобы позволить APT найти вероятное решение. Если пакеты указаны, эта команда должна полностью исправить проблему.

          Как мне перечислить все доступные пакеты?

          Чтобы вывести список всех доступных пакетов, введите следующую команду.

          Чтобы найти и перечислить все пакеты, начинающиеся с «СЛОВА», вы можете использовать следующую команду.

          Как проверить статистику кеша

          Подкоманда «stats» отображает общую статистику о кеше. Например, следующая команда отобразит Общее количество имен пакетов — это количество пакетов, найденных в кеше.

          Как установить или обновить только определённые пакеты?

          Подкоманда «install» отслеживается одним или несколькими пакетами, которые хотят установить или обновить.

          Как установить пакеты без обновления

          Использование подкоманды «—no-upgrade» предотвратит обновление уже установленных пакетов.

          Как обновить только определённые пакеты

          Команда «—only-upgrade» не устанавливает новые пакеты, а только обновляет уже установленные пакеты и отключает новую установку пакетов.

          Как установить конкретную версию пакета?

          Допустим, вы хотите установить только определённую версию пакетов, просто используйте «=» с именем пакета и добавьте желаемую версию.

          Как загрузить только исходный код пакета

          Чтобы загрузить только исходный код определенного пакета, используйте параметр «—download-only» с «именем пакета», как показано.

          Как я могу скачать и распаковать пакет

          Чтобы загрузить и распаковать исходный код пакета в определённый каталог, введите следующую команду.

          Как я могу скачать, распаковать и скомпилировать пакет

          Вы также можете загрузить, распаковать и скомпилировать исходный код одновременно, используя опцию «—compile», как показано ниже.

          Как мне найти и установить зависимости для сборки пакета?

          Эта команда «build-dep» выполняет поиск в локальных репозиториях в системе и устанавливает зависимости сборки для пакета. Если пакет не существует в локальном репозитории, она вернёт код ошибки.

          Как автоматически удалить зависимости удаляемого пакета

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

          Как найти все файлы пакета

          Следующая команда поможет вам составить список всех файлов, содержащихся в пакете:

          Как проверить пакет на наличие неработающих зависимостей.

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

          Как перечислить все рекомендуемые отсутствующие пакеты данного пакета

          Эта команда покажет, какие пакеты рекомендованы, но не установлены. Работает только в Linux Mint.

          Как проверить версию установленного пакета

          Следующая команда покажет вам версию установленного пакета.

          Резюме

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

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

Горин Павел/ автор статьи

Павел Горин — психолог и автор популярных статей о внутреннем мире человека. Он работает с темами самооценки, отношений и личного роста. Его экспертность основана на практическом консультировании и современных психологических подходах.

Понравилась статья? Поделиться с друзьями:
psihologiya-otnosheniy.ru
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: