apt: пакетный менеджер Debian/Ubuntu
«Я хочу поставить postgres» — на macOS вы говорите brew install, на Ubuntu — apt install. Но это упрощение. На самом деле в Debian/Ubuntu (и всех их производных — Mint, Pop_OS, Kali) есть два уровня инструментов: низкоуровневый dpkg и высокоуровневый apt. Эта связка обеспечивает разрешение зависимостей, скачивание из репозиториев, проверку подписей, базы установленных пакетов.
В этом уроке разберём, как это устроено, что значит «обновить пакеты», в чём разница update и upgrade, и как DE может из этого извлечь пользу.
dpkg и apt: два уровня
dpkg — низкоуровневый, apt — пользовательский фронтенд
Команда apt появилась в 2014 как «дружелюбный» интерфейс. До этого использовали apt-get (установка/удаление/обновление) и apt-cache (поиск/информация). Они до сих пор работают и часто встречаются в Docker-файлах и устаревших туториалах. В скриптах для production по-прежнему рекомендуют apt-get (его выход более стабильный, не меняется между версиями), а apt — для интерактивных сессий.
update vs upgrade — главная путаница
Это самое частое замешательство новичков. Команды разные:
Запомни различие — это два разных действия
Идиоматичный workflow:
# 1. Обновить index-файлы (метаданные)
sudo apt update
# 2. Установить обновления для всех установленных пакетов
sudo apt upgrade
# Можно объединить
sudo apt update && sudo apt upgrade -y
# -y автоматически отвечает «yes» на все вопросы
apt update без apt upgrade ничего не обновляет — просто обновляет локальные индексы. Это частая ошибка новичков: запустили update, увидели «X packages can be upgraded», подумали что обновили — и ушли. На самом деле нужно отдельно сделать upgrade.
install, remove, purge — управление пакетами
# Установить
sudo apt install postgresql-16
# Несколько разом
sudo apt install postgresql-16 redis-server nginx
# Без интерактивных вопросов (для скриптов)
sudo apt install -y htop
# Конкретную версию
sudo apt install postgresql-16=16.4-1
# Удалить (но оставить конфиги в /etc/)
sudo apt remove postgresql-16
# Удалить + конфиги
sudo apt purge postgresql-16
# Удалить ненужные зависимости (которые остались после remove)
sudo apt autoremove
Разница remove vs purge:
remove— удаляет бинари и пакетные файлы, но оставляет конфиги в/etc/. Если переустановите — настройки сохранятся.purge— удаляет всё, включая конфиги. Чистая «снести начисто».
Для DE на сервере при экспериментах удобно purge. Для production — обычно remove (вдруг переустановите и захочется старый конфиг).
search и show — узнать про пакет
# Найти пакет по имени или description
apt search postgresql
# Может быть много — фильтруй через grep
apt search postgresql | grep -i client
# Подробно про конкретный пакет
apt show postgresql-16
# Описание, версия, зависимости, размер
Полезно перед установкой посмотреть apt show <пакет> — увидеть какие зависимости подтянутся.
# Какая версия установлена и какая доступна
apt-cache policy postgresql-16
# Installed: 16.4-1
# Candidate: 16.4-1
# Version table:
# *** 16.4-1 500
# 500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
apt-cache policy — невероятно полезен для понимания, из какого репозитория доступна каждая версия. Если у вас две версии в разных репах с разными приоритетами — policy покажет, какая будет выбрана.
Репозитории и /etc/apt/sources.list
Откуда apt качает пакеты? Из репозиториев — серверов, на которых лежат подписанные коллекции .deb пакетов с metadata.
# Основной файл со списком репов
cat /etc/apt/sources.list
# Дополнительные репы лежат в:
ls /etc/apt/sources.list.d/
Формат строки:
deb http://archive.ubuntu.com/ubuntu/ noble main restricted universe multiverse
Где:
deb— тип (deb для бинарных, deb-src для исходников).http://archive.ubuntu.com/ubuntu/— URL репозитория.noble— codename релиза Ubuntu (24.04 LTS). Для Ubuntu 26.04 будетresolute.main restricted universe multiverse— компоненты:main— официально поддерживаемые Canonical, open-sourcerestricted— проприетарные драйверы, поддерживаемые Canonicaluniverse— community-поддерживаемое open-sourcemultiverse— проприетарное community-поддерживаемое
Что происходит когда вы делаете apt install postgresql-16
Ubuntu 26.04 LTS «Resolute Raccoon»
На май 2026 актуальная LTS — Ubuntu 26.04 LTS, codename Resolute Raccoon, релиз апрель 2026. Поддержка до 2031 года (LTS-стандарт — 5 лет, с подпиской ESM — до 12 лет).
Что нового важного для DE:
- Linux kernel 6.14, систему мониторинга существенно переработали.
- Bash 5.3 по умолчанию.
- Python 3.13 как
python3. - PostgreSQL 17 в репах (раньше был 16).
- Поддержка zstd compression для .deb пакетов (быстрее установка).
Переход с 24.04 LTS на 26.04 — do-release-upgrade. Команда обновляет sources.list (noble -> resolute), запускает apt full-upgrade, чистит устаревшие пакеты.
# Текущая версия Ubuntu
lsb_release -a
# или
cat /etc/os-release
DE-сценарии
Dockerfile: RUN apt-get install — пакеты в образе1. Установка стека для локального dev
# Обновить индексы
sudo apt update
# Postgres + клиент
sudo apt install -y postgresql-17 postgresql-client-17
# Запустить
sudo systemctl start postgresql
# Redis
sudo apt install -y redis-server
sudo systemctl start redis-server
# Python toolchain
sudo apt install -y python3.13 python3.13-venv python3-pip
# Базовые системные тулзы для работы
sudo apt install -y htop tmux ripgrep fd-find jq curl rsync
2. Установка из конкретной версии репозитория
# Например, нужен PostgreSQL 16, а в дефолтных репах 17
# Добавить PostgreSQL official repo
sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
# Теперь доступны все версии
sudo apt install -y postgresql-16
3. Lockdown версии (production)
В production важно фиксировать версию, чтобы автообновления не сломали продакшен:
# Заморозить версию пакета
sudo apt-mark hold postgresql-16
# Список заморожённых
apt-mark showhold
# Размораживание
sudo apt-mark unhold postgresql-16
apt-mark hold — пакет не будет обновляться даже при apt upgrade. Используется для критичных компонентов production-сервиса.
4. Что забирает место на диске
# Топ-20 пакетов по размеру установки
dpkg-query -W -f='${Installed-Size}\t${Package}\n' | sort -rn | head -20
# Размер в КБ
# Кэш скачанных .deb файлов (можно почистить)
sudo apt clean # удалить все скачанные .deb
sudo apt autoclean # удалить устаревшие
5. История установок
# Что устанавливал/удалял через apt
cat /var/log/apt/history.log
# Конкретно за период
grep -A 3 "Start-Date: 2026-05" /var/log/apt/history.log
Полезно когда «вчера это работало, а сегодня нет» — посмотреть, что обновлялось.
dpkg — низкоуровневые операции
dpkg — это уровень ниже apt. Прямые операции с .deb файлами:
# Установить локальный .deb (apt-альтернатива: apt install ./file.deb)
sudo dpkg -i package.deb
# Если есть проблемы с зависимостями — apt их разрешит
sudo apt install -f
# Список всех установленных пакетов
dpkg -l
# Подробно про конкретный пакет
dpkg -s postgresql-16
# Какие файлы установил этот пакет
dpkg -L postgresql-16
# Какой пакет владеет этим файлом
dpkg -S /usr/bin/psql
# postgresql-client-16: /usr/bin/psql
dpkg -S — крайне полезный обратный поиск: «у меня есть файл /usr/bin/jq, из какого он пакета?». Помогает понять, что устанавливается с каким пакетом.
Когда apt не справляется
apt — отличный инструмент, но иногда:
- Старый Ubuntu — нет свежего софта. Например, на Ubuntu 22.04 в репах PostgreSQL 14. Решение: добавить official PostgreSQL repo.
- Зависимости конфликтуют. Например, два пакета требуют разные версии Python. Решение: контейнеризация, snap-пакеты, ручная компиляция.
- Нет в репах вообще. Например, проприетарный софт. Решение: скачать .deb с сайта,
sudo dpkg -i, или сторонний репозиторий.
# Добавить сторонний репозиторий (пример: VS Code)
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt update
sudo apt install code
Попробуй сам
# 1. Версия Ubuntu
lsb_release -a
# 2. Обнови индексы и посмотри что доступно
sudo apt update
apt list --upgradable
# 3. Поиск
apt search ripgrep
apt show ripgrep
# 4. Установка
sudo apt install -y ripgrep fd-find jq
# 5. Где живёт ripgrep
which rg
dpkg -S $(which rg)
# 6. Список установленных пакетов с postgres в имени
dpkg -l | grep postgres
# 7. Сколько занимает места конкретный пакет
dpkg-query -W -f='${Installed-Size}\t${Package}\n' | grep python3
# В КБ
# 8. История установок
sudo tail /var/log/apt/history.log
# 9. Удаление (выполни только если ставил для теста)
sudo apt remove ripgrep
Cross-link: следующий урок 02 — dnf на RHEL/Fedora. Модуль 14 — systemd, который запускает сервисы, установленные через apt. Модуль 17 — bash-скрипты для автоматического деплоя зависимостей.