Openvpn3 не работает после обновления до python3.11, как мне заставить службу использовать python3.8 вместо этого?

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

Openvpn3 перестал работать после того, как я обновил свой ноутбук с Ubuntu 20.04 с python3.8 до python 3.11

Я получил эту ошибку:

openvpn3-systemd[9972]: ModuleNotFoundError: No module named '_dbus_bindings'

Я обнаружил, что import dbus работает нормально с python3.8, но не работает с python3.11

Я попробовал заставить openvpn3 работать, изменив системный python обратно на 3.8, используя

sudo update-alternatives --config python

Я также убедился, что когда я использую python в командной строке, он находит dbus,

python -c 'import dbus'

Перезапуск службы по-прежнему дает ту же ошибку. Я отредактировал файл /usr/libexec/openvpn3-linux/openvpn3-systemd, чтобы он выводил версию python перед попыткой импортировать dbus, добавив эти 2 строки в начало файла:

import sys
print ('openvpn3-python-version-used: ' + sys.version)

И я вижу, что используется python3.11

Как я могу изменить файл службы /lib/systemd/system/[email protected], чтобы заставить его использовать более старую версию python3.8?

Текущий файл службы:

[Unit]
Description=OpenVPN 3 Linux - VPN session for %I
After=dbus.service network-online.target
Wants=dbus.service network-online.target
Documentation=man:openvpn3-linux(7)
Documentation=man:openvpn3-systemd(7)

[Service]
Type=notify
PrivateTmp=true
ProtectSystem=true
ProtectHome=true
Environment="PYTHONUNBUFFERED=on"
ExecStart=/usr/libexec/openvpn3-linux/openvpn3-systemd --start %i
ExecReload=/usr/libexec/openvpn3-linux/openvpn3-systemd --restart %i
ExecStop=/usr/libexec/openvpn3-linux/openvpn3-systemd --stop %i

[Install]
WantedBy=multi-user.target

Не делай этого.

Ubuntu 20.04 идет с Python 3.8. Все в Ubuntu 20.04 ориентировано на Python 3.8.

Это часть контракта; Ubuntu будет поддерживать и обратно портировать (безопасностные) исправления для Python 3.8; если у вас есть вещи, которые работают на Python 3.8, они будут продолжать работать на Python 3.8 на протяжении всего срока службы 20.04.

Я удивлён, что только OpenVPN сломался. Я ожидал, что много системных инструментов перестанут работать, таких как apt.

Кроме того, python должен всегда быть Python2, если он установлен. Python3 должен быть python3. На системе 20.04 вы должны иметь python3, указывающий на python3.8, так что выполните update-alternatives --config python3. Для вещей, которым нужен 3.11, заставьте их работать на python3.11.

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

Проблема, с которой вы столкнулись, связана с несовместимостью OpenVPN с обновленной версией Python 3.11. Как вы отметили, после перехода на Python 3.11 модуль dbus не работает корректно. Обратите внимание, что Ubuntu 20.04 изначально поддерживает Python 3.8. Следовательно, многие системные инструменты и приложения зависят от этой версии Python. Чтобы вернуть работу OpenVPN3 к стабильной версии Python 3.8, необходимо изменить конфигурацию службы.

Пошаговое решение проблемы

  1. Проверка установки Python 3.8:
    Убедитесь, что Python 3.8 все еще установлен на вашем компьютере:

    python3.8 --version
  2. Критическая проверка альтернатив Python:
    Замените версию Python 3 по умолчанию на 3.8, если это еще не сделано:

    sudo update-alternatives --config python3

    В этом меню выберите Python 3.8.

  3. Изменение службы OpenVPN в systemd:
    Вам нужно внести изменения в файл службы OpenVPN, чтобы указать системе использовать конкретную версию Python. Откройте файл /lib/systemd/system/openvpn3@[email protected] в текстовом редакторе с правами root:

    sudo nano /lib/systemd/system/openvpn3@[email protected]

    В секции [Service] замените строку ExecStart на следующую:

    ExecStart=/usr/bin/python3.8 /usr/libexec/openvpn3-linux/openvpn3-systemd --start %i

    Параметр ExecStart указывает системе, что нужно запускать OpenVPN через Python 3.8.

  4. Перезагрузка демона systemd:
    После внесения изменений вам нужно перезагрузить конфигурацию systemd:

    sudo systemctl daemon-reload
  5. Перезапуск службы OpenVPN:
    Теперь перезапустите службу OpenVPN:

    sudo systemctl restart openvpn3@[email protected]
  6. Проверка статуса службы:
    Убедитесь, что служба успешно запустилась без ошибок:

    sudo systemctl status openvpn3@[email protected]

Дополнительные рекомендации

  • Сохранение системы: При работе с альтернативными версиями Python в системе обязательно учитывайте, что это может повредить другие системные приложения, которые также могут зависеть от определенной версии Python.
  • Создание резервных копий: Перед изменением системных конфигураций, таких как файлы обслуживания systemd, рекомендуется делать резервные копии.
  • Остались вопросы? Если проблема не была решена или возникли другие ошибки, не стесняйтесь обращаться за помощью, указывая подробности проблем.

Таким образом, следуя вышеописанным шагам, вы должны быть способны вернуть OpenVPN3 в рабочее состояние, используя Python 3.8, что обеспечит его совместимость с вашими текущими системными требованиями.

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

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