Решаем проблемы при обновлении 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 необходимо установить все доступные обновления для текущей версии системы.
Как исправить:
- Обновите список пакетов:
Откройте терминал и выполните:bash
sudo apt update
Установите все доступные обновления:
bash
sudo apt upgrade
(Если предложит подтверждение, нажмите Y
и Enter
).
Удалите ненужные пакеты (опционально):
bash
sudo apt autoremove
Попробуйте снова запустить обновление:
bash
- 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
Если проблема сохраняется
- Временно закомментируйте все сторонние репозитории:
bash
sudo sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/*.list sudo apt update
- Повторите попытку обновления.
- После успешного обновления 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 версии.