Возникла задача — отправлять SMS с помощью GSM-модема Huawei E1550. Задача не сложная, втыкаем модем в сервер, устанавливаем gammu или scmxx и процесс пошел. Если бы не одно «но» — сервер, откуда надо рассылать сообщения — виртуальный. Пробросишь физический USB внутрь виртуальной машины — потеряешь возможность миграции. Нет проблем — втыкаем модем в Raspberyy Pi, пробуем отсылать сообщения локально, разбираемся с кодировкой, вроде всё работает как надо. Но ведь отсылка инициируется на другом сервере… И тут на сцену выходит USB\IP Project, с помощью которого можно решить этот вопрос. Конечно, существует и масса других способов отправить SMS (например, через удаленное выполнение команды по SSH, чем в итоге и кончилось), но USB\IP это что-то новое, еще не испробованное 🙂

Всё, что нужно для его работы, есть в ядре (начиная, если не ошибаюсь, с версии 3.6.18). Настройка не сложна и происходит буквально в несколько строк, что на сервере, что на клиенте. Главное знать про отсутствие нормальной обратной совместимости между разными версиями. Если версия протокола отличается — ничего работать не будет. Сообщение об ошибке не совпадения версий протокола (protocol version mismatch) можно увидеть, если запустить сервер в режиме дебага. Это создало определенные проблемы, так как в репозитории Raspbian была версия 2.0, а в репозитории Ubuntu 14.04 только 1.7.3. Устранив эту проблему варварским методом (путём установки deb-пакета из репозитория Debian на Ubuntu), всё вроде бы заработало — расшаренное устройство благополучно появилось на клиенте.

Радуясь этому волшебству, пробую отправлять SMS на свой номер. Запускаю gammu, процесс идёт, ура — телефон извещает о входящем сообщении. Казалось бы — хэппи энд. Стоп, а почему отвалился SSH? Почему не подключается снова? О, подключился, заходим. Повторяем процедуру отправки сообщения — получаем тот же результат. Сообщение отправляется и сразу после этого отваливается SSH. Оказалось, что сервер просто перезагружался (видимо, kernel panic с последующей перезагрузкой). Обновление ядер до 4.2+ ничем не помогло. Обидно, печально, а ведь счастье было так близко. Проводить дальнейшие эксперименты не захотелось, задачу решил с помощью выполнения команды через SSH. Может быть, дело в том, что сервер на ARM’е, может быть в том, что клиент это виртуалка на Xen-сервере.

Технология, безусловно, полезная и нужная. Применений для нее множество, особенно в контексте виртуализации. Жаль, что рабочего результата с ходу достигнуть не удалось. Будем надеяться на то, что в будущем она получит развитие и станет пригодной для использования в боевых системах.

USB\IP Project
Метки:

Добавить комментарий

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