Имеется система Debian GNU/Linux 6.0 (Squeeze) i686 на основе DELL PowerEdge 1400 с двумя COM-портами. В /dev/ttyS0 вставлен термометр на основе DS18S20+, в /dev/ttyS1 — ИБП APC Smart-UPS 620. На этом шасси есть также есть два порта USB. В один из них воткнут Megafon Huawei E173.
Работает всё шоколадно: температура мониторится, модем отсылает SMS, для чего стоят пакеты usb-modeswitch и gammu, базовая часть работает из коробки, нижний уровень обслуживают пакеты, установленные из штатных репозиториев. Модем видится автоматически, ничего настраивалось: при втыкании или при перезагрузке хоста его файлики устройств появляются в системе автоматически. С термометром также проблем нет.
Была попытка перенести эту систему мониторинга обновив железо сервера на HP Core2Duo / 3GB RAM. И обновив ОС на Debian GNU/Linux 8.0 (Jessie) amd64. В новом железе штатный COM-порт — один. второй распаян на материнке на внутренний нестандартный разъем, и искать косичку к нему нецелесообразно, зато USB-портов вдоволь — 6 штук сзади, два — спереди. Поэтому в систему был добавлен COM-порт в виде переходника USB-COM. ИБП был воткнут в /dev/ttyS0, с ним проблем нет.
Остальные два компонента работы с последовательными устройствами — старые модем и термометр, были воткнуты в USB, последний — через переходник USB-COM. И сразу начались проблемы:
Переходник USB-COM видится сразу, как /dev/ttyUSB0, но по мере игр с модемом и перезагрузкой, его нумер меняется; при дальнейших играх, часть функциональности пропадает на лету: утилита из пакета digitemp выдает только ID, но значение показания температуры в процессе игр сначала начала выдавать через раз, а потом совсем перестала выдавать, но ID термометра при этом выдает ок, причем, насколько помню, передергивание по USB не помогает. Сначала думал, что это из-за того, что обращаюсь к устройству «более унифицированным» способом, т.е. указывая /dev/serial/by-id/... (ведь это надо из-за того, что в мистеме на шине USB два последовательных устройства, которые могут менять в общем случае свои нумера), но играясь дальше, заметил, что такой эффект достигается и при указании файла устройства напрямую, т.е. /dev/ttyUSB?, где ? — нумер, соответствующий переходнику USB-COM. Также, при указании длинного /dev/serial/by-id/... в конфигурационном файле считывателя температуры, из того же пакета digitemp, консольная утилита опроса термометра слетает с ошибкой (не знаю, сегфолт или нет, выводит какой-то длинный шестнадцатиричный код, на конфиг не ругается).
Модем видится только с шаманскими танцами, с бубном конечно. Приходится править конфиг пакета usb-modeswitch, вручную указывая параметры DefaultVendor= 0x12d1 и DefaultProduct= 0x1446 . Мало того, при этом, при втыкании в хост или при перезагрузке хоста, модем автоматически не подхватывается, и приходится вручную запускать usb_modeswitch для появления файлов его устройств в файловой системе. Поскольку в восьмом дебианчике система инициализации на основе systemd, я еще не предполагаю, как можно запустить эту команду правильно, чтобы при старте модем инициализировался ОК. Добавление в планировщик с помощью crontab -e для пользователя root для «времени» @reboot было бы ну очень большим костылем.
Хорошо хоть после этого пакет gammu нормально отсылает SMS-сообщения, т.е. нет аналогичных проблем, как у термометра, что что-то из того, что надо, не работает.
Поскольку времени на переход был один рабочий день, да и то обремененный параллельным дежурством на телефоне по вопросам any key, и разобраться с кондачка не удалось, было решено поставить обратно старый сервер со старым дебианом обратно, т.е. сделать шаг назад. Сейчас, как и раньше, работает как надо.
С ходу, в гугле, ни на ЛОРе не удалось найти ни похожих проблем, ни, тем более, их решения.
Вопрос: как сделать так, чтобы с новым железом и ОС сервера было также хорошо, как и в старом? :-)