Другое

Ошибка сборки vhci_hcd для Linux 6.1 и 6.12

Решение ошибки 'Отказано в доступе' при сборке пакета vhci_hcd для ядер Linux 6.1 и 6.12. Пошаговые методы исправления проблемы с правами доступа.

Почему сборка пакета vhci_hcd завершается ошибкой при попытке создать deb-пакет для ядра Linux 6.1 и 6.12?

При сборке vhci_hcd для ядер Linux 6.1 и 6.12 возникает следующая ошибка:

make[2]: выход из каталога «/usr/src/linux-headers-6.12.48+deb13-amd64»
mkdir -vp /usr/include/linux && cp -vf usb-vhci.h /usr/include/linux/
'usb-vhci.h' -> '/usr/include/linux/usb-vhci.h'
cp: невозможно создать обычный файл '/usr/include/linux/usb-vhci.h': Отказано в доступе
make[1]: *** [Makefile:41: default] Ошибка 1
make[1]: выход из каталога «/home/nihi1ist/.src/vhci-hcd/1.15.1/usb-vhci-hcd-1.15.1»
dh_auto_build: error: make -j12 "INSTALL=install --strip-program=true" returned exit code 2
make: *** [debian/rules:19: binary] Ошибка 2
dpkg-buildpackage: ошибка: debian/rules binary subprocess returned exit status 2

Что я делаю не так при сборке пакета vhci_hcd?

Ошибка сборки пакета vhci_hcd с сообщением “Отказано в доступе” при копировании файла usb-vhci.h в директорию /usr/include/linux является распространенной проблемой, возникающей из-за недостаточных прав пользователя для записи в системные каталоги. Это происходит при попытке сборки пакета для современных ядер Linux 6.1 и 6.12.

Содержание

Основная причина ошибки

Ошибка возникает из-за того, что процесс сборки пытается скопировать системный заголовочный файл usb-vhci.h в защищенный каталог /usr/include/linux, что требует прав суперпользователя [1][2]. В современных дистрибутивах Linux доступ к каталогу /usr/include/linux ограничен для предотвращения случайного изменения системных файлов.

Проблема усугубляется при работе с ядрами Linux 6.1 и 6.12, где структура каталогов и требования к сборке могут отличаться от предыдущих версий [3]. Как показывают исследования, vhci_hcd имеет известные проблемы совместимости с некоторыми версиями ядра, требующих дополнительных настроек [4].

Решение проблемы с правами доступа

Метод 1: Сборка с правами root

Самый простой способ - запустить сборку с правами суперпользователя:

bash
sudo dpkg-buildpackage -b

Метод 2: Временное изменение прав

Если вы предпочитаете не использовать root для всей сборки, можно временно изменить права на целевой каталог:

bash
sudo chown -R $USER:$USER /usr/include/linux
sudo chmod -R 755 /usr/include/linux

После завершения сборки восстановите оригинальные права:

bash
sudo chown -R root:root /usr/include/linux
sudo chmod -R 755 /usr/include/linux

Метод 3: Установка в локальную директорию

Модифицируйте Makefile для установки в локальный каталог вместо системного:

bash
# В Makefile найдите строку с установкой и измените путь
install:
    mkdir -p $(DESTDIR)/usr/include/linux
    install -m 644 usb-vhci.h $(DESTDIR)/usr/include/linux/

Альтернативные методы сборки

Сборка из исходного кода ядра

Согласно исследованиям, можно использовать исходный код ядра для корректной сборки vhci_hcd [5]:

bash
# Установите необходимые зависимости
sudo apt-get install build-essential linux-headers-$(uname -r)

# Скопируйте необходимые заголовки
sudo cp /usr/src/linux-$(uname -r | cut -d'-' -f1)/include/linux/usb/hcd.h \
        linux/$(uname -r | cut -d'-' -f1)/drivers/usb/core/

# Соберите модули
make KVERSION="$(uname -r)" KSRC=/usr/src/linux-$(uname -r | cut -d'-' -f1)

Использование форка vhci_hcd

Рассмотрите использование актуального форка проекта vhci_hcd, который может содержать исправления для новых ядер [6][7]:

bash
git clone https://github.com/linuxbuh/vhci_hcd.git
cd vhci_hcd
make
sudo make install

Проверка зависимостей и совместимости

Перед сборкой убедитесь, что у вас установлены все необходимые зависимости:

bash
sudo apt-get install build-essential linux-headers-$(uname -r) \
                     libtool autoconf automake pkg-config

Проверьте совместимость версии vhci_hcd с вашим ядром. Исследования показывают, что vhci_hcd-1.15.1 может иметь проблемы с ядрами 6.x, особенно с usbip функциональностью [8][9].

Настройка окружения для сборки

Создайте правильное окружение для сборки deb-пакета:

bash
# Установите переменные окружения
export DEB_BUILD_OPTIONS="parallel=$(nproc)"
export DH_VERBOSE=1

# Очистите предыдущие сборки
fakeroot debian/rules clean

# Запустите сборку с детальным выводом
dpkg-buildpackage -us -uc -b

Если проблема сохраняется, проверьте наличие необходимых заголовочных файлов в системе:

bash
ls -la /usr/include/linux/usb/
# Должен присутствовать файл vhci.h или usb-vhci.h

Источники

  1. Arch Linux Forums - USBIP Error can’t open vhci-hcd driver
  2. GitHub - augin/vhci_hcd
  3. Citrix Documentation - Configure USB redirection
  4. GitHub - linuxbuh/vhci_hcd
  5. Ask Ubuntu - How to install usbip vhci_hcd drivers
  6. VirtualHere - WSL2 client execution fails vhci-hcd not found
  7. VictronEnergy - Missing vhci-hcd kernel module
  8. Unix & Linux Stack Exchange - usbip error open vhci driver
  9. GitHub - usb-vhci-hcd.h

Заключение

  • Ошибка “Отказано в доступе” при сборке vhci_hcd возникает из-за ограниченных прав на запись в системные каталоги
  • Основные решения включают использование sudo, временное изменение прав или установку в локальную директорию
  • Для ядер Linux 6.1 и 6.12 рекомендуется использовать актуальные форки проекта vhci_hcd
  • Перед сборкой убедитесь в наличии всех необходимых зависимостей и заголовочных файлов
  • Если проблема сохраняется, рассмотрите альтернативные методы сборки из исходного кода ядра

Для предотвращения подобных проблем в будущем рекомендуется регулярно обновлять vhci_hcd и следить за исправлениями совместимости с новыми версиями ядра Linux.

Авторы
Проверено модерацией
Модерация