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

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

Дистрибутивы Менеджер Формат
Debian, Ubuntu, Linux Mint apt .deb
Fedora, RHEL и совместимые dnf .rpm
Старые CentOS/RHEL yum .rpm
Arch Linux, Manjaro pacman .pkg.tar.zst

Определить дистрибутив:

cat /etc/os-release

Системные операции обычно требуют sudo.


Основные понятия

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

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

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

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


apt: Debian и Ubuntu

apt — высокоуровневый интерфейс для .deb-пакетов. На низком уровне с ними работает dpkg.

Обновление индексов

sudo apt update

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

Установка

sudo apt install nginx
sudo apt install git curl make

Переустановка:

sudo apt reinstall nginx

Обновление

sudo apt update
sudo apt upgrade

Полное обновление с возможным изменением состава зависимостей:

sudo apt full-upgrade

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

Удаление

sudo apt remove nginx

remove обычно сохраняет системные конфигурационные файлы пакета. Удаление вместе с ними:

sudo apt purge nginx

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

Ненужные автоматические зависимости:

sudo apt autoremove

Предварительный просмотр:

apt --simulate autoremove

Поиск и информация

apt search nginx
apt show nginx
apt policy nginx
apt list --installed
apt list --upgradable

apt policy показывает установленную и доступные версии, а также приоритеты источников.

Локальный .deb

Рекомендуемый способ, разрешающий зависимости:

sudo apt install ./package.deb

Низкоуровневая установка:

sudo dpkg -i package.deb
sudo apt --fix-broken install

Команды dpkg

dpkg -l                   # установленные пакеты
dpkg -s nginx             # сведения о пакете
dpkg -L nginx             # файлы пакета
dpkg -S /usr/sbin/nginx   # владелец файла
dpkg-deb -c package.deb   # содержимое файла .deb

Очистка кэша

sudo apt autoclean   # удалить устаревшие файлы
sudo apt clean       # очистить кэш загруженных пакетов

dnf: Fedora, RHEL и совместимые системы

dnf — высокоуровневый менеджер RPM-пакетов.

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

sudo dnf makecache           # обновить метаданные
sudo dnf install nginx       # установить
sudo dnf upgrade             # обновить систему
sudo dnf remove nginx        # удалить
sudo dnf autoremove          # удалить ненужные зависимости

В некоторых системах dnf update является синонимом dnf upgrade.

Проверка обновлений без установки:

dnf check-update

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

Поиск и информация

dnf search nginx
dnf info nginx
dnf list installed
dnf list --available nginx
dnf provides '*/nginx'
dnf provides /usr/bin/semanage

Локальный .rpm

sudo dnf install ./package.rpm

Это предпочтительнее прямого rpm -i, поскольку dnf разрешает зависимости через репозитории.

Группы и история

dnf group list
sudo dnf group install "Development Tools"
dnf history
dnf history info 12
sudo dnf history undo 12

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

Очистка кэша:

sudo dnf clean all

yum

yum применялся в старых выпусках CentOS и RHEL. В современных RPM-системах команда yum часто является совместимым интерфейсом к dnf.

sudo yum install nginx
sudo yum update
sudo yum remove nginx
yum search nginx
yum info nginx
yum list installed
sudo yum clean all

В сценариях автоматизации следует учитывать версию ОС: старый yum и совместимый интерфейс поверх dnf могут вести себя по-разному.


pacman: Arch Linux

В параметрах pacman заглавная буква обозначает основную операцию:

Обновление системы

sudo pacman -Syu

Команда обновляет базы и все установленные пакеты. Arch Linux не поддерживает частичные обновления. Команда pacman -Sy без последующего полного обновления может привести к несовместимости версий.

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

sudo pacman -S nginx
sudo pacman -S git curl base-devel
sudo pacman -R nginx
sudo pacman -Rs nginx
sudo pacman -Rns nginx

Поиск и информация

pacman -Ss nginx             # поиск в репозиториях
pacman -Si nginx             # сведения из репозитория
pacman -Qi nginx             # сведения об установленном пакете
pacman -Q                    # все установленные пакеты
pacman -Ql nginx             # файлы пакета
pacman -Qo /usr/bin/curl     # владелец файла

Поиск пакета по файлу:

sudo pacman -Fy
pacman -F bin/example

Сиротские зависимости

pacman -Qdt

После проверки списка их можно удалить:

sudo pacman -Rns $(pacman -Qdtq)

Если pacman -Qdtq ничего не вывел, команду удаления запускать не нужно.

Локальный пакет и кэш

sudo pacman -U ./package.pkg.tar.zst
sudo paccache -r

paccache входит в pacman-contrib. Полная очистка pacman -Scc лишает возможности быстро использовать сохранённую старую версию.


Сравнение команд

Операция apt dnf yum pacman
Обновить метаданные apt update dnf makecache yum makecache часть pacman -Syu
Обновить систему apt upgrade dnf upgrade yum update pacman -Syu
Установить apt install PKG dnf install PKG yum install PKG pacman -S PKG
Удалить apt remove PKG dnf remove PKG yum remove PKG pacman -R PKG
Поиск apt search TEXT dnf search TEXT yum search TEXT pacman -Ss TEXT
Информация apt show PKG dnf info PKG yum info PKG pacman -Si PKG
Установленные apt list --installed dnf list installed yum list installed pacman -Q

Репозитории

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

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

APT

Источники задаются в:

/etc/apt/sources.list
/etc/apt/sources.list.d/*.list
/etc/apt/sources.list.d/*.sources

Пример современного файла .sources:

Types: deb
URIs: https://example.org/debian
Suites: stable
Components: main
Signed-By: /etc/apt/keyrings/example.gpg

После изменения:

sudo apt update

Для сторонних источников предпочтительны отдельные ключи в /etc/apt/keyrings/ и привяка Signed-By, а не глобальное доверие ключу.

DNF/YUM

Файлы обычно находятся в /etc/yum.repos.d/*.repo:

[example]
name=Example Repository
baseurl=https://example.org/rpm/$basearch
enabled=1
gpgcheck=1
gpgkey=https://example.org/RPM-GPG-KEY-example
dnf repolist
dnf repolist --all
sudo dnf --disablerepo=example upgrade
sudo dnf --enablerepo=example install PACKAGE

Pacman

Основная конфигурация: /etc/pacman.conf; зеркала: /etc/pacman.d/mirrorlist.

[example]
SigLevel = Required DatabaseOptional
Server = https://example.org/$arch

После изменения официальных источников обычно выполняют:

sudo pacman -Syu

AUR — пользовательский репозиторий рецептов сборки, а не официальный бинарный репозиторий pacman. Перед сборкой следует читать и проверять PKGBUILD.


Поиск пакета по файлу

Для уже установленного файла:

dpkg -S /path/to/file
rpm -qf /path/to/file
pacman -Qo /path/to/file

Список файлов пакета:

dpkg -L PACKAGE
rpm -ql PACKAGE
pacman -Ql PACKAGE

Поиск отсутствующего файла в репозиториях:

# DNF
dnf provides '*/filename'

# Pacman
sudo pacman -Fy
pacman -F filename

# Debian/Ubuntu
sudo apt install apt-file
sudo apt-file update
apt-file search '/filename$'

Управление зависимостями

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

sudo apt autoremove
sudo dnf autoremove
pacman -Qdt

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

Просмотр зависимостей

APT:

apt-cache depends nginx
apt-cache rdepends nginx

DNF:

dnf repoquery --requires nginx
dnf repoquery --whatrequires nginx

Pacman (pactree входит в pacman-contrib):

pactree nginx
pactree -r nginx

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

Исправление незавершённых операций

Debian/Ubuntu:

sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt check

RPM-системы:

sudo dnf check
rpm -Va

rpm -Va требует интерпретации: изменённый конфигурационный файл не обязательно означает повреждение.

Arch Linux:

pacman -Qk PACKAGE
pacman -Qkk PACKAGE

Выбор и фиксация версии

APT:

apt policy PACKAGE
sudo apt install PACKAGE=VERSION
sudo apt-mark hold PACKAGE
apt-mark showhold
sudo apt-mark unhold PACKAGE

DNF:

dnf --showduplicates list PACKAGE
sudo dnf install PACKAGE-VERSION

Фиксация версий может блокировать важные обновления и создавать несовместимости. В Arch Linux параметр IgnorePkg существует, но частичное обновление системы не поддерживается.


Сборка из исходников

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

1. Получение и проверка исходников

tar -xf project-1.0.tar.gz
cd project-1.0

Или:

git clone https://example.org/project.git
cd project

Следует использовать официальный источник, проверить контрольную сумму или подпись и прочитать README/INSTALL.

2. Инструменты сборки

# Debian/Ubuntu
sudo apt install build-essential

# Fedora/RHEL
sudo dnf group install "Development Tools"

# Arch Linux
sudo pacman -S --needed base-devel

Также нужны библиотеки разработки: в Debian их имена часто заканчиваются на -dev, в RPM-системах — на -devel.

3. Настройка и компиляция

Autotools:

./configure --prefix=/usr/local
make
make test
sudo make install

CMake:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/usr/local
cmake --build build
ctest --test-dir build
sudo cmake --install build

Meson:

meson setup build --prefix=/usr/local
meson compile -C build
meson test -C build
sudo meson install -C build

Конкретные команды определяются проектом. Компиляцию не следует выполнять от root: повышенные права нужны только для записи в системные каталоги.

Префикс установки

Ручные системные установки обычно размещают в /usr/local, чтобы отделить их от файлов дистрибутива. Пользовательская установка может использовать $HOME/.local:

./configure --prefix="$HOME/.local"
make
make install
export PATH="$HOME/.local/bin:$PATH"

make uninstall поддерживается не всеми проектами. Более управляемый вариант — собрать нативный .deb, .rpm или пакет по PKGBUILD, чтобы файлы зарегистрировались в базе менеджера.

Нельзя без проверки запускать конструкции вида:

curl URL | sh

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


Диагностика

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

ps aux | grep -E 'apt|dpkg|dnf|yum|pacman'

Нельзя сразу удалять lock-файлы: активная установка может повредиться.

Проверка свободного места:

df -h
du -sh /var/cache/apt/archives 2>/dev/null
du -sh /var/cache/dnf 2>/dev/null
du -sh /var/cache/pacman/pkg 2>/dev/null

При недоступности репозитория проверяют сеть, DNS, системное время, адрес источника, поддержку версии ОС, ключ подписи, прокси и свободное место. Отключение TLS или проверки подписи не является нормальным исправлением.


Рекомендации


Краткая памятка

# Debian / Ubuntu
sudo apt update
sudo apt install PACKAGE
sudo apt upgrade
sudo apt remove PACKAGE
sudo apt autoremove
apt search TEXT
apt show PACKAGE

# Fedora / RHEL
sudo dnf install PACKAGE
sudo dnf upgrade
sudo dnf remove PACKAGE
sudo dnf autoremove
dnf search TEXT
dnf info PACKAGE

# YUM
sudo yum install PACKAGE
sudo yum update
sudo yum remove PACKAGE

# Arch Linux
sudo pacman -Syu
sudo pacman -S PACKAGE
sudo pacman -Rns PACKAGE
pacman -Ss TEXT
pacman -Si PACKAGE
pacman -Qi PACKAGE

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