Ошибка apt upgrade: сбой с SyntaxError из-за оператора моржа в пакете cloud-init – Как я это решил

Вопрос или проблема

Я столкнулся с ошибкой при выполнении команды apt upgrade, которая, по-видимому, была вызвана SyntaxError в коде на Python. Проблема, казалось, была связана с использованием оператора моржа (:=), введенного в Python 3.6. Сообщение об ошибке предполагало, что версия Python, которая используется, может быть несовместимой с версией, ожидаемой пакетом cloud-init.

Ошибка:

apt update 
apt upgrade ### завершилось неудачно с ошибкой ниже
Нет отвода 'отвод /etc/init/ureadahead.conf в /etc/init/ureadahead.conf.disabled от cloud-init', ничего не было удалено.
/usr/lib/python3.8/subprocess.py:842: RuntimeWarning: строчная буферизация (buffering=1) не поддерживается в бинарном режиме, будет использоваться размер буфера по умолчанию
  self.stdin = io.open(p2cwrite, 'wb', bufsize)
  Файл "/usr/lib/python3/dist-packages/cloudinit/net/ephemeral.py", строка 299
    if imds_reached_at_url := _check_connectivity_to_imds(
                            ^
SyntaxError: недопустимый синтаксис

dpkg: ошибка обработки пакета cloud-init (--configure):
 установленный пакет cloud-init скрипт пост-установки субпроцесса вернул код ошибки 1

Шаг 1: Попробовал переустановить cloud-init

Я пытался переустановить пакет cloud-init, но проблема осталась.

sudo apt remove --purge cloud-init
sudo apt install cloud-init

Однако та же ошибка возникла после переустановки.

Шаг 2: Запустил apt update снова, столкнулся с другой ошибкой:

apt update
Hit:1 http://*******.com/ubuntu focal InRelease
Hit:2 http://*******.com/ubuntu focal-updates InRelease
Hit:3 http://*******.com/ubuntu focal-backports InRelease
Hit:4 http://security.ubuntu.com/ubuntu focal-security InRelease
Traceback (most recent call last):
  File "/usr/lib/cnf-update-db", line 8, in <module>
    from CommandNotFound.db.creator import DbCreator
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py", line 12, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Reading package lists... Done
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/lib/command-not-found/ -a -e /usr/lib/cnf-update-db; then /usr/lib/cnf-update-db > /dev/null; fi'
E: Sub-process returned an error code

Ошибка указала, что модуль apt_pkg отсутствует, поэтому я пробовал переустановить пакет python3-apt:

sudo apt-get install --reinstall python3-apt

Это привело к ошибке из-за неудовлетворённых зависимостей:

Следующие пакеты имеют неудовлетворенные зависимости:
 libgirepository-1.0-1 : Нарушает: python-gi (< 3.34.0-4~), но 3.26.1-2ubuntu1 должен быть установлен
E: Ошибка, pkgProblemResolver::Resolve создал разрывы, возможно, это вызвано удерживаемыми пакетами.

Шаг 3: Установил python-gi

После получения ошибки я решил установить пакет python-gi, чтобы разрешить конфликт:

sudo apt-get install python-gi

Шаг 4: Проблема решена

После установки python-gi я выполнил следующие команды для окончательного исправления:

sudo apt update
sudo apt install python3.8
sudo apt-get remove --purge cloud-init
sudo apt-get install cloud-init
sudo apt --fix-broken install
sudo apt update
sudo apt upgrade

Наконец, после перезагрузки машины, все работало как положено, и обновление завершилось успешно без проблем.

Заключение

Решив проблемы с зависимостями Python и убедившись, что установлены правильные версии необходимых пакетов, я смог обойти ошибки и успешно обновить свою систему. Если вы столкнетесь с похожими проблемами с cloud-init, зависимостями Python или синтаксической ошибкой оператора моржа, этот подход может помочь их разрешить.


Была та же ошибка с cloud-init. Я удалил Python, и установка cloud-init прошла успешно для меня. Тем не менее, я вижу python3 в потоке обновления, так что технически Python может быть установлен? Я не специалист по Linux.

Ответ или решение

Как я решил проблему с ошибкой SyntaxError из-за оператора walrus в пакете cloud-init

При выполнении команды apt upgrade я столкнулся с ошибкой, вызванной SyntaxError в коде Python. Проблема была связана с использованием оператора walrus (:=), который был введен в Python 3.8. Сообщение об ошибке предполагало, что версия Python, используемая в системе, не соответствует той, которая требуется для пакета cloud-init.

Ошибка

Во время выполнения apt upgrade появлялась следующая ошибка:

No diversion 'diversion of /etc/init/ureadahead.conf to /etc/init/ureadahead.conf.disabled by cloud-init', none removed.
/usr/lib/python3.8/subprocess.py:842: RuntimeWarning: line buffering (buffering=1) isn't supported in binary mode, the default buffer size will be used
  self.stdin = io.open(p2cwrite, 'wb', bufsize)
  File "/usr/lib/python3/dist-packages/cloudinit/net/ephemeral.py", line 299
    if imds_reached_at_url := _check_connectivity_to_imds(
                            ^
SyntaxError: invalid syntax

dpkg: error processing package cloud-init (--configure):
 installed cloud-init package post-installation script subprocess returned error exit status 1

Решение

Шаг 1: Переустановка cloud-init

Я попытался переустановить пакет cloud-init, но это не решило проблему:

sudo apt remove --purge cloud-init
sudo apt install cloud-init

Ошибки продолжали появляться после этого.

Шаг 2: Обновление apt и устранение ошибки apt_pkg

При повторном выполнении apt update, возникла новая ошибка:

Traceback (most recent call last):
  File "/usr/lib/cnf-update-db", line 8, in <module>
    from CommandNotFound.db.creator import DbCreator
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/creator.py", line 12, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Для исправления я переустановил пакет python3-apt:

sudo apt-get install --reinstall python3-apt

Однако, появилась ошибка из-за неудовлетворённых зависимостей:

The following packages have unmet dependencies:
 libgirepository-1.0-1 : Breaks: python-gi (< 3.34.0-4~) but 3.26.1-2ubuntu1 is to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

Шаг 3: Установка python-gi для разрешения конфликта

Я установил пакет python-gi для устранения конфликта зависимостей:

sudo apt-get install python-gi

Шаг 4: Финализация решения проблемы

Затем я выполнил ряд команд для завершения исправлений:

sudo apt update
sudo apt install python3.8
sudo apt-get remove --purge cloud-init
sudo apt-get install cloud-init
sudo apt --fix-broken install
sudo apt update
sudo apt upgrade

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

Заключение

Устранив ошибки зависимостей Python и обеспечив установку правильных версий необходимых пакетов, мне удалось преодолеть ошибки и успешно обновить систему. Если вы столкнетесь с аналогичными проблемами с cloud-init, зависимостями Python или ошибкой синтаксиса walrus, описанный подход может помочь вам их решить.

Оцените материал
Добавить комментарий

Капча загружается...