The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Сборка deb-пакета для решения проблем с плагином nvim-cmp для neovim в Debian 13
После обновления на Debian 13 и обновления плагинов для neovim столкнулся с
неприятной ошибкой в популярном плагине для автокомплита nvim-cmp. Ошибка
происходила при вводе любых данных в режиме вставки. Трассировка выдавала
что-то на подобии:

   Обнаружена ошибка при обработке TextChangedI Автокоманды для "*":
   Error executing lua callback: /usr/local/share/nvim/runtime/lua/vim/lspclient.lua:643: bufnr: expected number, got function                      
   stack traceback:                                                                                                                                  
   [C]: in function 'error'                                                                                                                  
   vim/shared.lua: in function 'validate'                                                                                                    
   /usr/local/share/nvim/runtime/lua/vim/lsp/client.lua:643: in function 'resolve_bufnr'                                                     
   ...

Решение

В Debian 13 находится neovim версии 0.10.4. Дополнение nvim-cmp по какой-то
причине требует для работы более новую версию neovim. В частности, проблема
исчезла с версией 0.11.3.

Установка более свежей версии neovim

Существует много способов установки более свежих пакетов в Debian, включая
подключение репозитория backports и использование самодостаточных пакетов типа
appimage или flatpack. Ниже будет описан более сложный, но универсальный и
контролируемый способ - сборка необходимого deb пакета вручную. Руководство по
сборке и установки рассчитано на пользователей которые никогда раньше этим не занимались.

1. Клонирование нужной версии из официального репозитория:

   git clone --depth=1 --recurse-submodules --branch=v0.11.3 https://github.com/neovim/neovim.git

--depth=1 позволяет не скачивать всю историю изменений ветки
--recurse-submodules заставляет скачать все необходимые для сборки модули из
других репозиториев github
--branch=v0.11.3 указывает необходимую для скачивания ветку, в частности
используем ветку помеченую через tag v0.11.3

2. Компиляция программы
Переходим в директорию neovim и начинаем сборку:

   cd neovim
   make CMAKE_INSTALL_PREFIX=/usr/local/ -j14

prefix позволяет задать директорию для дальнейшей установки пакета отличной от
директории по умолчанию. Пакеты собранные вручную лучше располfгать по пути /usr/local/
Флаг -j14 определяет количество потоков, которые будут использоваться для
параллельной сборки. Рекомендуется использовать не более чем количество
логических ядер процессора + 1.

3. Установка программы в локальную директорию

После окончания сборки создадим временную директорию nvim-v0.11.3 и установим в
неё скомпилированный neovim:

   mkdir nvim-v0.11.3
   make DESTDIR=$(pwd)/nvim-v0.11.3 install

DESTDIR указывает директорию, которая будет использована вместо корня файловой
системы. $(pwd) дописывает абсолютный путь к текущей директории. После этого
шага директория nvim-v0.11.3 должна содержать папку usr содержимым, которое
пакетный менеджер должен добавить в текущую систему.

На данном этапе программа уже может работать и не вызывать ошибок. Проверить это выполнив  команду:

   nvim-v0.11.3/usr/local/bin/nvim

4. Подготовка информации для превращения созданной директории в deb пакет

Для формирования пакета в директории nvim-v0.11.3 необходимо создать еще одну
папку DEBIAN и добавить в ней два файла.
Файл с описанием пакета nvim-v0.11.3/DEBIAN/control со следующим содержимым:

   Package: neovim 
   Version: 0.11.3
   Architecture: amd64
   Section: editors, devel
   Priority: standard
   Maintainer: Ваше Имя {[email protected]>
   Description: Code editor

Можно изменить сведения в поле Maintainer и отредактировать поле Architecture в
соответствии с архитектурой вашего процессора (актуально для всяких SBC на ARM
и RISC-V)

Устанавливаемые программы могут использовать разделяемые библиотеки (shared
object). Данные библиотеки содержат общий для разных программ код в виде
скомпилированных функций. Для того, чтобы эти библиотеки были доступны из места
их установки часто необходимо указать системе о необходимости обновить
соответствующую информацию. Сделать это можно в специальном скрипте,
выполняемом после установки. Содержимое файла nvim-v0.11.3/DEBIAN/postinst
должно выглядеть так:

   #!/usr/bin/env bash
   ldconfig && echo "Кэш разделяемых библиотек обновлен"

Данный скрипт необходимо сделать исполняемым. Сделать это можно консольной командой:

   chmod +x nvim-v0.11.3/DEBIAN/postinst

5. Сборка deb пакета

Теперь полученную директорию можно превратить в deb пакет. Для этого необходимо выполнить команду:

   dpkg-deb --build --root-owner-group nvim-v0.11.3

После успешного выполнения команды в текущей директории должен появиться файл
nvim-v0.11.3.deb. Пакет можно скопировать на флешку либо распростронять любым
другим способом, чтобы не собирать его снова на других компьютерах.

6. Установка deb пакета

Установить пакет можно с помощью менеджера apt:

   sudo apt install ./nvim-v0.11.3.deb

При помощи apt пакет можно будет удалить. При необходимости установить более
свежую версию nvim apt автоматически удалит предыдущую.

После установки nvim должен запускаться и нормально работать с указанным плагином.
 
19.09.2025 , Автор: Archer73
Ключи: debian, deb, dpkg, vim, neovim / Лицензия: CC-BY
Раздел:    Корень / Администратору / Система / Linux специфика / Установка и работа с пакетами программ в Linux

Обсуждение [ RSS ]
  • 1, Груман (?), 16:25, 20/09/2025 [ответить]  
  • +/
    > чтобы не собирать его снова

    Тогда-уж, опишите как сделать свой репо и не возиться с флешками

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру