Ошибка сборки 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
Самый простой способ - запустить сборку с правами суперпользователя:
sudo dpkg-buildpackage -b
Метод 2: Временное изменение прав
Если вы предпочитаете не использовать root для всей сборки, можно временно изменить права на целевой каталог:
sudo chown -R $USER:$USER /usr/include/linux
sudo chmod -R 755 /usr/include/linux
После завершения сборки восстановите оригинальные права:
sudo chown -R root:root /usr/include/linux
sudo chmod -R 755 /usr/include/linux
Метод 3: Установка в локальную директорию
Модифицируйте Makefile для установки в локальный каталог вместо системного:
# В Makefile найдите строку с установкой и измените путь
install:
mkdir -p $(DESTDIR)/usr/include/linux
install -m 644 usb-vhci.h $(DESTDIR)/usr/include/linux/
Альтернативные методы сборки
Сборка из исходного кода ядра
Согласно исследованиям, можно использовать исходный код ядра для корректной сборки vhci_hcd [5]:
# Установите необходимые зависимости
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]:
git clone https://github.com/linuxbuh/vhci_hcd.git
cd vhci_hcd
make
sudo make install
Проверка зависимостей и совместимости
Перед сборкой убедитесь, что у вас установлены все необходимые зависимости:
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-пакета:
# Установите переменные окружения
export DEB_BUILD_OPTIONS="parallel=$(nproc)"
export DH_VERBOSE=1
# Очистите предыдущие сборки
fakeroot debian/rules clean
# Запустите сборку с детальным выводом
dpkg-buildpackage -us -uc -b
Если проблема сохраняется, проверьте наличие необходимых заголовочных файлов в системе:
ls -la /usr/include/linux/usb/
# Должен присутствовать файл vhci.h или usb-vhci.h
Источники
- Arch Linux Forums - USBIP Error can’t open vhci-hcd driver
- GitHub - augin/vhci_hcd
- Citrix Documentation - Configure USB redirection
- GitHub - linuxbuh/vhci_hcd
- Ask Ubuntu - How to install usbip vhci_hcd drivers
- VirtualHere - WSL2 client execution fails vhci-hcd not found
- VictronEnergy - Missing vhci-hcd kernel module
- Unix & Linux Stack Exchange - usbip error open vhci driver
- GitHub - usb-vhci-hcd.h
Заключение
- Ошибка “Отказано в доступе” при сборке vhci_hcd возникает из-за ограниченных прав на запись в системные каталоги
- Основные решения включают использование sudo, временное изменение прав или установку в локальную директорию
- Для ядер Linux 6.1 и 6.12 рекомендуется использовать актуальные форки проекта vhci_hcd
- Перед сборкой убедитесь в наличии всех необходимых зависимостей и заголовочных файлов
- Если проблема сохраняется, рассмотрите альтернативные методы сборки из исходного кода ядра
Для предотвращения подобных проблем в будущем рекомендуется регулярно обновлять vhci_hcd и следить за исправлениями совместимости с новыми версиями ядра Linux.