Подробный гайд по 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— свободные пакеты, официально поддерживаемые Debiancontrib— свободные пакеты, зависящие от несвободных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.timerapt-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 типовой путь:
- сделать backup;
- прочитать release notes;
- обновить текущую систему;
- заменить кодовое имя в источниках;
- выполнить
apt updateиfull-upgrade; - перезагрузиться;
- проверить сервисы.
Пример замены кодового имени:
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-genericlinux-image-amd64ubuntu-desktoppostgresql-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-сервера
Еженедельно или ежемесячно
apt update- проверка списка обновлений
- симуляция upgrade
- установка обновлений
- проверка сервисов
- перезагрузка или рестарт сервисов при необходимости
Ежеквартально
- аудит установленных пакетов
- проверка лишних репозиториев
- проверка hold/pinning
- проверка логов APT
- проверка места в
/bootи/var - тест восстановления из backup
Перед мажорными изменениями
- snapshot ВМ/LVM/btrfs/zfs
- backup
/etc - backup списка пакетов
- проверка, что сервисы стартуют после reboot
- maintenance window
- доступ к консоли, а не только SSH
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.