Learning Platform
Глоссарий Troubleshooting
Урок 12.01 · 22 мин
Начальный
aptdpkgDebianUbuntupackage management/etc/apt

apt: пакетный менеджер Debian/Ubuntu

«Я хочу поставить postgres» — на macOS вы говорите brew install, на Ubuntu — apt install. Но это упрощение. На самом деле в Debian/Ubuntu (и всех их производных — Mint, Pop_OS, Kali) есть два уровня инструментов: низкоуровневый dpkg и высокоуровневый apt. Эта связка обеспечивает разрешение зависимостей, скачивание из репозиториев, проверку подписей, базы установленных пакетов.

В этом уроке разберём, как это устроено, что значит «обновить пакеты», в чём разница update и upgrade, и как DE может из этого извлечь пользу.


dpkg и apt: два уровня

dpkg vs apt — два уровня абстракции

dpkg — низкоуровневый, apt — пользовательский фронтенд

aptHigh-level frontend. Скачивание из репозиториев, разрешение зависимостей, обновления, поиск. Это то, чем вы пользуетесь каждый день
использует
dpkgLow-level: установка одного .deb файла, удаление, просмотр содержимого, база установленных пакетов в /var/lib/dpkg/. apt вызывает dpkg чтобы реально установить пакеты
apt-cache, apt-get, aptitudeСтарые / альтернативные frontend-ы. apt-get — классика для скриптов, aptitude — TUI. apt — современная замена для интерактивного использования

Команда apt появилась в 2014 как «дружелюбный» интерфейс. До этого использовали apt-get (установка/удаление/обновление) и apt-cache (поиск/информация). Они до сих пор работают и часто встречаются в Docker-файлах и устаревших туториалах. В скриптах для production по-прежнему рекомендуют apt-get (его выход более стабильный, не меняется между версиями), а apt — для интерактивных сессий.


update vs upgrade — главная путаница

Это самое частое замешательство новичков. Команды разные:

apt update vs apt upgrade

Запомни различие — это два разных действия

apt updateRefresh metadata: скачивает свежие index-файлы с серверов репозиториев (Packages.gz, Release файлы). Список ДОСТУПНЫХ пакетов в кэше обновляется. Ничего не устанавливается
apt upgradeInstall upgrades: смотрит на установленные пакеты и сравнивает с актуальной информацией в кэше. Если есть новые версии — устанавливает. Перед upgrade обычно нужен update
apt full-upgradeТо же что upgrade, но разрешает удалять старые пакеты если новые версии этого требуют (изменения зависимостей). Используется при distro upgrade Ubuntu 24.04 -> 26.04

Идиоматичный workflow:

# 1. Обновить index-файлы (метаданные)
sudo apt update

# 2. Установить обновления для всех установленных пакетов
sudo apt upgrade

# Можно объединить
sudo apt update && sudo apt upgrade -y
# -y автоматически отвечает «yes» на все вопросы
WARNING

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-source
    • restricted — проприетарные драйверы, поддерживаемые Canonical
    • universe — community-поддерживаемое open-source
    • multiverse — проприетарное community-поддерживаемое
Жизнь установки пакета

Что происходит когда вы делаете apt install postgresql-16

apt
Local cache
Repository server
dpkg
ищет пакет в индексенашёл: postgres 16.4, deps: libpq, libssl...GET /pool/main/p/postgresql/postgresql-16_16.4-1.deb.deb файл + GPG-подписьпроверка подписи через apt-keyустанови этот .debраспаковка в /, запуск postinst

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 — отличный инструмент, но иногда:

  1. Старый Ubuntu — нет свежего софта. Например, на Ubuntu 22.04 в репах PostgreSQL 14. Решение: добавить official PostgreSQL repo.
  2. Зависимости конфликтуют. Например, два пакета требуют разные версии Python. Решение: контейнеризация, snap-пакеты, ручная компиляция.
  3. Нет в репах вообще. Например, проприетарный софт. Решение: скачать .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-скрипты для автоматического деплоя зависимостей.


Проверка знанийKnowledge check
В чём разница между `apt update` и `apt upgrade`? Что произойдёт, если запустить только update?
ОтветAnswer
apt update — обновляет ЛОКАЛЬНЫЕ метаданные репозиториев: скачивает свежие Packages.gz и Release файлы с серверов репозиториев, чтобы apt знал об актуальных версиях доступных пакетов. Сами пакеты при этом НЕ обновляются. apt upgrade — устанавливает обновления для уже установленных пакетов, сверяясь с тем, что есть в локальных метаданных. То есть upgrade без предварительного update будет работать со старыми метаданными (может пропустить свежие обновления). Идиоматический workflow: sudo apt update && sudo apt upgrade. Если запустить только update — увидите сообщение типа «X packages can be upgraded», но реально ничего не установится. Это частая ошибка новичков, которые думают, что apt update что-то обновляет.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 5. В чём разница между `apt update` и `apt upgrade`?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 4