Как обновить систему и установить базовые утилиты (apt/yum/dnf) на VPS?

В статье разберём:

  • как подготовить сервер к обновлению (резервный доступ, сеть, время);
  • как определить дистрибутив и доступный пакетный менеджер (apt/dnf/yum);
  • чем отличаются update/upgrade/dist-upgrade и dnf upgrade;
  • как установить «джентльменский набор» утилит для администрирования;
  • типовые ошибки при обновлении и как их исправить.

Что понадобится

  • Доступ по SSH: IP-адрес, логин root или пользователь с sudo. Желательно иметь доступ к веб-консоли (VNC/Web Console) в панели хостинга на случай потери SSH.

  • Чистый терминал на Windows (PowerShell) или Linux/macOS. Проверим, что SSH-клиент установлен:

    ssh -V
    ssh -h

    Если команда не найдена: на Windows включите «OpenSSH Client» в дополнительных компонентах, на Linux/macOS SSH-клиент обычно предустановлен.

Подготовка перед обновлением

  1. Откройте второй канал доступа. Запустите второе окно SSH, чтобы при ошибке перезапуска службы/сети вы могли быстро откатиться. На Windows просто откройте ещё один PowerShell и подключитесь теми же реквизитами.

  2. Проверьте сетевое соединение и DNS. Обновление требует доступа к зеркалам репозиториев.

    # Быстрая проверка IP-соединения
    ping -c 1 1.1.1.1 || ping -c 1 8.8.8.8
    
    # Проверка DNS-резолвинга доменных имён
    ping -c 1 deb.debian.org || echo "Проблема с DNS?"
    curl -I https://archive.ubuntu.com || echo "Нет доступа к HTTPS?"
    
    # Дополнительно (systemd-resolved):
    resolvectl status | sed -n '1,60p'
    cat /etc/resolv.conf | sed -n '1,60p'

    Типовые ошибки и решения:

    • Temporary failure in name resolution / Name or service not known — некорректный DNS.

      # Временно укажем публичный DNS (systemd-resolved):
      sudo bash -c 'printf "[Resolve]\nDNS=1.1.1.1 8.8.8.8\nFallbackDNS=9.9.9.9\n" > /etc/systemd/resolved.conf.d/dns.conf'
      sudo systemctl restart systemd-resolved
      
      # Без resolved: пропишите nameserver в /etc/resolv.conf (только если он не символическая ссылка):
      sudo sed -i '1inameserver 1.1.1.1' /etc/resolv.conf
    • curl: (60) SSL certificate problem — неверное время/дата ломают TLS-проверку.

      timedatectl status
      sudo timedatectl set-ntp true
      # Если NTP выключен или часовой пояс неверный:
      sudo timedatectl set-timezone UTC && sudo timedatectl set-ntp true
  3. Сделайте снимок (snapshot) диска в панели провайдера, если сервер продуктивный. Это безопасная точка отката в случае конфликта пакетов или kernel-обновления.

  4. Проверьте привилегии. Должен работать sudo:

    sudo -v || echo "Нет sudo? Выполните вход под root: su -"

    Если «sudo: command not found»: войдите под root (su -) и установите sudo пакетным менеджером вашей системы (ниже определим какой).

Определяем дистрибутив и пакетный менеджер

Нужно понять, что у вас: Debian/Ubuntu (apt) или RHEL-совместимая система (dnf/yum). Универсальные способы:

# Основной паспорт системы
cat /etc/os-release

# Ядро (полезно при крупных апгрейдах)
uname -r

# Что из менеджеров доступно:
command -v apt  && echo "Используем apt"
command -v dnf  && echo "Используем dnf"
command -v yum  && echo "Используем yum"

Примеры идентификации:

  • Debian/Ubuntu: в /etc/os-release поля ID=debian или ID=ubuntu. Менеджер — apt.

  • Rocky/AlmaLinux/CentOS Stream: ID_LIKE="rhel fedora", менеджер — dnf (на старых — может быть yum, который является совместимым фронтом к dnf).

  • Amazon Linux: версии 2/2023 — dnf/yum (зависит от поколения); смотрите /etc/os-release.

Частые ошибки и как их починить:

  • lsb_release: command not found — на минимальных образах утилиты LSB отсутствуют. Это не критично, используйте /etc/os-release. При желании установите:

    # Debian/Ubuntu:
    sudo apt update
    sudo apt install -y lsb-release
    
    # RHEL-семейство:
    sudo dnf install -y redhat-lsb-core || sudo yum install -y redhat-lsb-core
  • apt: command not found — вы не на Debian/Ubuntu. Используйте dnf или yum.

  • dnf: command not found, но есть yum — используйте yum. На очень минимальных образах может встречаться microdnf:

    command -v microdnf && echo "Доступен microdnf (OCI-минимальные образы)"
  • sudo: command not found — войдите под root (su -) и установите пакет sudo соответствующим менеджером:

    # Примеры:
    apt update && apt install -y sudo
    dnf install -y sudo
    yum install -y sudo

Обновление системы через apt (Ubuntu/Debian)

Если у вас Ubuntu или Debian, используем apt для обновления пакетов. Всегда выполняйте сначала update (обновление индекса пакетов), затем upgrade или full-upgrade.

# Обновляем список пакетов
sudo apt update

# Устанавливаем доступные обновления (без удаления пакетов)
sudo apt upgrade -y

# Полное обновление (может обновить ядро и заменить пакеты)
sudo apt full-upgrade -y

Разбор команд:

  • apt update — синхронизирует список пакетов с репозиториями.

  • apt upgrade — обновляет только те пакеты, которые можно заменить без удаления других.

  • apt full-upgrade — более глубокое обновление, может удалить или заменить пакеты, включая ядро. Используйте осторожно на продакшн-серверах.

Обновление пакетов через apt в Ubuntu

Типовые ошибки и решения

  • «Could not resolve» / «Temporary failure in name resolution» — нет доступа к DNS или интернету. Проверьте сеть:

    ping -c 1 google.com || ping -c 1 8.8.8.8

    Если IP пингуется, но домены — нет, значит проблема с /etc/resolv.conf или DNS.

  • «dpkg was interrupted» — прерванная установка пакетов.

    sudo dpkg --configure -a
  • «Unable to acquire dpkg frontend lock» — уже запущен другой процесс apt/dpkg.

    ps aux | grep apt
    sudo kill -9 PID_процесса
    sudo rm /var/lib/dpkg/lock-frontend /var/lib/apt/lists/lock /var/cache/apt/archives/lock

    После этого повторите sudo apt update.

  • «The following packages have been kept back» — пакеты не обновлены, так как требуют зависимостей. Используйте:

    sudo apt full-upgrade
  • «404 Not Found [IP: …]» — репозиторий недоступен или устарел.

    Проверьте содержимое /etc/apt/sources.list и замените зеркала на актуальные (для старых Ubuntu/Debian используйте архивные репозитории old-releases).

Совет: после обновления ядра перезагрузите сервер, чтобы изменения вступили в силу:

sudo reboot

Обновление системы через dnf / yum (CentOS, Rocky, AlmaLinux)

На серверах RHEL-семейства (CentOS Stream, Rocky, AlmaLinux, Amazon Linux) используется dnf или yum. В новых версиях yum является просто алиасом к dnf, поэтому команды практически идентичны.

# Проверим версию пакетного менеджера
dnf --version || yum --version

# Обновляем список пакетов и устанавливаем обновления
sudo dnf upgrade -y
# или
sudo yum update -y

Разбор:

  • dnf upgrade — обновляет все пакеты до последних версий, включая ядро.

  • yum update — в старых системах выполняет ту же функцию. На CentOS 7/8 лучше использовать yum, на новых — dnf.

Типичные ошибки и решения

  • «Another app is currently holding the yum lock» — менеджер пакетов уже используется.

    sudo lsof /var/run/yum.pid
    sudo kill -9 PID_процесса
    sudo rm -f /var/run/yum.pid
  • «Failed to download metadata» — проблема с репозиторием.

    # Очистите кеш и попробуйте снова
    sudo dnf clean all
    sudo dnf makecache
    sudo dnf upgrade -y

    Если не помогает — отключите проблемный репозиторий в /etc/yum.repos.d/*.repo.

  • «Error: rpmdb open failed» — повреждена база RPM.

    sudo rpm --rebuilddb
    sudo dnf clean all
    sudo dnf upgrade -y
  • «No space left on device» — закончился диск, чаще всего раздел /boot.

    # Удалите старые ядра (аккуратно!)
    sudo dnf remove kernel-old
    # или почистите вручную:
    sudo dnf autoremove

Совет: после обновления ядра и системных библиотек также выполните sudo reboot, чтобы сервер загрузился с новой версии.

Установка базовых утилит

После обновления системы стоит установить минимальный набор инструментов, которые пригодятся почти на каждом сервере. Это ускорит диагностику и сделает администрирование удобнее.

Ubuntu/Debian (apt)

sudo apt update
sudo apt install -y curl wget git htop net-tools unzip zip tar vim nano lsof ufw

CentOS/Rocky/AlmaLinux (dnf/yum)

sudo dnf install -y curl wget git htop net-tools unzip zip tar vim nano lsof firewalld
# или для старых версий
sudo yum install -y curl wget git htop net-tools unzip zip tar vim nano lsof firewalld

Что это за пакеты:

  • curl, wget — загрузка файлов и проверка доступности сайтов/портов.

  • git — управление репозиториями, часто нужно для деплоя проектов.

  • htop — удобный монитор ресурсов в реальном времени.

  • net-tools — старые, но полезные утилиты (ifconfig, netstat).

  • unzip, zip, tar — работа с архивами.

  • vim, nano — редакторы для работы с конфигурациями.

  • lsof — показывает, какие процессы используют файлы или порты.

  • ufw (Ubuntu/Debian) или firewalld (RHEL) — управление фаерволом.

Установка базовых утилит на VPS

Типовые ошибки и решения

  • «E: Unable to locate package …» — пакет не найден.

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

    • не выполнен sudo apt update перед установкой;
    • пакет недоступен в стандартных репозиториях (например, net-tools в новых версиях Ubuntu).
  • «No match for argument» (dnf/yum) — аналогичная ошибка, пакет отсутствует.

    Решение: включите репозиторий EPEL:

    sudo dnf install -y epel-release
    sudo dnf install -y htop
  • «Disk full» — не хватает места на разделе / или /var.

    df -h
    sudo du -sh /var/cache/dnf/*
    sudo dnf clean all
    sudo apt clean

Типичные ошибки при обновлении и их решения

При обновлении системы через apt, dnf или yum иногда возникают ошибки. Рассмотрим наиболее частые и способы их устранения.

Ubuntu/Debian (apt/dpkg)

  • Ошибка блокировки dpkg/apt:

    E: Could not get lock /var/lib/dpkg/lock-frontend
    E: Unable to acquire the dpkg frontend lock

    Причина — другой процесс уже использует apt (например, автоматическое обновление). Решение:

    ps aux | grep apt
    sudo kill -9 PID_процесса
    sudo rm /var/lib/dpkg/lock-frontend /var/lib/apt/lists/lock /var/cache/apt/archives/lock
    sudo dpkg --configure -a
  • Повреждённая база dpkg:

    dpkg: error: dpkg status database is locked by another process

    Проверьте, что нет зависших процессов, затем пересоберите:

    sudo dpkg --configure -a
    sudo apt install -f
  • Ошибки зависимостей:

    The following packages have unmet dependencies...

    Решение:

    sudo apt --fix-broken install
    sudo apt full-upgrade
  • 404 Not Found при обновлении — репозиторий устарел.

    Замените зеркала в /etc/apt/sources.list или используйте old-releases для старых систем.

CentOS/Rocky/AlmaLinux (dnf/yum)

  • Блокировка yum/dnf:

    Another app is currently holding the yum lock

    Завершите процесс:

    sudo lsof /var/run/yum.pid
    sudo kill -9 PID_процесса
    sudo rm -f /var/run/yum.pid
  • Ошибка базы RPM:

    rpmdb: BDB0113 Thread/process ... failed: BDB1507 Thread died in Berkeley DB library
    Error: rpmdb open failed

    Пересоберите базу:

    sudo rm -f /var/lib/rpm/__db*
    sudo rpm --rebuilddb
    sudo dnf clean all
  • Проблемы с репозиториями:

    Failed to download metadata for repo 'appstream'

    Очистите кеш и создайте заново:

    sudo dnf clean all
    sudo dnf makecache
  • Недостаточно места (особенно на разделе /boot):

    No space left on device

    Решение — удалите старые ядра:

    sudo dnf remove --oldinstallonly kernel
    sudo dnf autoremove

Итоги

  • Мы подготовили сервер к обновлению: проверили сеть, DNS и доступ по SSH.

  • Определили дистрибутив и выбрали подходящий пакетный менеджер (apt, dnf или yum).

  • Обновили систему и ядро, устранили типичные ошибки (lock dpkg, rpmdb, зависшие процессы).

  • Установили базовый набор утилит (curl, wget, htop, git, nano, lsof, ufw/firewalld).

  • Разобрали частые проблемы и способы их решения.

Дальнейшие шаги: настройка фаервола, создание пользователя вместо root, включение fail2ban и резервного копирования.