Пакетные менеджеры Linux (apt, dnf, pacman)
| Debian, Ubuntu | dpkg (1994) и APT (1998), пакеты .deb |
|---|---|
| Fedora, RHEL | rpm (1997), yum (2003), dnf (с 2015), пакеты .rpm |
| Arch Linux | pacman (2002) |
| Alpine | apk |
| openSUSE | zypper |
| Универсальные форматы | 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), а не устанавливайте вручную.