Problemas ao iniciar as ferramentas de rede UPS com uma UPS Eaton 3S


10

Executando um servidor Ubuntu em um no-break Eaton 3S 700VA. A conexão USB da Eaton entra no meu servidor Ubuntu. Estou tentando usar a NUT para gerenciar o no-break.

Depois sudo sude

cat /etc/nut/ups.conf:

[eaton]
    driver = usbhid-ups
    port = auto
    desc = "Eaton 3S"

upsdrvctl -t start

Network UPS Tools - UPS driver controller 2.6.1
*** Testing mode: not calling exec/kill
   0.000000 
   0.000805 Starting UPS: eaton
   0.000955 exec:  /lib/nut/usbhid-ups -a eaton

upsdrvctl start

Network UPS Tools - UPS driver controller 2.6.1
Network UPS Tools - Generic HID driver 0.35 (2.6.1)
USB communication driver 0.31
Can't claim USB device [0463:ffff]: could not detach kernel driver from interface 0: Operation not permitted
Driver failed to start (exit status=1)

Respostas:


10

Embora eu não afirme ser um especialista aqui, estou preocupado que esta resposta não resulte em uma alteração persistente de permissão durante uma reinicialização e / ou o cabo usb do no-break seja movido para uma porta diferente.

Seguindo as informações aqui: Reflexões do Nannerpuss: NUT - Network UPS Tools - no Ubuntu .

"... O problema envolve o fato de o Ubuntu montar o dispositivo como pertencente à raiz, mas o daemon nut cai para uma conta sem privilégios que não possui o acesso necessário. A correção simples é usar o udev para ajustar as permissões do dispositivo.

Conecte o dispositivo e (como root) execute lsusb e localize-o. Observe as IDs de barramento e dispositivo, bem como o par Fornecedor: ID do produto .... "

usando a saída como na resposta acima:

$ lsusb
Bus 002 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply   

novamente a partir do link "... Você pode criar uma regra do udev que controla o comportamento da montagem na inicialização: ..." (editado para corresponder melhor a esse cenário) "

  • use seu editor de texto favorito para criar (provavelmente) um novo arquivo rules.d do udev. O número deve ser maior que qualquer outro arquivo de regras udev.d para a mesma ação:

por exemplo

sudo nano /etc/udev/rules.d/90-nut-ups.rules

# /etc/udev/rules.d/90-nut-ups.rules
ACTION=="add", \
SUBSYSTEM=="usb", \
ATTR{idVendor}=="051d", ATTR{idProduct}=="0002", \
MODE="0660", GROUP="nut"

A regra observa as adições de dispositivos USB a um fornecedor e produto que correspondem ao no-break. Em seguida, define o modo como 0660 e o grupo como nut, em vez da raiz padrão.

Observe que esta resposta usa permissão 660 em vez de 666, pois isso deve ser suficiente e mais seguro.

Recarregue o udev (reinicialize ou talvez desconecte e reconecte o cabo usb do no-break na porta do pc), desconecte e reconecte o dispositivo e verifique se as novas permissões estão corretas. Eu não estou claro nesta parte. De qualquer forma, depois que o grupo de usuários da porca tiver lido e gravado no dispositivo, deverá poder iniciar com êxito.

O udev rules.d edit funcionou no meu sistema 12.04.2, mesmo quando mudei o cabo USB para uma porta diferente, resultando em diferentes números de dispositivos de barramento na saída lsusb. Udev lidou com tudo sem intervenção. Na verdade, talvez eu não tenha tido que reiniciar quando a mudei, mas não consigo me lembrar com certeza e deixarei esse teste para outra pessoa.


Achei que isso funcionou bem para mim com um APC Back-UPS CS 650 no Ubuntu 12.04.
Paul Gear

Isso não deve ser relatado como um bug no ubuntu? e consertado no pacote oficial de nozes?
Jarl

Isso funciona, mas rolar um pouco e ler a mensagem mais recente "esse bug já foi corrigido" (especificamente: /lib/udev/rules.d/62-nut-usbups.rulesestá instalado agora) significa que esta solução é tecnicamente obsoleta.
Dannysauer 04/04/19

9
  • Você pode usar lsusbpara descobrir o número do barramento e do dispositivo

  • Em seguida, mude a permissão para o dispositivo

    chmod 0666 /dev/bus/usb/[bus number]/[device number]
    

Por exemplo

$ lsusb
Bus 002 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
$ chmod 0666 /dev/bus/usb/002/004

3

em relação a este erro:

 failed to claim USB device: could not claim interface 0: Operation not permitted

O FAQ da NUT em http://www.networkupstools.org/docs/FAQ.html tem o seguinte (ênfase minha):

se a NUT tiver sido instalada recentemente e se o cabo USB do dispositivo já estiver conectado ao instalar a porca [então], basta desconectar e reconectar o cabo USB e, em seguida, reinicie a porca.

Esse truque funcionou para mim.


Eu tive que reiniciar o udev ( sudo systemctl restart udev) e desconectar / reconectar o no-break, FWIW.
precisa saber é o seguinte

1

Como o ndemou disse, o FAQ do NUT está ciente do problema e um patch foi lançado, corrigindo o bug. Mas distros estáveis ​​antigos podem ser afetados. Felizmente, a solução é muito simples ...

No FAQ da NUT: "Meu no-break USB é suportado, mas não funciona!" :

No Linux, as regras do udev são fornecidas para definir as permissões corretas no arquivo do dispositivo. Isso permite que o driver NUT se comunique com o no-break através desse arquivo de dispositivo.

No entanto, o driver ainda pode falhar ao iniciar e dar suporte ao dispositivo, com uma mensagem como:

falha ao reivindicar o dispositivo USB: não foi possível reivindicar a interface 0: operação não permitida

Operação não permitida é uma mensagem apontando para um problema de privilégio. O problema mais frequente é que o udev não aplicou a regra:

if NUT has been freshly installed,
and if the device USB cord was already plugged when installing NUT. 

Nesse caso, basta desconectar e reconectar o cabo USB e, em seguida, reinicie o NUT.

Ocorreu um erro na nomeação do arquivo de regras do NUT udev que resultou na substituição das regras por outro arquivo de configuração do udev. Embora isso tenha sido corrigido na ramificação principal do Git, sua distribuição ainda pode ser afetada. Os detalhes estão disponíveis na seguinte edição do Github: https://github.com/networkupstools/nut/issues/140

Olhando mais para a questão do Github, me dê a solução:

As regras do udev são aplicadas tarde demais (prioridade 52), resultando na substituição de privilégios de nozes. O resultado final é que o driver não inicia e as falhas de conexão com o driver / UPS são relatadas por upsd e upsmon.

A correção é simplesmente definir a prioridade como 62 renomeando o arquivo de regras:

$ mv /lib/udev/rules.d/{5,6}2-nut-usbups.rules

Esse bug afeta:

Debian: http://bugs.debian.org/721600
Fedora / Redhat: https://bugzilla.redhat.com/show_bug.cgi?id=488368
Ubuntu: https://bugs.launchpad.net/debian/+source/nut/+bug/1099947 and probably all Linux distribution

0

Se você estiver longe do cabo USB do seu no-break (conectando o novo no-break novo e fazendo a configuração meses mais tarde, porque você não tem tempo), e reiniciar a máquina não é uma opção, você pode reativar as regras do udev:

udevadm control --reload
udevadm trigger
systemctl restart nut-server

Faz o trabalho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.