Вопрос или проблема
Я пытаюсь собрать пакет netplan из его репозитория на Ubuntu 22.04, но пока безуспешно.
Поскольку я не смог найти соответствующий источник в интернете, я использовал chatGPT для помощи в процессе сборки.
Вот что я попробовал:
# Установить зависимости
sudo apt update
sudo apt install -y git meson python3-pip python3-yaml python3-jsonschema python3-setuptools pkg-config libglib2.0-dev cmake ninja-build libyaml-dev libsystemd-dev python3-pyflakes python3-pycodestyle pycodestyle python3-pytest python3-coverage python3-cffi libcmocka-dev pandoc
# Указать PYTHONPATH (используется netplan)
echo 'export PYTHONPATH=/usr/lib/python3.10/dist-packages:$PYTHONPATH' >> ~/.bashrc
source ~/.bashrc
# Клонировать из репозитория
cd ~ && git clone https://github.com/canonical/netplan.git
cd netplan
# Собрать пакет
meson setup build
cd build
ninja
sudo ninja install
Однако, когда я попытался получить версию собранного netplan, получил следующее:
> netplan --version
Traceback (most recent call last):
File "/usr/local/sbin/netplan", line 20, in <module>
from netplan_cli import Netplan
File "/usr/local/share/netplan/netplan_cli/__init__.py", line 18, in <module>
from .cli.core import Netplan
File "/usr/local/share/netplan/netplan_cli/cli/core.py", line 24, in <module>
from . import utils
File "/usr/local/share/netplan/netplan_cli/cli/utils.py", line 28, in <module>
from ..configmanager import ConfigurationError
File "/usr/local/share/netplan/netplan_cli/configmanager.py", line 21, in <module>
import netplan
ModuleNotFoundError: No module named 'netplan'
PS: причина, по которой я пытаюсь собрать netplan, — это получить dummy-devices. Для получения дополнительной информации, проверьте это.
Dummy devices были добавлены в netplan 0.107. Это было подготовлено для Ubuntu, но не было принято в jammy
или его обновления. Вместо этого, этот пакет находится в очереди jammy-proposed
для Ubuntu 22.04 и не перемещался с октября 2024 года.
Тем не менее, мы все еще можем включить предлагаемый карман в вашей системе и избирательно устанавливать из него, когда захотим (например, в этом случае для Netplan). Это также избавляет вас от необходимости вручную компилировать пакет и его источники.
-
Сначала включите Репозитории Proposed в вашей системе. Добавьте это в файл
/etc/apt/sources.list.d/ubuntu-proposed.list
:sudo cat <<EOF >/etc/apt/sources.list.d/ubuntu-$(lsb_release -cs)-proposed.list # Включить предложенный архив Ubuntu deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -cs)-proposed restricted main multiverse universe EOF
-
Затем, специфически установите ограничения, чтобы не использовать автоматически пакеты Proposed, если вы их не укажете. Таким образом, вы не сломаете свою систему с предложенными, непроверенными, не выпущенными обновлениями.
sudo cat <<EOF >/etc/apt/preferences.d/proposed-updates # Настроить apt для разрешения избирательной установки пакетов из предложенных Package: * Pin: release a=$(lsb_release -cs)-proposed # Использовать более низкий приоритет, чем приоритеты пакетов, установленных локально Pin-Priority: 50 EOF
-
Запустите стандартный процесс обновления, чтобы обновить списки репозиториев, что также загрузит список пакетов, доступных в Proposed.
sudo apt update
-
Установите предложенную версию
netplan.io
в вашу систему и любые ее зависимости, которые она хочет подтянуть из предлагаемого кармана.sudo apt -t $(lsb_release -cs)-proposed netplan.io
-
Перезагрузите систему.
-
Попробуйте теперь использовать определения
dummy-devices
.
ДИСКЛЕЙМЕР: Я не тестировал предлагаемый пакет, и не похоже, что предлагаемый пакет прошел стандартные процессы тестирования, еще необходимые для его выпуска в качестве официального обновления пакета в Jammy. В связи с этим, если у вас возникнут проблемы с этой новой версией Netplan, вам нужно будет вернуться к версии, которая обычно находится в jammy-security
и jammy-updates
, и тогда отказаться от использования dummy устройств.
.
Ответ или решение
Теоретическая основа
Netplan – это инструмент для конфигурации сетевых соединений в системе Ubuntu, использующий YAML-файлы для описания сети. Он играет важную роль в современных дистрибутивах Ubuntu благодаря своей простоте и гибкости. Однако в определенных сценариях может потребоваться собрать Netplan из исходного кода, например, для доступа к уникальным или экспериментальным функциям, в частности для поддержки "dummy-devices", которые ожидаются в версии 0.107.
Сборка пакета Netplan из исходного кода может стать довольно сложной задачей из-за необходимости установки множества зависимостей и правильной конфигурации среды сборки. Для успешного выполнения этой задачи важно понимать и правильно настраивать все необходимые компоненты и выполнить пошаговую инструкцию.
Пример: Проблемы при сборке и их решения
Вы столкнулись с ошибкой, связанной с отсутствием модуля ‘netplan’ после сборки и установки пакета. Это указывает на неправильную конфигурацию путей к питоновским модулям после установки. Наиболее вероятная причина – Python-пакеты были установлены либо в нестандартную директорию, либо в директорию, которая не входит в PYTHONPATH
, используемый вашей операционной системой.
Рассмотрим возможное решение данной проблемы:
-
Установка всех необходимых зависимостей. Как вы уже начали, следует убедиться, что все пакеты и библиотеки установлены:
sudo apt update sudo apt install -y git meson python3-pip python3-yaml python3-jsonschema python3-setuptools pkg-config libglib2.0-dev cmake ninja-build libyaml-dev libsystemd-dev python3-pyflakes python3-pycodestyle pycodestyle python3-pytest python3-coverage python3-cffi libcmocka-dev pandoc
-
Корректная настройка
PYTHONPATH
. Убедитесь, что в вашPYTHONPATH
включены все необходимые директории:echo 'export PYTHONPATH=/usr/local/lib/python3.x/dist-packages:$PYTHONPATH' >> ~/.bashrc source ~/.bashrc
Замените
x
в пути Python на соответствующую вашу установленную версию Python, например,3.10
. -
Клонирование репозитория и сборка:
git clone https://github.com/canonical/netplan.git cd netplan meson setup build cd build ninja sudo ninja install
-
Проверка окружения. Убедитесь, что бинарные файлы и библиотеки установлены в стандартные директории (
/usr/local/bin
и/usr/local/lib
соответственно). -
Проверка установленных файлов. Используйте команду ниже, чтобы убедиться, что файлы находятся в нужных местах:
which netplan
Проверьте соответствие директории и, если нужно, добавьте путь к Python-библиотекам в
PYTHONPATH
.
Применение: Альтернатива ручной сборке
Стоит отметить, что таких сложностей можно избежать, если использовать предложенный способ установки пакетов из репозитория proposed
. Благодаря этому вы сможете установить нужную версию netplan.io
, избегая необходимости ручной сборки.
-
Включение proposed-репозитория. Добавление соответствующих репозиториев упрощает доступ к обновленным пакетам, которые ещё не прошли полное тестирование:
sudo cat <<EOF >/etc/apt/sources.list.d/ubuntu-$(lsb_release -cs)-proposed.list deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -cs)-proposed restricted main multiverse universe EOF
-
Настройка приоритетов. Чтобы изменения не затронули другие программы, установите приоритет репозитория ниже:
sudo cat <<EOF >/etc/apt/preferences.d/proposed-updates Package: * Pin: release a=$(lsb_release -cs)-proposed Pin-Priority: 50 EOF
-
Обновление и установка необходимого пакета. С помощью обновления списка пакетов и установки netplan.io из proposed:
sudo apt update sudo apt -t $(lsb_release -cs)-proposed install netplan.io
Использование предложенного метода позволяет обойти трудности, связанные с зависимостями и директивами Python path, и воспользоваться самой последней версией пакета.
В итоге вы либо успешно соберете и настроите netplan с предоставленными шагами, либо воспользуетесь альтернативным и более легким способом – установкой предложенного пакета из репозитория. В любом случае, у вас есть несколько способов достичь необходимой конфигурации и получить доступ к "dummy-devices".