1 августа 2012 г.

USB/IP в XenServer 6.0 update E014

Данная статья является лишь вольным переводом/дополнением к USB/IP in XenServer 6.0 update E003 и копированием её для себя.

Инсталляция USBIP в Xenserver 6.0

Я не стал компилировать модули и саму программу , т.к. моё ядро совпадает с ядром указанным в статье (кто хочет/ядро не совпадает компилирует по инструкции русской/eng ). Необходимо закачать на dom0 два файла, я для этого воспользовался winscp. Далее заходим на консоль dom0:
cd /
tar -xvzf usbip_kmods-2.6.32.12-0.7.1.xs6_.0.0.531.170662xen-bpo.2.6.32.57-vanilla.tgz
tar -xvzf usbip_userspace-xs6.tgz
depmod -a
Автор нас предупреждает, что для для другого ядра необходимо компилировать такие модули самостоятельно. Теперь нам необходимо найти KEY_ID USB ключа
bind_driver --list 
В данной статье указывается, что нужно прописать /etc/rc.local прописать автоматический поиск и загрузку модулей и поиск устройства с KEY_ID и расшаривание его. Мне больше понравилась вот такая конструкция:


#!/bin/sh
export PATH="/bin:/usr/bin:/sbin:/usr/sbin"
KEY_ID=0529:0001
for str in `bind_driver --list` ; do
  if (echo $str | grep $KEY_ID >> /dev/null); then
    bind_driver --usbip $busid
  fi
  busid=$str
done
usbipd -D
И добавим в автозапуск его и загрузку модулей:
echo 'modprobe usbip_common_mod' >> /etc/rc.local
echo 'modprobe usbip' >> /etc/rc.local
echo '/sbin/xen_usb_in' >> /etc/rc.local
chmod +x /sbin/xen_usb_in
Самое интересное, автор забыл упомянуть о том, что в XenServer есть iptables, по умолчанию он блокирует все кроме своих портов. Ай-я-яй... это означает USB/IP по ip то и не будет доступен из-вне. Исправляем это досадное недоразумение (Citrix категорически не рекомендует этого делать, вы делаете это на свой страх и риск) и открываем нужный нам порт 3240
vi /etc/sysconfig/iptables
я надеюсь уж vi вы знаете :) добавляем строку
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 3240 -j ACCEPT
и перегружаем сервис iptables
service iptables restart
Вот теперь таки да :)

Устанавливаем в Windows VM

Скачиваем windows драйвера с сайта разработчиков http://sourceforge.net/projects/usbip/files/usbip_windows/. По словам автора "похоже что необходимо использовать одну и туже версию драйверов", т.е. качаем версию V1. После установки драйверов на Windows VM (в скачанном архиве есть текст как это делается) можно проверить и подключить доступные устройства на dom0
usbip.exe -l 192.168.0.1
список доступных устройств и их номера
usbip.exe -a 192.168.0.1 5-1
подключение устройства с номером 5-1 Вместо 192.168.0.1 должен быть ваш ip dom0, а вместо 5-1 номер вашего usb устройства. Вот так можно оборвать подключение
usbip.exe -d 1
т.е. отключить устройство раз Если нужно запускать USBIP при загрузке, лучше установить как сервис. Используйте INSTSRV.EXE и SRVANY.EXE из Windows Resource Kit:
INSTSRV.EXE USBIP C:\WINDOWS\SYSTEM32\SRVANY.EXE
В в ветке реестра HKLM\System\CurrentControlSet\Services\USBIP\ создадим subkey "Parameters" со значением
Application=c:\somewhere\usbip.exe
AppParamaters=-a 192.168.0.1 5-1

Tuning Windows host

как было сказано у автора usbip.exe блокирует процедуру выключения ОС. Поэтому необходимо создать скрипт disconnect_hardlock.bat и выполнять его при выключении компьютера (с помощью gpedit.msc) вот он:
@echo off
c:
cd \install\usbip
REM disconnect all devices
.\usbip.exe -d 0
.\usbip.exe -d 1
.\usbip.exe -d 2
.\usbip.exe -d 3
Как-то так.
Файлы:
usbip_kmods-2.6.32.12-0.7.1.xs6_.0.0.531.170662xen-bpo.2.6.32.57-vanilla.tgz
usbip_userspace-xs6.tgz