Как собрать пакет netplan из его исходного репозитория?

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

Я пытаюсь собрать пакет 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). Это также избавляет вас от необходимости вручную компилировать пакет и его источники.

  1. Сначала включите Репозитории 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
    
  2. Затем, специфически установите ограничения, чтобы не использовать автоматически пакеты Proposed, если вы их не укажете. Таким образом, вы не сломаете свою систему с предложенными, непроверенными, не выпущенными обновлениями.

    sudo cat <<EOF >/etc/apt/preferences.d/proposed-updates
    # Настроить apt для разрешения избирательной установки пакетов из предложенных
    Package: *
    Pin: release a=$(lsb_release -cs)-proposed
    # Использовать более низкий приоритет, чем приоритеты пакетов, установленных локально
    Pin-Priority: 50
    EOF
    
  3. Запустите стандартный процесс обновления, чтобы обновить списки репозиториев, что также загрузит список пакетов, доступных в Proposed.

    sudo apt update
    
  4. Установите предложенную версию netplan.io в вашу систему и любые ее зависимости, которые она хочет подтянуть из предлагаемого кармана.

    sudo apt -t $(lsb_release -cs)-proposed netplan.io
    
  5. Перезагрузите систему.

  6. Попробуйте теперь использовать определения dummy-devices.

ДИСКЛЕЙМЕР: Я не тестировал предлагаемый пакет, и не похоже, что предлагаемый пакет прошел стандартные процессы тестирования, еще необходимые для его выпуска в качестве официального обновления пакета в Jammy. В связи с этим, если у вас возникнут проблемы с этой новой версией Netplan, вам нужно будет вернуться к версии, которая обычно находится в jammy-security и jammy-updates, и тогда отказаться от использования dummy устройств.

.

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

Теоретическая основа

Netplan – это инструмент для конфигурации сетевых соединений в системе Ubuntu, использующий YAML-файлы для описания сети. Он играет важную роль в современных дистрибутивах Ubuntu благодаря своей простоте и гибкости. Однако в определенных сценариях может потребоваться собрать Netplan из исходного кода, например, для доступа к уникальным или экспериментальным функциям, в частности для поддержки "dummy-devices", которые ожидаются в версии 0.107.

Сборка пакета Netplan из исходного кода может стать довольно сложной задачей из-за необходимости установки множества зависимостей и правильной конфигурации среды сборки. Для успешного выполнения этой задачи важно понимать и правильно настраивать все необходимые компоненты и выполнить пошаговую инструкцию.

Пример: Проблемы при сборке и их решения

Вы столкнулись с ошибкой, связанной с отсутствием модуля ‘netplan’ после сборки и установки пакета. Это указывает на неправильную конфигурацию путей к питоновским модулям после установки. Наиболее вероятная причина – Python-пакеты были установлены либо в нестандартную директорию, либо в директорию, которая не входит в PYTHONPATH, используемый вашей операционной системой.

Рассмотрим возможное решение данной проблемы:

  1. Установка всех необходимых зависимостей. Как вы уже начали, следует убедиться, что все пакеты и библиотеки установлены:

    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
  2. Корректная настройка PYTHONPATH. Убедитесь, что в ваш PYTHONPATH включены все необходимые директории:

    echo 'export PYTHONPATH=/usr/local/lib/python3.x/dist-packages:$PYTHONPATH' >> ~/.bashrc
    source ~/.bashrc

    Замените x в пути Python на соответствующую вашу установленную версию Python, например, 3.10.

  3. Клонирование репозитория и сборка:

    git clone https://github.com/canonical/netplan.git
    cd netplan
    meson setup build
    cd build
    ninja
    sudo ninja install
  4. Проверка окружения. Убедитесь, что бинарные файлы и библиотеки установлены в стандартные директории (/usr/local/bin и /usr/local/lib соответственно).

  5. Проверка установленных файлов. Используйте команду ниже, чтобы убедиться, что файлы находятся в нужных местах:

    which netplan

    Проверьте соответствие директории и, если нужно, добавьте путь к Python-библиотекам в PYTHONPATH.

Применение: Альтернатива ручной сборке

Стоит отметить, что таких сложностей можно избежать, если использовать предложенный способ установки пакетов из репозитория proposed. Благодаря этому вы сможете установить нужную версию netplan.io, избегая необходимости ручной сборки.

  1. Включение 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
  2. Настройка приоритетов. Чтобы изменения не затронули другие программы, установите приоритет репозитория ниже:

    sudo cat <<EOF >/etc/apt/preferences.d/proposed-updates
    Package: *
    Pin: release a=$(lsb_release -cs)-proposed
    Pin-Priority: 50
    EOF
  3. Обновление и установка необходимого пакета. С помощью обновления списка пакетов и установки netplan.io из proposed:

    sudo apt update
    sudo apt -t $(lsb_release -cs)-proposed install netplan.io

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

В итоге вы либо успешно соберете и настроите netplan с предоставленными шагами, либо воспользуетесь альтернативным и более легким способом – установкой предложенного пакета из репозитория. В любом случае, у вас есть несколько способов достичь необходимой конфигурации и получить доступ к "dummy-devices".

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

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