Вопрос или проблема
Я пытаюсь обновить старый сервер с 20.04 до 22.04. Но когда я запускаю sudo do-release-upgrade
, у меня возникает следующая ошибка
KeyError: "Кэш не содержит пакет с именем 'ubuntu-minimal'"
Это полная ошибка
Произошла фатальная ошибка
Пожалуйста, сообщите об этом как о баге и включите файлы
/var/log/dist-upgrade/main.log и /var/log/dist-upgrade/apt.log в
ваш отчет. Обновление было прервано.
Ваш оригинальный sources.list был сохранен в
/etc/apt/sources.list.distUpgrade.
Traceback (последний вызов последний):
Файл "/usr/lib/python3/dist-packages/apt/cache.py", строка 299, в
__getitem__
rawpkg = self._cache[key]
KeyError: 'ubuntu-minimal'
При обработке вышеуказанного исключения возникло другое исключение:
Traceback (последний вызов последний):
Файл "/tmp/ubuntu-release-upgrader-w3ptvu69/jammy", строка 8, в
<module>
sys.exit(main())
Файл
"/tmp/ubuntu-release-upgrader-w3ptvu69/DistUpgrade/DistUpgradeMain.py",
строка 241, в main
if app.run():
Файл
"/tmp/ubuntu-release-upgrader-w3ptvu69/DistUpgrade/DistUpgradeController.py",
строка 2042, в run
return self.fullUpgrade()
Файл
"/tmp/ubuntu-release-upgrader-w3ptvu69/DistUpgrade/DistUpgradeController.py",
строка 1913, в fullUpgrade
if not self.cache.anyVersionDownloadable(self.cache[pkg]):
Файл "/usr/lib/python3/dist-packages/apt/cache.py", строка 301, в
__getitem__
raise KeyError('Кэш не содержит пакет с именем %r' % key)
KeyError: "Кэш не содержит пакет с именем 'ubuntu-minimal'"
Если я запущу apt show ubuntu-minimal
перед обновлением, то вижу, что он существует. Но если я запущу его после неудачного обновления, он внезапно исчезает. Поэтому я думаю, что в файле sources.list есть ошибка в процессе обновления.
Правка: Хорошо, я думаю, что я становлюсь ближе к решению. Похоже, что это отключает все мои источники, так как они от hetzner? Мне нужно использовать другой зеркальный сервер, чтобы иметь возможность обновиться?!
Это после того, как я пытался обновить
# deb https://mirror.hetzner.com/ubuntu/packages focal-backports main restricted universe multiverse # отключено при обновлении до jammy
# deb-src https://mirror.hetzner.com/ubuntu/packages focal-backports main restricted universe multiverse
# deb https://mirror.hetzner.com/ubuntu/security focal-security main restricted # отключено при обновлении до jammy
# deb-src https://mirror.hetzner.com/ubuntu/security focal-security main restricted
# deb https://mirror.hetzner.com/ubuntu/security focal-security universe # отключено при обновлении до jammy
# deb-src https://mirror.hetzner.com/ubuntu/security focal-security universe
# deb https://mirror.hetzner.com/ubuntu/security focal-security multiverse # отключено при обновлении до jammy
# deb-src https://mirror.hetzner.com/ubuntu/security focal-security multiverse
deb http://archive.ubuntu.com/ubuntu jammy universe
Это может не быть полным ответом, но это было слишком длинно для комментария.
do-release-upgrade
отключит все неофициальные репозитории во время обновления.
Я бы не рекомендовал обновляться до новой версии, когда используете образ ОС в облаке.
Лучше переработать вашу инстанцию, установив ваши приложения на новой и свежей установке более новой версии Ubuntu.
Есть много причин для этого, но с другой стороны, вот несколько из них:
- Если обновление не удастся, у вас не будет возможности его отменить, что может привести к поломке вашего сервера и, в худшем случае, сделать его недоступным. (Это не специфично для Ubuntu, а скорее общий момент.)
- Если ваше приложение не поддерживается должным образом в новой версии, то вы можете не иметь возможности получить новую установку с прежней версией ОС, так как ваш провайдер хостинга мог удалить эту опцию.
Если же вы используете новую инсталляцию, ваш старый сервер все еще работает, и вы можете вернуть все свои настройки и использовать старую установку, пока не исправите несовместимости в вашем приложении. do-release-upgrade
не имеет должной поддержки на пользовательских установках. Поскольку Hetzner использует свои репозитории вместо официального зеркала, вы столкнетесь с теми же проблемами, с которыми уже сталкиваетесь, так как они будут отключены во время обновления.
Я настоятельно рекомендую не следовать этому пути, но вы можете обновить ваш список источников, чтобы использовать официальные репозитории Ubuntu, а затем выполнить обновление. Однако это может серьезно повредить ваш сервер, так как Hetzner мог изменить некоторые репозитории для работы с их собственной настройкой.
Ответ или решение
Ошибка при обновлении сервера Ubuntu 20.04 до 22.04: KeyError "Кэш не содержит пакета ‘ubuntu-minimal’"
При попытке обновить сервер Ubuntu с версии 20.04 до 22.04 вы столкнулись с ошибкой KeyError: "Кэш не содержит пакета 'ubuntu-minimal'"
. Это может быть связано с неправильной конфигурацией источников пакетов или использованием нестандартного зеркала.
Почему возникает ошибка?
-
Кэш пакетов: Ошибка указывает, что система ожидала найти пакет
ubuntu-minimal
, но не смогла его обнаружить в кэше. Это может произойти, если вы используете внешние или нестандартные репозитории, которые не содержат необходимых пакетов для новой версии. -
Отключение сторонних репозиториев: При запуске команды
do-release-upgrade
установщик автоматически отключает все сторонние репозитории, чтобы предотвратить конфликты. Если у вас есть критические зависимости на сторонних репозиториях, это может привести к ошибкам. В вашем случае видно, что репозитории от Hetzner были отключены.
Решения и рекомендации
-
Использование официальных репозиториев: Попробуйте заменить источники в вашем файле
/etc/apt/sources.list
на официальные репозитории Ubuntu. Это может выглядеть так:deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
После этого выполните обновление кэша:
sudo apt update
-
Проверка наличия пакета: После обновления кэша вы можете проверить наличие пакета
ubuntu-minimal
:apt show ubuntu-minimal
Если он доступен, вы можете снова попробовать запустить обновление:
sudo do-release-upgrade
-
Обновление версии: Если ошибки все еще возникают, учитывайте возможность обновления сервера до последнего LTS через промежуточные версии, например, сначала до 21.04 или 21.10, а затем до 22.04.
-
Альтернативные подходы: Как альтернативу, существует мнение, что для серверов, размещенных в облаке, лучше создать новую инстанцию на более новой версии и перенести ваши приложения и данные. Это снизит риск неполадок и обеспечит безопасный откат, если что-то пойдет не так.
Почему это важно
Обновление операционной системы — это критически важный процесс, который может затронуть работу серверов и приложений. Неправильное обновление может привести к сбоям и недоступности сервисов. Убедитесь, что вы заранее создали резервные копии всех важных данных и документов.
Соблюдение этих рекомендаций поможет избежать распространенных ошибок и сделать процесс обновления более безопасным и эффективным. Если вы не уверены в своих действиях, рекомендуется проконсультироваться с опытным системным администратором или специалистом по IT.