[sisyphus] Обновление libusb и nut

Alexander Bokovoy =?iso-8859-1?q?ab_=CE=C1_altlinux=2Eorg?=
Вс Сен 21 07:20:42 MSD 2008


2008/9/21 Ivan Adzhubey <iadzhubey на rics.bwh.harvard.edu>:
> Приветствую!
>
> После сегодняшнего обновления libusb перестал работать драйвер newhidups из
> пакета nu. Соответственно, и все остальные демоны управления UPS тоже.
> Наверное, надо пересобрать nut с новой libusb?
Рекомендую проверить права на соответствующие устройства. По умолчанию
upsdrv запускает драйвер в чруте, где нет на самом деле нужных
устройств, но в чрут он переходит после их определения. А дальше
начинается регулярное ресканирование шины:
# strace -p 27616
Process 27616 attached - interrupt to quit
select(7, [5 6], NULL, NULL, {1, 80000}) = 0 (Timeout)
open("/sys/bus/usb/devices",
O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT (No such file
or directory)
open("/sys/bus/usb/devices",
O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = -1 ENOENT (No such file
or directory)
open("/dev/bus/usb/001/001", O_RDWR)    = -1 ENOENT (No such file or directory)
open("/dev/bus/usb/001/003", O_RDWR)    = -1 ENOENT (No such file or directory)
open("/dev/bus/usb/002/001", O_RDWR)    = -1 ENOENT (No such file or directory)
open("/dev/bus/usb/003/001", O_RDWR)    = -1 ENOENT (No such file or directory)
open("/dev/bus/usb/003/002", O_RDWR)    = -1 ENOENT (No such file or directory)
open("/dev/bus/usb/004/001", O_RDWR)    = -1 ENOENT (No such file or directory)
open("/dev/bus/usb/005/001", O_RDWR)    = -1 ENOENT (No such file or directory)
open("/dev/bus/usb/007/001", O_RDWR)    = -1 ENOENT (No such file or directory)
open("/dev/bus/usb/006/001", O_RDWR)    = -1 ENOENT (No such file or directory)
write(5, "DATASTALE\n"..., 10)          = 10
time(NULL)                              = 1221966095
write(5, "DATAOK\n"..., 7)              = 7
select(7, [5 6], NULL, NULL, {2, 0}^C <unfinished ...>
Process 27616 detached
Естественно, все это "отваливается", потому что в чруте ничего нет.

Если не запускать его в чруте и дать права пользователю upsdrv на
работу с нужным USB устройством, то /var/log/messages должно быть
что-то вроде вот этого:
Sep 21 07:05:13 boii upsdrvctl: Network UPS Tools: 0.28 USB
communication driver 0.28 - core 0.30 (2.0.5)
Sep 21 07:05:13 boii upsdrvctl: Detected a UPS: American Power
Conversion/Back-UPS ES 525 FW:851.t3.I USB FW:t3
Sep 21 07:05:13 boii upsdrvctl: Using subdriver: APC/CyberPower HID 0.9
Sep 21 07:05:15 boii upsdrvctl: libusb couldn't open USB device
/dev/bus/usb/001/001: Permission denied.
Sep 21 07:05:15 boii upsdrvctl: libusb requires write access to USB
device nodes.
Sep 21 07:05:15 boii upsdrvctl: libusb couldn't open USB device
/dev/bus/usb/001/003: Permission denied.
Sep 21 07:05:15 boii upsdrvctl: libusb requires write access to USB
device nodes.
Sep 21 07:05:15 boii upsdrvctl: libusb couldn't open USB device
/dev/bus/usb/002/001: Permission denied.
Sep 21 07:05:15 boii upsdrvctl: libusb requires write access to USB
device nodes.
Sep 21 07:05:23 boii newhidups[27946]: Startup successful
Sep 21 07:05:23 boii upsdrvctl: Network UPS Tools - UPS driver controller 2.0.5
Sep 21 07:05:23 boii upsdrv: Starting UPS drivers: succeeded
Sep 21 07:05:35 boii upsd[27980]: Connected to UPS [ups]: ups
Sep 21 07:05:35 boii upsd: Connected to UPS [ups]: ups
Sep 21 07:05:35 boii upsd[27981]: Startup successful
Sep 21 07:05:35 boii upsd: upsd startup succeeded
Sep 21 07:05:44 boii upsmon[28000]: Startup successful
Sep 21 07:05:44 boii upsmon: UPS: ups на localhost (master) (power value 1)
Sep 21 07:05:44 boii upsmon: Using power down flag file /etc/killpower
Sep 21 07:05:44 boii upsmon: upsmon startup succeeded
Sep 21 07:05:44 boii upsd[27981]: Connection from 127.0.0.1
Sep 21 07:05:44 boii upsd[27981]: Client monuser на 127.0.0.1 logged into UPS [ups]
Sep 21 07:05:52 boii upsd[27981]: Connection from 127.0.0.1
Sep 21 07:05:52 boii upsd[27981]: Client on 127.0.0.1 logged out

Сообщения от libusb -- нормальная реакция на невозможность открыть
несвязанные с нашей работой устройства на запись.

После чего все работает, но регулярное сканирование шины реализовано в
newhidups некорректно, из-за этого там утекает память:
Out of memory: kill process 27946 (newhidups) score 652587 or a child
Killed process 27946 (newhidups)

Я сейчас разбираюсь с кодом drivers/libusb.c в NUT.

-- 
/ Alexander Bokovoy


Подробная информация о списке рассылки Sisyphus