Пакетные менеджеры Linux (apt, dnf, pacman)

Материал из llmdocs — справочник разработчика
Пакетные менеджеры Linux (apt, dnf, pacman)
Debian, Ubuntudpkg (1994) и APT (1998), пакеты .deb
Fedora, RHELrpm (1997), yum (2003), dnf (с 2015), пакеты .rpm
Arch Linuxpacman (2002)
Alpineapk
openSUSEzypper
Универсальные форматыFlatpak, Snap, AppImage
Функциизависимости, репозитории, подписи, обновления

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

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

Два уровня

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

Семейство Низкий уровень Высокий уровень Формат
Debian, Ubuntu dpkg apt (apt-get) .deb
Fedora, RHEL, Rocky rpm dnf (ранее yum) .rpm
Arch Linux — pacman .pkg.tar.zst
Alpine — apk .apk
openSUSE rpm zypper .rpm

dpkg появился в Debian в 1994 году, а APT — в 1998-м; формат RPM создан в Red Hat в 1997 году, менеджер yum — в 2003-м, а в 2015 году Fedora перешла на его преемника dnf.[2][3]

Основные команды

Действие apt dnf pacman apk
Обновить списки пакетов apt update (автоматически) pacman -Sy apk update
Обновить систему apt upgrade dnf upgrade pacman -Syu apk upgrade
Установить apt install nginx dnf install nginx pacman -S nginx apk add nginx
Удалить apt remove nginx dnf remove nginx pacman -R nginx apk del nginx
Найти apt search nginx dnf search nginx pacman -Ss nginx apk search nginx
Какому пакету принадлежит файл dpkg -S /usr/bin/curl dnf provides /usr/bin/curl pacman -Qo /usr/bin/curl apk info --who-owns
Убрать ненужные зависимости apt autoremove dnf autoremove pacman -Rns $(pacman -Qdtq) —

В Debian и Ubuntu команда apt удобнее для интерактивной работы, а apt-get — для скриптов: её вывод и поведение стабильны между версиями.[1] В Arch не рекомендуется частичное обновление (pacman -Sy без -u): при скользящих выпусках это ломает зависимости.[4]

Репозитории и доверие

Список репозиториев хранится в /etc/apt/sources.list.d/ (Debian), /etc/yum.repos.d/ (Fedora и RHEL), /etc/pacman.conf (Arch). Метаданные и пакеты подписаны ключами дистрибутива, и менеджер отказывается ставить пакет с неверной подписью — это защищает от подмены по пути. Сторонние репозитории (например, официальный репозиторий Docker или PostgreSQL) подключают вместе с их ключом подписи.

# Debian/Ubuntu: добавить сторонний репозиторий с ключом
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian trixie stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt update && sudo apt install docker-ce

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

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

На серверах исправления безопасности стоит ставить автоматически: в Debian и Ubuntu — пакетом unattended-upgrades,[6] в Fedora и RHEL — dnf-automatic. Обновление ядра и системных библиотек часто требует перезапуска служб или перезагрузки; утилиты needrestart и needs-restarting подскажут, что перезапустить.

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

Чтобы пакет не обновлялся (например, критичная версия СУБД), его закрепляют: apt-mark hold postgresql-17, dnf versionlock add ....

Пакеты в Docker-образах

В Dockerfile установку пакетов объединяют с очисткой кэша в одной инструкции, чтобы не раздувать слой:

RUN apt-get update \
 && apt-get install -y --no-install-recommends curl ca-certificates \
 && rm -rf /var/lib/apt/lists/*

В Alpine то же делает apk add --no-cache curl.[5]

Универсальные форматы

Flatpak и Snap распространяют настольные приложения одинаково для всех дистрибутивов, со всеми зависимостями внутри и в песочнице; AppImage — один исполняемый файл без установки. Они удобны для свежих версий приложений, но занимают больше места и слабее интегрированы с системой. Для языков программирования существуют свои менеджеры — pip и uv для Python, npm для JavaScript, Cargo для Rust; системным пакетным менеджером их зависимости лучше не смешивать.

Советы

  • Устанавливайте программы из репозиториев дистрибутива, когда это возможно: они получают обновления безопасности.
  • Не используйте sudo pip install в системный Python — для этого есть виртуальные окружения.
  • Фиксируйте список установленных пакетов в коде инфраструктуры (Ansible, Dockerfile), а не устанавливайте вручную.

См. также

Источники

  1. Debian Wiki — Apt
  2. Debian Reference — Debian package management
  3. DNF documentation
  4. ArchWiki — pacman
  5. Alpine Linux Wiki — Alpine Package Keeper
  6. Debian Wiki — UnattendedUpgrades