web-dev-qa-db-ja.com

Eaton 3S UPSを使用したネットワークUPSツールの起動に関する問題

Eaton 3S 700VA UPSでUbuntuサーバーを実行します。 EatonのUSB接続は、Ubuntuサーバーに接続されます。 NUT を使用してUPSを管理しようとしています。

Sudo su 'ingの後

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)
10
Zeophlite

ここで専門家であると主張しているわけではありませんが、この回答では再起動後も永続的なアクセス許可の変更が行われず、UPSからのUSBケーブルが別のポートに移動することを心配しています。

ここからの情報に従ってください: Nannerpussの使用法:NUT-ネットワークUPSツール-Ubuntuで

"...問題は、Ubuntuがデバイスをroot所有としてマウントするが、nutデーモンが必要なアクセス権を持たない非特権アカウントにドロップするという事実に関係しています。

デバイスを接続し、(ルートとして)lsusbを実行して見つけます。バスIDとデバイスID、およびベンダー:製品IDのペアに注意してください。.. "

上記の回答のように出力を使用します:

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

再びリンクから...「ブート時のマウント動作を制御するudevルールを作成できます:...」(このシナリオによりよく一致するように編集)

  • お気に入りのテキストエディタを使用して、(ほとんどの場合)新しいudev rules.dファイルを作成します。同じアクションの場合、この数値は他のudev.dルールファイルよりも大きくする必要があります。

例えば

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"

このルールは、UPSに一致するベンダーと製品でのUSBデバイスの追加を監視します。次に、モードを0660に設定し、グループをデフォルトルートの代わりにnutに設定します。

この回答では、666ではなく660のアクセス許可を使用することに注意してください。これは、十分で安全なはずです。

Udevをリロード(再起動、または場合によってはpcポートでUPSからusbケーブルを抜き差し)してから、デバイスを取り外して再接続し、新しい権限が正しいことをテストします。この部分については不明です。いずれの場合でも、nutユーザーグループがデバイスで読み取りと書き込みを行うと、正常に起動できるはずです。

USBケーブルを別のポートに移動しても、udev rules.dの編集は12.04.2システムで機能し、lsusb出力で異なるバスデバイス番号になりました。 Udevはすべて介入なしで処理しました。実際、移動したときにリブートする必要はなかったかもしれませんが、確実に思い出せず、そのテストを他の人に任せます。

10
user122096
  • lsusbを使用して、バスとデバイス番号を見つけることができます

  • 次に、デバイスの許可を変更します

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

例えば

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

このエラーに関して:

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

http://www.networkupstools.org/docs/FAQ.html にあるNUT FAQには次のようなものがあります(重要なもの):

nUTを新たにインストールした場合、およびナットをインストールするときにデバイスのUSBコードがすでに接続されている場合[その後] SBコードを取り外して再度接続し、ナットを再起動します。

そのトリックは私のために働いた。

3
ndemou

Ndemouが言ったように、NUT FAQは問題を認識しており、パッチがリリースされてバグを修正しています。ただし、古い安定版ディストリビューションは影響を受ける可能性があります。うまくいけば、解決策は非常に簡単です...

NUTからFAQ:「USB UPSはサポートされていますが機能しません!」 :

Linuxでは、デバイスファイルに正しい権限を設定するためのudevルールが提供されています。これにより、NUTドライバーは、このデバイスファイルを介してUPSと通信できます。

ただし、次のようなメッセージが表示されて、ドライバーがデバイスの起動とサポートに失敗する場合があります。

uSBデバイスの要求に失敗しました:インターフェイス0を要求できませんでした:操作は許可されていません

許可されていない操作は、特権の問題を示すメッセージです。最もよくある問題は、udevが実際にルールを適用していないことです。

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

この場合、USBコードを抜き差しして、NUTを再起動するだけです。

NUT udevルールファイルの命名に誤りがあり、その結果、ルールが別のudev構成ファイルによって上書きされました。これはGitマスターブランチで修正されていますが、ディストリビューションが影響を受ける可能性があります。詳細は、次のGithubの問題で入手できます。 https://github.com/networkupstools/nut/issues/14

Githubの問題をさらに見ると、解決策があります:

udevルールの適用が遅すぎて(優先度52)、nut特権が上書きされます。最終結果は、ドライバーが起動せず、ドライバー/ UPSへの接続障害がupsdおよびupsmonによって報告されることです。

修正は、ルールファイルの名前を変更して優先度を62に設定することです。

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

このバグの影響:

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
1
Trolabuntu