Вопрос или проблема
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, необходимо изменить конфигурацию службы.
Пошаговое решение проблемы
-
Проверка установки Python 3.8:
Убедитесь, что Python 3.8 все еще установлен на вашем компьютере:python3.8 --version
-
Критическая проверка альтернатив Python:
Замените версию Python 3 по умолчанию на 3.8, если это еще не сделано:sudo update-alternatives --config python3
В этом меню выберите Python 3.8.
-
Изменение службы 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. -
Перезагрузка демона systemd:
После внесения изменений вам нужно перезагрузить конфигурацию systemd:sudo systemctl daemon-reload
-
Перезапуск службы OpenVPN:
Теперь перезапустите службу OpenVPN:sudo systemctl restart openvpn3@[email protected]
-
Проверка статуса службы:
Убедитесь, что служба успешно запустилась без ошибок:sudo systemctl status openvpn3@[email protected]
Дополнительные рекомендации
- Сохранение системы: При работе с альтернативными версиями Python в системе обязательно учитывайте, что это может повредить другие системные приложения, которые также могут зависеть от определенной версии Python.
- Создание резервных копий: Перед изменением системных конфигураций, таких как файлы обслуживания systemd, рекомендуется делать резервные копии.
- Остались вопросы? Если проблема не была решена или возникли другие ошибки, не стесняйтесь обращаться за помощью, указывая подробности проблем.
Таким образом, следуя вышеописанным шагам, вы должны быть способны вернуть OpenVPN3 в рабочее состояние, используя Python 3.8, что обеспечит его совместимость с вашими текущими системными требованиями.