← Linux: администрирование
10 мин · просто · Урок 3 из 10

Менеджеры пакетов: apt, dnf, apk

Как ставить и обновлять софт на разных дистрибутивах: репозитории, update vs upgrade, разница apt/dnf/apk.

Зачем менеджер пакетов

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

Софт лежит в репозиториях — серверах с пакетами, которым доверяет система. Менеджер скачивает пакеты оттуда и проверяет подписи.

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

apt: Debian и Ubuntu

apt update              # обновить список доступных пакетов из репозиториев
apt install nginx       # поставить пакет
apt upgrade             # обновить установленные пакеты
apt remove nginx        # удалить пакет
apt search nginx        # найти пакет по имени

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

dnf: RHEL, Rocky, AlmaLinux, Fedora

dnf install nginx
dnf upgrade
dnf remove nginx
dnf search nginx

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

apk: Alpine

apk add nginx           # поставить
apk del nginx           # удалить
apk update              # обновить индекс
apk upgrade             # обновить пакеты

Alpine минималистичный, его apk очень быстрый. Поэтому Alpine — частая основа для маленьких Docker-образов: apk add --no-cache ставит пакет, не оставляя кеш индекса в слое образа.

В Dockerfile

Внутри образов есть нюанс: после установки чистят кеш, чтобы не раздувать слой. Иначе скачанные списки пакетов навсегда останутся в образе.

# Debian/Ubuntu
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*

# Alpine
RUN apk add --no-cache curl

apt-get (а не apt) используют в скриптах и Dockerfile: у него стабильный вывод без интерактивных подсказок.

Что важно запомнить

Менеджер пакетов ставит софт из доверенных репозиториев и тянет зависимости. Команда зависит от дистрибутива: apt (Debian/Ubuntu), dnf (RHEL-семейство), apk (Alpine).

update обновляет список доступного, upgrade ставит сами обновления. Их постоянно путают. В Dockerfile берут apt-get/apk --no-cache и чистят кеш, чтобы не раздувать слой.

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

Прошли материал до конца? Отметьте урок пройденным.