Рубрики
Сервер

Обновление Ubuntu

Решаем проблемы при обновлении Ubuntu до новой версии.

При подключении к серверу Ubuntu в терминале можно увидеть сообщение о том что есть возможность обновиться до новой версии и сразу же предлагается ввести команду `do-release-upgrade` что мы и сделаем. Не забудьте сделать бекап.

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

bash

sudo do-release-upgrade

Если все нормально начнется обновление. Вас предупредят что в случае разрыва SSH соединения обновление не остановиться и «демон» будет на порте 1022, соглашаемся. Дальше следуем инструкциям в терминале, я обычно сохраняю старые конфиги.

Иногда возникает следующая проблема выдается ошибка:

sudo do-release-upgrade
Checking for a new Ubuntu release
Please install all available updates for your release before upgrading.

Это сообщение означает, что перед обновлением Ubuntu необходимо установить все доступные обновления для текущей версии системы.

Как исправить:

  1. Обновите список пакетов:
    Откройте терминал и выполните:bash
sudo apt update

Установите все доступные обновления:

bash

sudo apt upgrade

(Если предложит подтверждение, нажмите Y и Enter).

Удалите ненужные пакеты (опционально):

bash

sudo apt autoremove

Попробуйте снова запустить обновление:

bash

  1. sudo do-release-upgrade

Если проблема осталась:

  • Возможно, некоторые пакеты требуют ручного вмешательства. Попробуйте:bash
  • sudo apt —fix-broken install sudo apt dist-upgrade

После этого повторите процесс обновления (sudo do-release-upgrade).

Если это не помогло значит, система по-прежнему считает, что не все обновления установлены, несмотря на выполнение sudo apt update && sudo apt upgrade. Давайте попробуем более тщательный подход.

1. Проверим, действительно ли все обновления установлены

Иногда apt upgrade не обновляет некоторые пакеты из-за зависимостей. Вместо этого используем:

bash

sudo apt full-upgrade

(Это аналог sudo apt dist-upgrade, который обрабатывает зависимости более агрессивно.)

2. Проверим, нет ли частичных обновлений

Иногда пакеты остаются в «ожидании» из-за конфликтов. Проверим:

bash

sudo apt list --upgradable

Если вывод не пустой, выполните:

bash

sudo apt upgrade

или (если есть удерживаемые пакеты):

bash

sudo apt install <имя-пакета>  # для конкретных пакетов

3. Проверим, нет ли незавершённых обновлений

bash

sudo dpkg --configure -a
sudo apt install -f

4. Удалим возможные блокировки пакетного менеджера

bash

sudo rm /var/lib/apt/lists/lock
sudo rm /var/lib/dpkg/lock
sudo rm /var/cache/apt/archives/lock

После этого снова выполните:

bash

sudo apt update && sudo apt full-upgrade -y

5. Если проблема осталась — принудительный запуск обновления

Можно попробовать запустить do-release-upgrade с флагом -d (для development-версии, но иногда помогает обойти проверки):

bash

sudo do-release-upgrade -d

(Но лучше сначала исправить проблему с обновлениями.)

6. Проверим журналы

Если ничего не помогает, посмотрим, что именно мешает:

bash

cat /var/log/dist-upgrade/apt.log | grep -i "held"

или

bash

grep -i "held" /var/log/apt/history.log

Вывод

Скорее всего, какой-то пакет не обновлён или задержан.

bash

apt list --upgradable

и

bash

sudo apt full-upgrade

После ввода этой команды я получил ответ.

sudo apt list --upgradable
Listing... Done
libargon2-0/focal 0~20171227-0.2 amd64 [upgradable from: 0~20161029-1.1]
N: There is 1 additional version. Please use the '-a' switch to see it

Проблема в том, что пакет libargon2-0 не был обновлён, и система блокирует обновление Ubuntu из-за этого. Давайте его обновим вручную.

1. Попробуем обновить проблемный пакет

bash

sudo apt install libargon2-0

Если это не сработает (например, из-за конфликтов), попробуем:

bash

sudo apt --only-upgrade install libargon2-0

2. Проверим, остались ли другие обновления

bash

sudo apt update
sudo apt full-upgrade

3. Если пакет всё равно не обновляется

Возможно, он зафиксирован (held back) из-за зависимостей. В таком случае:

bash

sudo apt install libargon2-0=0~20171227-0.2  # явно указываем версию

4. Проверим, что всё исправлено

bash

apt list --upgradable

Если список пуст, пробуем снова:

bash

sudo do-release-upgrade

5. Если проблема осталась

Попробуем вручную очистить кеш и переустановить пакет:

bash

sudo apt clean
sudo apt install --reinstall libargon2-0

Вывод

Скорее всего, после принудительного обновления libargon2-0 система разрешит апгрейд. Однако нет.

sudo apt install --reinstall libargon2-0
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 libargon2-0 : Depends: libargon2-1 (= 0~20171227-0.2) but 0~20190702-0.1+ubuntu18.04.1+deb.sury.org+1 is to be installed
E: Unable to correct problems, you have held broken packages.

Похоже, у нас конфликт версий пакета libargon2-0 из-за стороннего репозитория (вероятно, ppa:ondrej/php или аналогичного). Давайте решим проблему.

Решение проблемы с зависимостями

1. Проверим, какие версии пакета доступны:

bash

apt-cache policy libargon2-0 libargon2-1

2. Попробуем установить совместимые версии вручную:

bash

sudo apt install libargon2-0=0~20171227-0.2 libargon2-1=0~20171227-0.2

3. Если не получается, временно отключим проблемный репозиторий:

bash

sudo add-apt-repository --remove ppa:ondrej/php  # если используется этот PPA
sudo apt update

4. Принудительно установим версию из официальных репозиториев Ubuntu:

bash

sudo apt install libargon2-0=0~20171227-0.2 -o Dpkg::Options::="--force-overwrite"

5. Очистим и восстановим зависимости:

bash

sudo apt clean
sudo apt autoremove
sudo apt -f install

6. Проверим результат:

bash

apt list --upgradable
sudo apt full-upgrade

Если проблема сохраняется

  1. Временно закомментируйте все сторонние репозитории:

bash

sudo sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/*.list
sudo apt update
  1. Повторите попытку обновления.
  2. После успешного обновления Ubuntu можно вернуть репозитории:

bash

sudo sed -i 's/^#deb/deb/' /etc/apt/sources.list.d/*.list
sudo apt update

Альтернативный вариант

Если ничего не помогает, можно попробовать:

bash

sudo dpkg --remove --force-remove-reinstreq libargon2-0
sudo apt install -f

После этого повторите процесс обновления системы.

Вывод: Проблема оказалась в том что раньше я обновлял PHP из стороннего репозитария «ppa:ondrej/php» как это рекомендуют на многих сайтах которые можно «на гуглить». Здесь из-за этого репо я не мог обновить Ubuntu. Кстати вместе с обновлением Ubuntu до 24 версии (Ubuntu24) обновился и PHP до устраивавшей меня PHP8.3 версии.