Урок по треку Linux 7 мин

Пакеты и загрузка системы за 7 минут

apt и dnf, репозитории и зависимости, порядок загрузки от firmware до systemd, ядро и модули.

Два вопроса, которые любят на собесах DevOps и системных инженеров: «что происходит с момента нажатия кнопки питания до приглашения логина» и «как устроены пакеты и почему apt upgrade на проде надо делать аккуратно».

Пакетные менеджеры

Два основных семейства:

Debian, UbuntuRHEL, Rocky, Alma, Fedora
Формат.deb.rpm
Низкий уровеньdpkgrpm
Высокий уровеньaptdnf (раньше yum)

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

apt update                     # обновить списки пакетов из репозиториев
apt install nginx              # поставить с зависимостями
apt upgrade                    # обновить установленные
apt remove nginx               # удалить, конфиги остаются
apt purge nginx                # удалить вместе с конфигами
apt autoremove                 # убрать ненужные зависимости
apt-cache policy nginx         # какая версия откуда и какая выбрана
dpkg -l | grep nginx           # что установлено
dpkg -L nginx                  # какие файлы поставил пакет
dpkg -S /usr/sbin/nginx        # какому пакету принадлежит файл
apt-mark hold postgresql-16    # заморозить версию

В семействе RHEL: dnf install, dnf update, rpm -qa, rpm -ql, rpm -qf, dnf history undo.

apt update не обновляет программы, а только скачивает свежие списки. Частая ошибка в Dockerfile: apt-get update и apt-get install в разных слоях, из-за кеша слоёв список устаревает.

Репозитории и подписи

Источники лежат в /etc/apt/sources.list и /etc/apt/sources.list.d/ (в Ubuntu 24.04 формат deb822, файлы *.sources). Пакеты подписаны: apt проверяет подпись метаданных репозитория ключом, который указан для этого источника (signed-by). Старый способ apt-key add добавлял ключ доверенным для всех репозиториев, поэтому он устарел.

Обновления на проде

  • Обновления безопасности ставят регулярно и автоматически (unattended-upgrades в Ubuntu, dnf-automatic в RHEL).
  • Крупные обновления (новая версия PostgreSQL, ядра) планируют, сначала на стенде.
  • Версии критичных пакетов фиксируют (apt-mark hold, versionlock в dnf).
  • После обновления библиотек процессы держат старые версии в памяти: их надо перезапустить (needrestart подскажет). После обновления ядра нужна перезагрузка или live patching.

Порядок загрузки

  1. Прошивка (UEFI или BIOS). Проверка железа (POST), поиск загрузчика. UEFI читает загрузчик с раздела EFI (ESP, FAT32), BIOS из первого сектора диска (MBR).
  2. Загрузчик GRUB. Показывает меню, читает конфиг, загружает в память ядро (vmlinuz) и initramfs, передаёт ядру параметры командной строки (root=UUID=..., quiet). При Secure Boot перед GRUB обычно стоит подписанный shim.
  3. Ядро. Инициализирует процессоры, память, драйверы, монтирует initramfs как временный корень.
  4. initramfs. Маленькая система в памяти с модулями, нужными, чтобы найти и смонтировать настоящий корень: драйверы диска, LVM, RAID, расшифровка LUKS. Затем переключение на настоящий корень.
  5. init (PID 1). systemd читает юниты и запускает систему до цели по умолчанию (multi-user.target для серверов, graphical.target для десктопов).
  6. Сервисы и логин. sshd, getty на консоли, приложения.
systemd-analyze                  # сколько заняла каждая стадия
systemd-analyze blame            # какие юниты дольше всего стартовали
systemd-analyze critical-chain
systemctl get-default
journalctl -b -1                 # логи предыдущей загрузки
cat /proc/cmdline                # параметры ядра

Ядро и модули

uname -r                 # версия ядра
lsmod                    # загруженные модули
modprobe br_netfilter    # загрузить модуль с зависимостями
modinfo e1000e
sysctl -a                # параметры ядра в рантайме

Параметры ядра в рантайме меняет sysctl (на лету) и файлы в /etc/sysctl.d/ (постоянно). Модули для автозагрузки перечисляют в /etc/modules-load.d/. Пример из Kubernetes: модуль br_netfilter и net.ipv4.ip_forward = 1.

Когда сервер не грузится

  • Ошибка в /etc/fstab: systemd уходит в emergency mode. Входим, правим fstab, mount -a.
  • Сломался GRUB или ядро: в меню GRUB выбрать предыдущее ядро.
  • Забыли пароль root: параметр ядра init=/bin/bash или rd.break (RHEL) из меню GRUB при физическом или консольном доступе.
  • В облаке: серийная консоль или подключение диска к другой машине.

Частые ошибки

  • Путать apt update и apt upgrade.
  • Обновлять всё подряд на проде без стенда и плана отката.
  • Добавлять ключи через устаревший apt-key.
  • Забыть перезапустить сервисы после обновления библиотек (например OpenSSL).
  • Не знать, что делает initramfs.

Что спросят на собесе

  • Опиши загрузку Linux от кнопки питания до логина.
  • Что такое initramfs и зачем он нужен.
  • Чем apt update отличается от apt upgrade, remove от purge.
  • Как узнать, какому пакету принадлежит файл.
  • Как безопасно обновлять пакеты на проде.

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.