Использование бесплатного пакета USBIP для проброса USB внутрь виртуальных машин

В статье про USB и виртуальные машины один из читателей блога – Vovets666 опробовал  бесплатное ПО USBIP и предложил написать про него статью.

Дисклаймер:
все описанное ниже – мое личное видение проблемы и способов ее решения, не являющееся истиной в последней инстанции. Вполне возможно, существуют и другие варианты, я с удовольствием про них послушаю. В качестве инструкции по работе с ПО использованы материалы, найденные в интернете, уже и не помню где… Кроме того, являясь админом – виндузятником, с Linux я знаком довольно поверхностно, работал в условиях дедлайна и времени на изучение матчасти/танцы с бубнами особо много не имел, поэтому описываю, как сделал, чтобы работало, и уверен, что есть и другие способы.

Итак, имеем виртуальные машины – серверы 1С, поднятые на MSWindowsServer 2008R2. Для работы ПО необходимы подключенные к ним серверные HASP-ключи. Непосредственно подключить их на ВМ на Hyper-V, как известно, нельзя. Задача: каким-то образом пробросить HASP-ключи на виртуальные машины, желательно с использованием минимума дополнительного железа и стоимости лицензий.

(Оффтоп: у 1С в последнее время появилась возможность программного лицензирования ПО, без использования HASP-ключей (что-то вроде активации с использование пин-кодов). Но есть нюансы: обмен на лицензию с программной активацией не бесплатный, при изменении конфигурации машины необходима повторная активация, по истечении определенного лимита разрешение на активацию остается на усмотрение техподдержки, что совсем не айс. Посему было решено использовать старый способ с HASP-ключами).

Рассматривались варианты:

- способ, предоставляемый компанией Микрософт (правда, для других целей):
RemoteFX+RDP7.1. Не устроил по причинам: необходимо оборудование с поддержкой RemoteFX, на сервере 1С должны быть подняты дополнительные сервисы (служба доступа к удаленному рабочему столу), с хоста на виртуалку должна постоянно висеть сессия RDP, через которую пробрасывается ключ, необходима клиентская лицензия на доступ к RDS. Возможно, в каком-либо из пунктов этого списка я и ошибаюсь, но общее их количество зарубило способ на корню.

- аппаратные устройства сторонних производителей. Недостатки: стоят денег, к тому же у некоторых устройств наблюдались проблемы с совместимостью с используемыми ОС (к примеру,Ubox 4100, который у нас есть) и которые производитель решать не собирался. Сейчас проблемы вроде как решены (в других моделях), но осадок остался.

- ПО сторонних производителей. Недостатки: требуют наличия отдельной машины для работы в качестве сервера USB-устройств и, как правило, платные. После поиска
приемлемого софта оказалось, что из всего обнаруженного ПО бесплатным для коммерческого применения является только пакет USBIP. На нем и остановился.

Сама по себе установка и настройка ПО больших проблем не вызвала, в комплекте к пакету имелся краткий мануал, плюс – интернет.

Пакет USBIP (http://usbip.sourceforge.net/) для работы требует наличия 2х настроенных машин: сервера (к нему непосредственно подключается ключ) и клиента (на него этот ключ пробрасывается). Серверная
часть USBIP существует только под Linux, клиентская – под Linux и Windows (включая 7 и 2008R2).

1) Установка сервера (машины, в которую подключено USB устройство).

В качестве сервера используем машину с установленным Linux. Я использовал Linux Ubuntu v.11.04 (сборка Lubuntu, которая декларируется как наименее требовательная к ресурсам) как наиболее простую (для меня) систему: ставится без каких-либо проблем, автоматически подцепляет новые подключаемые USB устройства, после установки по умолчанию инсталлированы необходимые компоненты, кроме того, USBIP присутствует в репозитарии. С целью экономии на оборудовании эта машина создана как виртуальная, поднятая на существующем хосте ESXi 4.1 и в нее в свою очередь проброшен ключ HASP с хоста стандартным для ESXi способом.

Установка проблем не вызвала: ставим систему, подключаем к сети, выдаем IP, через менеджер пакетов устанавливаем USBIP и необходимые для работы компоненты. Кроме того были установлены VMware tools (так как данная машина – ВМ на ESXi).

На всякий случай напомню, как это делается:

Из оснастки VMware подключаем диск с ПО (Inventory -> Virtual Machine -> Guest -> Install/Upgrade VMware Tools). С этого диска распаковываем архив с ПО на рабочий стол. Запускаем терминал и в нем набираем:

<имя пользователя>@<имя машины>:~$ sudo <путь до файла>\vmware-install.pl –default

Скрипт запустится и далее в ответ на все вопросы нажимаем «Enter» – ПО будет установлено с параметрами по умолчанию.

2) Настройка сервера USB ключей.

Запускаем терминал. Дальнейшие действия – из командной строки.

· Загружаем следующие модули.

<имя пользователя>@<имя машины>:~$ sudo modprobe usbip

<имя пользователя>@<имя машины>:~$ sudo modprobe usbip_common_mod

· Запускаем usbip в качестве системного демона:

<имя пользователя>@<имя машины>:~$ sudo usbipd -D

получаем:

Bind usbip.ko to a usb device to be exportable!

<имя пользователя>@<имя машины>:~$

USBIP готов к использованию.

· Далее подключаем USB устройство к компьютеру.

Внимание! Необходимо сначала запустить демон, а лишь затем подключать устройства, иначе могут возникнуть ошибки на клиенте при подключении. (см. примечания)

· Для просмотра подключенных USB устройств выполняем команду

<имя пользователя>@<имя машины>:~$ lsusb

получаем список подключенных USB устройств с их идентификаторами вида:

Bus XXX Device YYY: ID VendorID:DeviceID <название устройства>

что-то вроде:

Bus 002 Device 004: ID 0529:0001 Aladdin Knowledge Systems HASP v0.06

Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Запоминаем сочетание VendorID:DeviceID

· Выполняем команду:

<имя пользователя>@<имя машины>:~$ sudo usbip_bind_driver –list

USBIP проверяет список подключенного оборудования и выводит его с указанием их bus-ID вида:

- busid 2-1 (0529:0001)

2-1:1.0 -> none

- busid 2-2 (0e0f:0002)

2-2:1.0 -> hub

……..

В данном случае bus-ID, указывающий на нужное нам USB устройство: “2-1″.

· Теперь подключаем устройство к серверу. Набираем:

<имя пользователя>@<имя машины>::~$ sudo usbip_bind_driver –usbip 2-1

получаем:

** (process:1483): DEBUG: 2-1:1.0 -> none

** (process:1483): DEBUG: write “add 2-1″ to /sys/bus/usb/drivers/usbip/match_busid

** Message: bind 2-1 to usbip, complete!

Устройство подключено к USBIP, доступ с локальной машины-сервера к нему теряется.

· Также можно посмотреть, какие устройства подключены к USBIP в данный момент. Для этого набираем:

<имя пользователя>@<имя машины>:~$ sudo usbip_bind_driver –list

Получаем:

- busid 2-1 (0529:0001)

2-1:1.0 – > usbip

- busid 2-2 (0e0f:0002)

2-2:1.0 -> hub

…….

Устройство с bus-ID 2-1 подключено к USBIP. Система может передавать данные об этом USB устройстве с вашей системы удаленным клиентам.

Настройка сервера закончена. В случае необходимости можно добавлять и убирать
экспортируемые устройства.

Параметры USBIP – linux сервераUsage: usbip_bind_driver [OPTION]

-?, –help вызов
справки
–usbip busid make a device exportable
-other busid use a device by a local
driver
–list print usb devices and their
drivers
–list2 print usb devices and their
drivers in parseable mode
–allusbip make all devices exportable

3) Настройки клиента MS Windows

· Скачиваем дистрибутив. Нам понадобятся обе версии – 0.1 и 0.2.

· Устанавливаем USB/IPEnumenator. Он устанавливается как произвольное системное устройство с драйверами на диске. Драйвера берем из дистрибутива версии 0.2:

Для Windows XP:

1. Распаковываем файлы в локальную папку.

2. В Панели Управления жмем «Установка Оборудования», в открывшемся Окне Приветствия Мастера жмем «Далее».

3. Выбрать «Да, устройство уже подсоединено» -> «Далее».

4. Выбрать «Добавление нового устройства»-> «Далее».

5. Выбрать «Установка оборудования, выбранного из списка вручную» -> «Далее».

6. Выбрать «Системное устройство» -> «Далее».

7. Выбрать «Установить с диска», -> «Просмотр», выбрать папку с разархивированным драйвером -> «ОК».

8. Выбрать ‘USB/IP Enumerator’, -> «Далее».

9. «Мастер готов к установке нового оборудования» -> Выбрать «Далее» -> Готово».

Для Window 7 (и 2008r2):

1. Для разрешения установки неподписанных драйверов: запускаем cmd от
администратора и выполняем «bcdedit /settestsigningon».

2. Распаковываем файлы в локальную папку..

3. Открываем «Диспетчер Устройств».

4. Правой кнопкой на «имя компьютера» -.«Установить старое устройство» (или выбрать в меню «Действие»).

5. В открывшемся Окне Приветствия Мастера жмем «Далее».

6. Выбрать «Установка оборудования, выбранного из списка вручную» -> «Далее».

7. Выбрать «Системное устройство» -> «Далее».

8. Выбрать «Установить с диска», -> «Просмотр», выбрать папку с разархивированным драйвером -> «ОК».

9. Выбрать ‘USB/IP Enumerator’, -> «Далее».

10. «Мастер готов к установке нового оборудования» -> Выбрать «Далее» -> «Готово».

Все указанные действия также описаны в идущем с пакетом USBIP файле «usage» на английском языке.

· Подключаем USB устройства, обозначенные как экспортируемые на нужном нам сервере. Для подключения используем USBIP из дистрибутива версии 0.1

Запускаем cmd. Смотрим, какие устройства готовы к подключению:

path-to-usbip:> usbip.exe -l <server-ip>

(server-ip – IP адрес сервера USB устройств из пункта 2)

Пример:

C:\usbip>usbip -l 192.168.1.13

usbip dbg: usbip_network.c: 229 (tcp_connect ) trying 192.168.1.13 port 3240

usbip dbg: usbip_network.c: 249 (tcp_connect ) connected to 192.168.1.13:3240

- 192.168.1.13

usbip dbg: usbip.c: 423 (query_exported_devices) exportable 2 devices

2-1: unknown vendor : unknown product (0529:0001)

: /sys/devices/pci0000:00/0000:00:11.0/0000:02:02.0/usb2/2-1

: unknown class / unknown subclass / unknown protocol (ff/00/00)

: 0 – unknown class / unknown subclass / unknown protocol (ff/00/00)

……….

В результате видим, что на сервере 192.168.1.13 готово к подключению устройство с bus-ID 2-1 – то, которые мы настроили в пункте 2. Устройств может быть и больше.

Далее – подключаем нужное устройство:

path-to-usbip:> usbip.exe -a <server-ip> USB-ID

USB-ID в нашем случае 2-1.

Получаем многабукв (листинг параметров) и в завершение:

new usb device attached to usbvbus port 2

USB устройство должно появиться в системе клиента. Окно терминала желательно не закрывать.

Параметры USBIP – windows клиентаUsage: usbip [options]

a, –attach [host] [bus_id] Attach a remote USB device
-x, –attachall [host] Attach all remote USB
devices on the specific host
-d, –detach [ports] Detach an imported USB
device
-l, –list [hosts] List exported USB devices
p, –port List virtual USB port status
-D, –debug Print debugging information
-v, –version Show version
-?, -h, –help Print this help

Примечания: Возникавшие проблемы и их решение:

1. Я использовал версию системы 11.04 на ядре 2.6. После обновления системы до версии 11.10 (ядро 3.0.4) usbip работать перестал – выдал ошибку, что компонент не найден. Пришлось восстанавливать машину и отказываться от обновлений. С другой стороны, так как это служебная узкоспециализированная машина и доступ к ней ограничен, это было признано не критичным.

2. Поначалу hasp-ключи отказывались подключаться к клиенту, выдавая ошибку. В ходе экспериментов было установлено, что сначала необходимо запустить usbip -демон, а уже затем подсоединять к машине ключи. В дальнейшем ошибки исчезли, подключаться ключи стали в любом порядке, повторить ошибки не удалось. Это как раз одна из тех странностей, про которые я упоминал.

3. После перезагрузки ВМ клиента – сервера 1С иногда не получается подключить к нему некоторые из ключей – выдает ошибки. Возможно, это связано с зависшими на сервере HASP сессиями обмена с usb-устройствами. Лечится перезагрузкой сервера HASP и повторным пробросом ключей на клиент.

Popularity: 7% [?]

Опубликовать в Facebook
Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс
Эта запись была опубликована в рубрике Статьи и отмечена метками , , . Добавить в закладки ссылку.

5 в ответ на Использование бесплатного пакета USBIP для проброса USB внутрь виртуальных машин:

  1. Пинг: Проброс USB в виртуальные машины | vMind.ru

  2. philzy пишет:

    Мы используем Digi AnyWhere USB 14 для тех же целей.
    Почти 2 года уже – полет нормальный.
    Да, решение дорогое, но в работе Digi AnyWhere USB 2 (около 8000 руб.) 2 порта – тоже себя показали хорошо. У нас просто ключей много.

    Фокус внешнего аппаратного проброса USB в том, что можно не быть привязанным к пробросу портов хостами, т.к. без отключения 1С – хост нельзя тронуть в рабочее время.

    Софтовые лицензии от 1С – полный отстой, они к тому же привязываются к пользователю, а не компьютеру и запуск 2-х копий одним пользователем (разработчиком) ужирает в 2-раза больше лицензий. А если несколько баз, то вообще – полные кранты. И работает эта система отвратительно по надежности.

  3. Kyoshiro пишет:

    Почему используете usbip.exe версии 0.1? У меня абсолютно нормально работает 0.2.

    Самого интересного у вас и нет – автоматизации подключения (переподключения) ключей. Как раз сам сегодня этим занялся и тут ваша статья. Думал что-нибудь почерпну, ан нет. Ну да ладно, так даже интереснее.

  4. A.Vakhitov пишет:

    Почистил дублирующийся комментарий

  5. vovets666 пишет:

    to phylzy
    >Фокус внешнего аппаратного проброса USB в том, что можно не быть привязанным к пробросу портов хостами
    Факт. При наличии кластера – можно гонять виртуалку с хоста на хост при сохранении доступности сервиса. К сожалению – к нам это не очень применимо и хосты в рабочее время трогать все равно нельзя.

    to Kyoshiro
    >Почему используете usbip.exe версии 0.1? У меня абсолютно нормально работает 0.2.
    Сначала работать не хотело вообще (ставил тоже только последнюю версию – 0.2), где-то на форумах вычитал про использование совместно разных версий, после установки (отмечу, что не утверждаю – «вследствии», только – «после») заработало. Потому и записал себе в качестве рекомендации.
    Про автоматизацию думал, но счел, что при ней необходимо контролировать результаты выполнения всех шагов. По идее, неплохо бы, чтобы где-то логировался ход выполнения подключения, чтобы в случае неудачи можно было определить причину. Кроме того, не было уверенности, что после перезагрузок, переподключений и пр. не поменяются параметры ключа (пресловутый «2-1»). Так как ключей у меня всего 4 на двух машинах – то ограничился батниками, запускаемыми вручную, про них не стал писать, чтобы не загромождать текст. Хотя согласен – сама мысль интересная.

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

*

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Это не спам.
сделано dimoning.ru