Вы набираете две команды, жмёте Enter и уходите пить кофе. Но за эти секунды система делает куда больше, чем кажется.
1. Сначала идёт
apt updateЭто не обновление пакетов — это обновление *списков* пакетов. APT обходит все репозитории из
/etc/apt/sources.list и скачивает свежие индексы. Без этого шага upgrade работает по устаревшей карте.2. Разрешение зависимостей
APT строит граф зависимостей: какие пакеты нужно обновить, какие версии совместимы, что тянет что за собой. Это NP-сложная задача в общем случае — и APT решает её эвристиками. Иногда неидеально.
3. Скачивание
.deb-файловПакеты загружаются в
/var/cache/apt/archives/. Если соединение оборвётся, то ничего страшного, при следующем запуске докачает.4. Проверка подписей
Каждый пакет проверяется по GPG-подписи. Это защита от подмены: если подпись не совпадает, то установка не пройдёт.
5. Распаковка и скрипты
.deb это ar-архив, внутри которого лежат control.tar и data.tar. APT распаковывает файлы, а потом запускает скрипты: preinst → установка → postinst. Именно здесь может что-то пойти не так.6.
apt upgrade vs apt full-upgradeupgrade никогда не удаляет пакеты и не устанавливает новые зависимости, если это ломает что-то существующее. full-upgrade (он же dist-upgrade) — может. Он агрессивнее и умнее одновременно.Что может пойти не так
- Конфликт версий библиотек
- Новый конфиг поверх старого (dpkg спросит — не игнорируйте)
- Обновление ядра без перезагрузки (старое ядро всё ещё работает до ребута)
-
held packages — пакеты на удержании, которые не обновятся без явного разрешенияПолезные команды:
apt list --upgradable # что будет обновлено
apt-get -s upgrade # симуляция без изменений
/var/log/apt/history.log # история всех операций
Две строчки в терминале и десятки процессов под капотом. Теперь вы знаете, что именно происходит за этим скромным
[Y/n].📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#арсенал_инженера