Альманах пакетных менеджеров 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.


    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 in 'gcc.i586<5.1'#установить пакет для архитектуры i586, версии младше 5.1;
    zypper in php5*;

    Управление репозиториями производится командой 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 packave # обновить пакет;
    $ 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.


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


    1. How To List All Installed Packages In Linux
    2. Package Management Basics: apt, yum, dnf, pkg
    3. 45 Zypper Commands to Manage SUSE Linux Package Management
    4. ArchWiki — pacman
    Поделиться публикацией
    Комментарии 44
      +4

      Есть вариант с apt-get и rpm пакетами (успешно используется в Alt Linux).


      Еще есть такая игрушка, как pkcon (вроде из убунты, но реально встречал только на Sailfish).


      Программа Synaptic с графическим интерфейсом решает 90% задач управления пакетами.

        0
        спрашивал на opennet у евангелиста Alt Linux (М.Шигорина) зачем надо было это делать? Для чего? Мне не ответили и я так и не понял. Может вы в курсе? Это чисто эстетика?
          0

          Могу ошибаться, но вроде придумали apt для rpm не они. Они только прикрутили и доработали под свой дистрибутив.
          Зачем оно было придумано, достоверно, наверное, знает только автор.
          Могу только предположить, что из-за популярности apt-get и прочих apt для пакетов .deb и наличия некоторого числа оберток вокруг apt-get.

            +4
            На тот момент команде ALT Linux понравилась эстетика apt, а вся автоматизация сборки пакетов была заточена под rpm. Вот и совместили. Результат вполне не плох.
              0

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

            +3

            Есть еще nixos "pure functional" как утверждают создатели. Выглядит гораздо интереснее прочих вариаций на тему, на мой взгляд.

              +3
              В debian-based со всеми задачами также успешно справляется и apt.

              apt install package  # установить/обновить пакет
              apt remove package   # удалить пакет
              apt purge package    # удалить с данными/конфигами
              apt update           # обновить информацию о пакетах
              apt upgrade          # обновить пакеты
              apt dist-upgrade     # обновить систему
              apt search package   # найти пакет
              apt depends package  # зависимсости пакета
              apt rdepends package # обратные зависимости
              apt list --installed # список установленных пакетов
              apt show package     # сведения о пакете
              


              Аналогом dpkg -L может быть apt-file.
                0

                Не со всеми. В отличие от apt-get, не умеет --no-install-recommens и --purge.

                  +1

                  Может и не со всеми, но с указанными вами задачами точно справится.
                  apt install package --install-recommends=no
                  И apt remove package --purge тоже умеет.

                    0

                    Полезно, буду знать. А как вы это нашли? apt help про эти опции молчит и man apt тоже.

                      +2

                      Насколько помню, на эти опции наткнулся благодаря автодополнению:


                      $ apt install --
                      --allow-change-held-packages   --ignore-missing
                      --allow-downgrades             --install-recommends
                      --allow-insecure-repositories  --install-suggests
                      --allow-remove-essential       --only-upgrade
                      --allow-unauthenticated        --print-uris
                      --arch-only                    --purge
                      --assume-no                    --reinstall
                      --assume-yes                   --remove
                      --auto-remove                  --show-progress
                      --download                     --show-upgraded
                      --download-only                --simulate
                      --dry-run                      --solver
                      --fix-broken                   --target-release
                      --fix-missing                  --trivial-only
                      --fix-policy                   --upgrade
                      --force-yes                    --verbose-versions
                      --ignore-hold                  
                        0

                        Спасибо. С документацией печалька, завёл баг в убунту: https://bugs.launchpad.net/ubuntu/+source/apt/+bug/1730498

                          0

                          Всё ок с документацией:


                             DESCRIPTION
                             apt provides a high-level commandline interface for the package management system. It is intended as an end user interface and enables some options better suited for interactive usage by default compared to more specialized APT tools like apt-get(8) and apt-cache(8).
                          
                             Much like apt itself, its manpage is intended as an end user interface and as such only mentions the most used commands and options partly to not duplicate information in multiple places and partly to avoid overwhelming readers with a cornucopia of options and details.

                          То есть: тут обзор основных режимов, конкретные флаги смотри в манам к другим утилитам.


                          Абзац про install начинается с


                          install, remove, purge (apt-get(8))


                          Ну то есть см man 8 apt-get. apt install поддерживает все ключи, поддерживаемые apt-get install

                            0

                            Да, невнимательно смотрел, (apt-get(8)) не заметил. Спасибо.

                  0
                  Мне казалось, что, во всяком случае в Убунте, apt считается теперь более предпочтительным, чем apt-get
                    0

                    В документации и handbook-е Debian упоминается, что apt предпочтителнее именно для интерактивного использования (присутствует цветной вывод, индикатор выполения).


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

                    Да и при попытке использования в неинтерактивном режиме он выдаст warning:


                    WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
                      0
                      закидайте меня тряпками :) но интерактивность есть в apt кот наплакал :) если уж говорить про интерактивность, то уж aptitude, тут тебе и красивая интерактивная псевдографика и прочий обмен мыслями между пользователем и программной оболочкой…
                  +5
                  $ sudo emerge -pvuDN -1 #(aka --oneshot) Обычная установка, но пакеты не будут добавлены в файл world и, следовательно, не будут в дальнейшем обновляться.
                  $ sudo emerge -pvuDN --backtrack=COUNT #где COUNT целое значение, обозначает количество обращений к системе контроля ошибок, в случае если определение зависимостей завершается ошибкой по причине конфликта или неразрешенной зависимости (значение по умолчанию: 10).
                  $ sudo emerge -pvuDN --keep-going=y # Если "у", то продолжает установку после ошибки настолько, насколько это возможно. При возникновении ошибки зависимости для остальных пакетов автоматически пересчитываются, все пакеты с неудовлетворенными зависимостями автоматически исключаются.
                  $ sudo emerge -pvuDN --load-average=LOAD # При выставленной опции новая сборка не будет начата, пока не завершится предыдущая установка, а среднее число процессов на исполнение не ниже LOAD (число с плавающей точкой). Данную опцию рекомендуется использовать в связке с --jobs, чтобы избежать чрезмерной нагрузки.
                  $ sudo emerge -pvuDN --jobs=JOBS # Указывает, сколько(JOBS) пакетов будет собираться одновременно. Если задать эту опцию без аргумента, одновременно может выполняться неограниченное количество заданий.
                    +3
                    Вообще, в emerge много интересных параметров. Например:
                    --buildpkg [ y | n ] (сокращенно -b) Указывает emerge собирать бинарные пакеты для всех обработанных ебилдов, а не только разворачивать.
                    --usepkg [ y | n ] (сокращенно -k) Указывает emerge использовать бинарные пакеты (из каталога $PKGDIR), если они доступны, тем самым по возможности избегая продолжительных компиляций.
                    --prune (-P) Удаляет из системы все версии пакетов, кроме последних установленных релизов. Для отображения обратных зависимостей используйте с --prune ключ --verbose.
                    Ну и --fetchonly (сокращенно -f) для скачивания без установки и --buildpkgonly (сокращенно -B) создает бинарные пакеты для всех обработанных ебилдов без установки — при условии, что все зависимости времени построения уже установлены в системе.
                    Весьма гибкая система. Если внимательно прочесть man(русскую версию для gentoo никак «до ума» довести не могу. Есть от calculate, но она весьма скудна), то проблем с зависимостями и обновлением не возникает(кроме случаев «кривой» сборки package мантейнерами. Бывает, да).
                      +3

                      Ещё из достаточно популярных есть apk — используется в Alpine Linux, который часто встречается в контейнерах докера.


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

                        0
                        Про dnf забыли.
                          +1
                          Не увидел ответа на вопрос:
                          чьих этот файл, откуда вообще взялась эта библиотека?

                          dpkg -S
                          0
                          не увидел yaourt для арча.
                          Работает ещё и для сборки пакетов из aur с repo.archlinux.fr
                          там ещё есть powerprill, но я ниасилил :)
                            0
                            Или pacaur))

                            И для debian указали update, а для арча нет:
                            pacman -Sy

                            Ну и
                            pacman -Su
                            pacman -Syu
                            

                            0
                            snappy?
                            0
                            Есть еще urpm/rpmdrake на чем работают Mandriva/Rosa/Mageia
                              +1
                              Так же хотел бы добавить такие менеджеры пакетов как opkg/apkg, котрые используются в OpenWRT(LEDE) и alpinelinux
                                0
                                а Альпины просто чудовищно быстрый пакетный менеджер, я поражен. Apt в несколько раз медленнее.
                                0

                                By the way… Pacman используется в msys2 для Windows.

                                  +3
                                  $ aptitude update #проверить и установить обновления;

                                  Не-а, не установить. Только обновить список. И apt update еще предупреждает об обновлениях, (apt-get и aptitude — нет). Ubuntu16.04, если что.
                                    0

                                    А также XBPS для Void Linux. И eopkg для Solus OS.

                                      0

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

                                        –2
                                        Не применяйте предложенные варианты использования emerge для Gentoo. Как автор сам признался, тут оно только для галочки, но лучше б он умолчал о portage, чем написал это. Гентушникам оно без пользы, а новички споткнутся. Уважаемый автор, не делайте так больше, пожалуйста.
                                          0
                                          Уважаемый, я с оформлением man застопорился. А перевод готов полностью.
                                          Что вы имеете сказать по сути вопроса?
                                          0
                                          dnf system-upgrade download --refresh --releasever=26
                                          dnf system-upgrade reboot

                                          Действует как
                                          apt-get dist-upgrade
                                            0
                                              +1
                                              wajig это очень грамотная обёртка над хаотичным набором дебиановских тулзов, может не во всём идеальная, но только она и годится на гордое звание пакетного менеджера, остальное это лишь отдельные части системы управления пакетами.
                                              Большой плюс, особенно для новичков, что в одном man'е можно узреть все возможности, получается единая дока по управлению пакетами.
                                                0
                                                Некоторые функции доступны с дополнительным МП dpkg.
                                                Таки dpkg — это «medium-level» между dpkg-deb, работающий непосредственно с файлами пакетов, и apt/aptitude, предоставляющими полноценный интерфейс для пользователей и активно использующие эту утилиту. В зависимостях у apt отсутствует, поскольку находится в списке базовых системных пакетов.
                                                  0
                                                  Как вы думаете, можно ли считать brew пакетным менеджером в macOS? (Хотя бы в том смысле, в котором автор называет emerge пакетным менеджером?)
                                                    0

                                                    Сейчас и так малое количество пользователей линукса сильно фагментировано, это печально.


                                                    Например, в статье тема сторонних [бинарных] репозиториев не раскрыта. А как бы полезно было, если б придумали универсальный формат пакета, интегрируемый как в Debian, так и в CentOS с Arch и Gentoo, так и соответственно — универсальный пакетный менеджер. Тогда все залежи бинарников в PPA и сторонних портежах смогло активно использоваться всеми линуксоидами.


                                                    Трансформеры deb-rpm (типа alien) частично решают проблему, но только для пакетов, имеющих мало зависимостей, да и то: только для отдельных файлов-пакетов — передаваемых без пакетных менеджеров.

                                                      +1
                                                      универсальный формат — tar-архив дерева файлов комплекта ПО, присутствует что в рпм что в дебе :)

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

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

                                                      Slackware Linux и pkgtools / slackpkg

                                                      # installpkg файл-пакета ... # установить пакеты
                                                      upgradepkg файл-пакета ... # обновить установленные пакеты
                                                      removepkg имя-пакета ...   # удалить пакеты
                                                      removepkg -copy пакет      # создать копию дерева файлов пакета
                                                      explodepkg файл-пакета ... # распаковать пакет, не исполнять сценарии
                                                      makepkg файл-пакета        # собрать поддерево ./ в пакет
                                                      pkgtool                    # dialog-овая установка, удаление, настройка
                                                      
                                                      slackpkg check-updates     # проверить наличие обновлений
                                                      slackpkg update [gpg]      # обновить сведения о пакетах / ключ
                                                      slackpkg install маски     # установить пакеты
                                                      slackpkg reinstall маски   # переустановить пакеты
                                                      slackpkg upgrade маски     # обновить пакеты
                                                      slackpkg upgrade-all       # обновить всё доступное
                                                      slackpkg remove маски      # удалить пакеты
                                                      slackpkg generate-template # создать шаблон
                                                      slackpkg install-template  # установить набор по шаблону
                                                      slackpkg remove-template   # удалить набор по шаблону
                                                      slackpkg clean-system      # удалить сторонние пакеты
                                                      slackpkg file-search файл  # пакет по файлу
                                                      slackpkg search маска      # поиск пакета
                                                      slackpkg blacklist маска   # исключить пакеты из обработки
                                                      slackpkg info пакет        # сведения о пакете
                                                      slackpkg new-config        # выполнить слияние конфигов
                                                      

                                                      Помимо штатных существует также несколько сторонних менеджеров: slapt-get/slapt-src (по мотивам apt), они же в графике: gslapt/sourcery (эта четверка является основным менеджером в Salix, сохраняющем бинарную совместимость со Slackware), sbopkg (автоматизация сборки пакетов по слакбилдам), а также еще некоторое количество, появившихся относительно недавно…

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

                                                      Самое читаемое