Подробный гайд по APT для администрирования серверов Debian/Ubuntu

Подробный практический гайд по APT для администрирования серверов Debian/Ubuntu: установка, обновление, репозитории, безопасность и автоматизация.

2026.08.17                  


Подробный гайд по APT для администрирования серверов Debian/UbuntuПодробный гайд по APT для администрирования серверов Debian/Ubuntu Гайд по APT именно как по пакетному менеджеру для администрирования серверов на базе Debian/Ubuntu и их производных.


Подробный гайд по APT для администрирования сервера

1. Что такое APT

APT — это высокоуровневая система управления пакетами поверх dpkg.

  • dpkg — низкоуровневый инструмент установки и удаления .deb-пакетов.
  • APT — решает зависимости, скачивает пакеты из репозиториев, обновляет систему, управляет версиями.

Обычно используется на:



  • Debian
  • Ubuntu
  • Linux Mint
  • Kali Linux
  • других Debian-based системах

Важно:

APT не управляет snap, flatpak, pip, npm и прочими экосистемами. Это отдельный слой пакетной базы ОС.


2. Основные файлы и каталоги APT

Конфигурация репозиториев

/etc/apt/sources.list
/etc/apt/sources.list.d/
  • sources.list — основной файл репозиториев
  • sources.list.d/ — дополнительные репозитории в виде .list или .sources

Конфигурация APT

/etc/apt/apt.conf
/etc/apt/apt.conf.d/

Лучше использовать файлы в apt.conf.d, а не один монолитный apt.conf.

Приоритеты и pinning

/etc/apt/preferences
/etc/apt/preferences.d/

Используется для управления версиями пакетов и политиками установки.

Аутентификация в частных репозиториях

/etc/apt/auth.conf
/etc/apt/auth.conf.d/

Кэш и индексы

/var/lib/apt/lists/
/var/cache/apt/archives/
/var/lib/dpkg/status
/var/lib/apt/extended_states
  • /var/lib/apt/lists/ — индексы пакетов после apt update
  • /var/cache/apt/archives/ — скачанные .deb-файлы
  • /var/lib/dpkg/status — база установленного софта
  • /var/lib/apt/extended_states — информация о автоматически установленных пакетах

Логи

/var/log/apt/history.log
/var/log/apt/term.log
/var/log/dpkg.log
/var/log/unattended-upgrades/

3. Репозитории в APT

Общая логика

Репозиторий описывается строкой вида:

deb http://mirror/debian bookworm main

Где:

  • deb — тип репозитория
  • http://mirror/debian — адрес
  • bookworm — кодовое имя выпуска
  • main — компоненты

Пример для Debian 12 bookworm

Файл /etc/apt/sources.list:

deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware
deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware

Опционально backports:

deb http://deb.debian.org/debian bookworm-backports main contrib non-free non-free-firmware

Что значат компоненты в Debian

  • main — свободные пакеты, официально поддерживаемые Debian
  • contrib — свободные пакеты, зависящие от несвободных
  • non-free — несвободные пакеты
  • non-free-firmware — проприетарные прошивки, важно для серверов с некоторыми сетевыми картами/RAID-контроллерами

Пример для Ubuntu 22.04 jammy

deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-updates main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse

Компоненты Ubuntu

  • main — официально поддерживаемое свободное ПО
  • restricted — проприетарные драйверы и компоненты
  • universe — сообщество поддерживает
  • multiverse — несвободное ПО

Современный формат deb822

Начиная с новых версий Debian/Ubuntu рекомендуется формат .sources.

Пример /etc/apt/sources.list.d/debian.sources:

Types: deb
URIs: http://deb.debian.org/debian
Suites: bookworm bookworm-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Types: deb
URIs: http://security.debian.org/debian-security
Suites: bookworm-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

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


4. Добавление сторонних репозиториев

Правильный современный способ

Не используйте apt-key, он устарел. Лучше хранить ключи в /etc/apt/keyrings.



Пример:

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://repo.example.com/key.gpg -o /tmp/example.gpg

sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg /tmp/example.gpg

echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://repo.example.com/apt stable main" | sudo tee /etc/apt/sources.list.d/example.list

sudo apt update

Перед импортом ключа полезно посмотреть его отпечаток:

gpg --show-keys /tmp/example.gpg

5. Базовые команды APT

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

sudo apt update

Список доступных обновлений

apt list --upgradable

Безопасное обновление без удаления пакетов

sudo apt upgrade

Полное обновление, при котором возможна установка/удаление пакетов

sudo apt full-upgrade

В apt-get аналог:

sudo apt-get dist-upgrade

Установка пакета

sudo apt install nginx

Установка конкретной версии

apt-cache policy nginx
sudo apt install nginx=1.24.0-1

Удаление без конфигов

sudo apt remove nginx

Полное удаление с конфигами

sudo apt purge nginx

Удаление ненужных зависимостей

sudo apt autoremove

С конфигами:

sudo apt autoremove --purge

Очистка кэша скачанных пакетов

sudo apt clean

Удаление только устаревших кэшей

sudo apt autoclean

Поиск пакета

apt search nginx

Информация о пакете

apt show nginx

Просмотр политик версии

apt-cache policy nginx

Зависимости пакета

apt-cache depends nginx

Обратные зависимости

apt-cache rdepends nginx

Список установленных пакетов

apt list --installed

или

dpkg -l

Какие файлы установил пакет

dpkg -L nginx

Какому пакету принадлежит файл

dpkg -S /usr/sbin/nginx

6. Правильный порядок обновления сервера

Для production-сервера не стоит делать обновление «в лоб» без подготовки.

Шаг 1. Проверить место на дисках

df -h / /var /boot

Особенно важно:

  • /var
  • /boot Если /boot переполнен старыми ядрами, обновление может завершиться ошибкой.

Шаг 2. Обновить индексы

sudo apt update

Шаг 3. Посмотреть, что будет обновлено

apt list --upgradable

Шаг 4. Сделать симуляцию

sudo apt -s upgrade

и при необходимости:

sudo apt -s full-upgrade

Шаг 5. Выполнить обновление

Для большинства серверов:

sudo apt upgrade

Если есть пакеты, которые «held back», и вы понимаете последствия:

sudo apt full-upgrade

Шаг 6. Удалить ненужные зависимости

Сначала симуляция:

sudo apt -s autoremove --purge

Если всё нормально:

sudo apt autoremove --purge

Шаг 7. Очистить кэш

sudo apt clean

Шаг 8. Проверить, нужна ли перезагрузка

[ -f /var/run/reboot-required ] && echo "Reboot required"

Также полезно:

needrestart -b

Если needrestart не установлен:

sudo apt install needrestart

7. Разница между upgrade и full-upgrade

apt upgrade

  • обновляет установленные пакеты;
  • старается не удалять пакеты;
  • более безопасный вариант для сервера.

apt full-upgrade

  • может устанавливать новые пакеты;
  • может удалять установленные пакеты ради разрешения зависимостей;
  • использовать только после анализа вывода симуляции.

8. Управление версиями, hold и pinning

Посмотреть доступные версии

apt-cache policy nginx
apt-cache madison nginx
apt list -a nginx

Зафиксировать пакет

sudo apt-mark hold nginx

Снять фиксацию

sudo apt-mark unhold nginx

Посмотреть зафиксированные пакеты

apt-mark showholds

Pinning через preferences

Файл, например:

sudo nano /etc/apt/preferences.d/99-custom

Пример: не ставить пакеты из backports автоматически

Package: *
Pin: release a=bookworm-backports
Pin-Priority: 100

Установить пакет из backports вручную:

sudo apt -t bookworm-backports install some-package


Пример: зафиксировать конкретную ветку версии

Package: nginx
Pin: version 1.24.*
Pin-Priority: 1001

Пример: запретить установку пакета

Package: some-bad-package
Pin: release *
Pin-Priority: -1

Приоритеты pinning

Упрощённо:

Приоритет Что означает
>= 1000 разрешает установку даже с понижением версии
990 приоритет целевого выпуска
500 обычный репозиторий
100 установленная версия
< 0 запрет установки

Проверка после настройки:

apt-cache policy nginx

9. Автоматические обновления безопасности

Для сервера крайне желательно включить хотя бы автоматические security-обновления.

Установка

sudo apt install unattended-upgrades apt-listchanges

Включение

sudo dpkg-reconfigure -plow unattended-upgrades

Файл периодики

/etc/apt/apt.conf.d/20auto-upgrades

Пример:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "7";

Проверка таймеров

systemctl list-timers | grep apt

Обычно есть:

  • apt-daily.timer
  • apt-daily-upgrade.timer

Тест без реального применения

sudo unattended-upgrades --dry-run

10. Неинтерактивные обновления в скриптах

Для автоматизации лучше использовать apt-get, а не apt.

Безопасный неинтерактивный upgrade

sudo DEBIAN_FRONTEND=noninteractive apt-get -y \
  -o Dpkg::Options::=--force-confdef \
  -o Dpkg::Options::=--force-confold \
  upgrade

full-upgrade в скриптах

Использовать с осторожностью:

sudo DEBIAN_FRONTEND=noninteractive apt-get -y \
  -o Dpkg::Options::=--force-confdef \
  -o Dpkg::Options::=--force-confold \
  dist-upgrade

11. Работа с локальными .deb-пакетами

Установка локального пакета с зависимостями

sudo apt install ./package.deb

Установка через dpkg

sudo dpkg -i package.deb

Если не хватило зависимостей:

sudo apt --fix-broken install

Скачать пакет без установки

apt-get download nginx

12. Диагностика пакетной системы

Проверка целостности зависимостей

sudo apt-get check

Проверка dpkg

sudo dpkg --audit

Проверка контрольных сумм файлов

sudo apt install debsums
sudo debsums -s

Проверка изменённых конфигурационных файлов

sudo debsums -e

Поиск пакетов, установленных автоматически

apt-mark showauto

Поиск пакетов, установленных вручную

apt-mark showmanual

Остаточные конфиги после удаления

dpkg -l | grep '^rc'

Удалить остатки конфигураций:

dpkg -l | awk '/^rc/ {print $2}' | xargs -r sudo apt-get purge -y

13. Логи и аудит

История операций APT

less /var/log/apt/history.log

Старые архивы:

zless /var/log/apt/history.log.1.gz

Терминальный вывод dpkg

less /var/log/apt/term.log

Лог dpkg

less /var/log/dpkg.log

Кто и что устанавливал

grep 'Commandline' /var/log/apt/history.log*

14. Типовые проблемы и их решение

1. APT заблокирован другим процессом

Ошибки вида:

Could not open lock file /var/lib/dpkg/lock-frontend

Сначала проверить процессы:

ps aux | grep -E 'apt|dpkg|unattended-upgrade'
systemctl list-units --state=running | grep -E 'apt|packagekit|unattended'

Посмотреть, кто держит lock:

sudo lsof /var/lib/dpkg/lock-frontend

Если процесс действительно завис и вы уверены в действиях:

sudo kill -TERM PID
sudo dpkg --configure -a

В сомнительных случаях лучше перезагрузить сервер.


2. Ошибки GPG / NO_PUBKEY

Пример:

The following signatures couldn't be verified because the public key is not available

Правильный путь:

  • получить ключ от владельца репозитория;
  • сохранить его в /etc/apt/keyrings;
  • указать signed-by в sources. Не рекомендуется бездумно использовать apt-key.



3. Hash Sum mismatch

Часто бывает из-за кэширующего прокси или повреждённых списков.

sudo rm -rf /var/lib/apt/lists/*
sudo apt clean
sudo apt update

Это удаляет только индексы пакетов, а не установленные пакеты.


4. Broken dependencies

sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt update
sudo apt-get check

5. Пакеты held back

Посмотреть:

apt-mark showholds
apt-cache policy package-name

Часто причина в:

  • hold;
  • pinning;
  • конфликте версий;
  • стороннем репозитории.

6. Кончилось место в /boot

Проверить:

df -h /boot

Посмотреть установленные ядра:

dpkg -l | grep '^ii' | grep linux-image

Текущее ядро:

uname -r

Очень осторожно: не удаляйте текущее ядро и метапакеты вроде linux-image-amd64 или linux-generic.

Обычно помогает:

sudo apt -s autoremove --purge
sudo apt autoremove --purge

7. Release info change

Ошибка при смене кодового имени/архива.

Если вы уверены в изменениях:

sudo apt update --allow-releaseinfo-change

8. Пакет не найден

Проверить:

sudo apt update
apt-cache policy package-name
cat /etc/os-release

Возможные причины:

  • репозиторий не подключён;
  • неверный компонент;
  • пакет доступен только в another suite;
  • опечатка в имени.

15. Настройка поведения APT

Файлы в /etc/apt/apt.conf.d/.

Пример полезных настроек

/etc/apt/apt.conf.d/99local:

APT::Install-Recommends "false";
APT::Install-Suggests "false";
Acquire::Retries "3";

Важно

Отключение Recommends может уменьшить размер установки, но иногда ломает удобство и функциональность. Для серверов часто допустимо, но тестировать нужно осторожно.


Аутентификация в приватных репозиториях

/etc/apt/auth.conf.d/example.conf:

machine repo.example.com
login aptuser
password secretpass

Права лучше ограничить:

sudo chmod 600 /etc/apt/auth.conf.d/example.conf

16. Обновление на мажорную версию

Ubuntu

Для Ubuntu предпочтительный путь:

sudo do-release-upgrade

Для сервера обязательно используйте screen или tmux.

Пример:

tmux new -s upgrade
sudo do-release-upgrade

Debian

Для Debian типовой путь:

  1. сделать backup;
  2. прочитать release notes;
  3. обновить текущую систему;
  4. заменить кодовое имя в источниках;
  5. выполнить apt update и full-upgrade;
  6. перезагрузиться;
  7. проверить сервисы.

Пример замены кодового имени:

sudo sed -i 's/bookworm/trixie/g' /etc/apt/sources.list /etc/apt/sources.list.d/*.list

Но делать это нужно только после подготовки и понимания последствий.


17. Безопасность сервера через APT

Минимизируйте источники

  • используйте только официальные репозитории там, где возможно;
  • не добавляйте лишние PPA на production;
  • не смешивайте Debian и Ubuntu репозитории;
  • не включайте testing/sid на стабильных серверах без крайней необходимости.

Не отключайте проверку подписей

Избегайте:

trusted=yes
--allow-unauthenticated
allow-insecure

Допустимо только в изолированных тестовых средах.


Регулярно ставьте security-обновления

Минимум:

sudo apt update
sudo apt upgrade

Лучше:

  • включить unattended-upgrades для security;
  • настроить уведомления;
  • определить maintenance window.

Проверка уязвимостей

Для Debian можно использовать:

sudo apt install debsecan
debsecan

Или более предметно:

debsecan --suite stable --format report

18. Инвентаризация и резервное копирование состояния

Список установленных пакетов

dpkg-query -W -f='${Package}\t${Version}\t${Status}\n' | grep 'install ok installed' > installed-packages.tsv


Сохранить selections

dpkg --get-selections > dpkg-selections.txt

Восстановление selections

sudo dpkg --set-selections < dpkg-selections.txt
sudo apt-get dselect-upgrade

Это не полноценный disaster recovery, но помогает быстро восстановить набор пакетов.


Резервное копирование важных файлов

Перед крупными обновлениями сохраняйте:

sudo cp -a /etc/apt /root/backup/etc-apt-$(date +%F)
sudo cp /var/lib/dpkg/status /root/backup/dpkg-status-$(date +%F)

Также очень полезно версионировать /etc:

sudo apt install etckeeper

19. Локальный репозиторий и кэширование

Простой локальный репозиторий для лаборатории

Установить dpkg-dev:

sudo apt install dpkg-dev

Создать каталог:

sudo mkdir -p /srv/apt-repo
sudo cp /path/to/*.deb /srv/apt-repo/
cd /srv/apt-repo
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

Добавить источник:

deb [trusted=yes] file:/srv/apt-repo ./

Важно:

trusted=yes отключает проверку подписи. Для production так делать нежелательно.


20. Работа на air-gapped серверах

Если сервер без интернета, можно использовать apt-offline.

На offline-сервере

sudo apt-get update
sudo apt-offline set /tmp/apt.sig --update

На машине с интернетом

apt-offline get /tmp/apt.sig --bundle /tmp/apt-bundle.zip

Снова на offline-сервере

sudo apt-offline install /tmp/apt-bundle.zip
sudo apt-get update

21. Практические примеры для автоматизации

Скрипт безопасного обновления сервера

#!/usr/bin/env bash
set -euo pipefail

log() {
  printf '[%s] %s\n' "$(date '+%F %T')" "$1"
}

trap 'log "ERROR at line $LINENO"' ERR

log "Starting APT maintenance"

apt-get update

log "Simulating upgrade"
apt-get -s upgrade | grep -E '^(Inst|Remv|Conf)' || true

log "Running upgrade"
DEBIAN_FRONTEND=noninteractive apt-get -y \
  -o Dpkg::Options::=--force-confdef \
  -o Dpkg::Options::=--force-confold \
  upgrade

log "Running autoremove"
DEBIAN_FRONTEND=noninteractive apt-get -y \
  -o Dpkg::Options::=--force-confdef \
  -o Dpkg::Options::=--force-confold \
  autoremove --purge

apt-get clean

if [ -f /var/run/reboot-required ]; then
  log "Reboot required"
else
  log "No reboot required"
fi

log "Done"

Минимальная установка для контейнеров

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

22. Частые ошибки администраторов

1. Обновление сразу на production без теста

Сначала staging, потом production.

2. Использование full-upgrade без симуляции

Сначала:

sudo apt -s full-upgrade

3. Слепое добавление PPA

Особенно на серверах с длительным сроком жизни.

4. Смешивание разных дистрибутивов и веток

Например, stable + testing + сторонний репозиторий с другими версиями библиотек.

5. Удаление метапакетов без понимания последствий

Например:

  • linux-generic
  • linux-image-amd64
  • ubuntu-desktop
  • postgresql-common

6. Игнорирование перезагрузки после обновления ядра и библиотек

После обновлений часто нужно:

  • перезагрузить сервер;
  • перезапустить сервисы;
  • проверить needrestart.

23. Шпаргалка по главным командам

sudo apt update
apt list --upgradable
sudo apt upgrade
sudo apt full-upgrade
sudo apt autoremove --purge
sudo apt clean
sudo apt install package
sudo apt remove package
sudo apt purge package
sudo apt reinstall package
apt show package
apt-cache policy package
apt-cache depends package
apt-cache rdepends package
dpkg -L package
dpkg -S /path/to/file


sudo apt-mark hold package
sudo apt-mark unhold package
apt-mark showholds
sudo dpkg --configure -a
sudo apt --fix-broken install
sudo apt-get check
sudo dpkg --audit
sudo debsums -s
needrestart -b
[ -f /var/run/reboot-required ] && echo reboot required

24. Рекомендованный регламент для production-сервера

Еженедельно или ежемесячно

  1. apt update
  2. проверка списка обновлений
  3. симуляция upgrade
  4. установка обновлений
  5. проверка сервисов
  6. перезагрузка или рестарт сервисов при необходимости

Ежеквартально

  • аудит установленных пакетов
  • проверка лишних репозиториев
  • проверка hold/pinning
  • проверка логов APT
  • проверка места в /boot и /var
  • тест восстановления из backup

Перед мажорными изменениями

  • snapshot ВМ/LVM/btrfs/zfs
  • backup /etc
  • backup списка пакетов
  • проверка, что сервисы стартуют после reboot
  • maintenance window
  • доступ к консоли, а не только SSH

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


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта