ようこそNICのホームページへ(なが〜い試運転中)   
HP パソコン 健康 落語 海外 思うまま 電子工作

UPSからNASとサーバーをシャットダウンする方法(その3)
UPS (OMRON BY50S) NAS(QNAP TS-231P) サーバー(shuttle xs36v4)

Last update:2017/9/28    Build:2017/9/28


(その1)へ  (その2)へ  (その3)へ 

 
UPSを入れたのでNASは自動でシャットダウンできるようにした(ここ)。 しかし24時間運転のサーバーもUPSに繋いで電源が 落ちたときは自動でシャットダウンしたい。UPSのUSBが1カ所しかないため、両方をシャットダウンできる方法を考える


 うまくいった結果は(その2)に書きました。ここはこれに至るまでのトラブルや悩んだことを書きます

機器
 サーバー :shuttle XS36V4  (OS:Ubuntu 14.04LTS) のこと
 NAS  :QNAP TS-231P (OS:Linux)      のこと
 UPS  :OMRON  BY-50S            のこと
ネットワーク構成
 インターネット----ルーター--|-------ルーター ----|------ NAS
         (終端装置) |          |
               | |------ メインPC

|-------サーバー(HTTP,HTTPS,SSH)


1.疑問点(これらを並行的に調べ、並行的に実験)

11)NASはどうやってUPSの電源を管理しているのか
12)NASはどのようなときに自分をシャットダウンするのか
13)NASは同じQNAPのNASをシャットダウンすることができる(masterとして)
  これはどのような方法をとっているのか (どんな信号を送るのかまたは手続きは?)

21)NASが商用電源が落ちたと判断した時を、サーバー側からどのようにして知るか
  →これは間にルーターがあるのでサーバー側からは無理
22)どうやってサーバーに知らせるか

31)どうやってサーバーに自動ログインするか。
32)パスワードを求められないようにするには
33)どうやってサーバー上でルートコマンドを実行するか(パスワード対応をどうするか)

2.疑問点 11)〜13)

NASのUPS電源管理はどうしているか、ググっているとNUT(Network UPS Tools)と言う言葉を見つけた。
これはNUTというフォルダーに入れて使われているようだ。
NAS上で「nut」、「NUT」などを探したが見つからす。
何で管理しているのか解らず悩む。しかし「ups」で検索しているとNAS内にupsmonなるコマンドを 見つけた。プロセスでも動いている。これはNUTを使っているようだと判断。

どうやってUPS電源が落ちたことをNAS上で知るのか?ググっているとNUTでは
1) /etc/killpower ファイルが存在したらシャットダウンとの情報をみつけた
  (参照 upsmon.conf(5))
  →しかし このNASでは現れない。
  UPSの電源プラグを抜いたり挿したりしながらいろいろと確認したが、   /etc/killpowerファイルが現れる様子がない。low batteryぎりぎりまで 現れないのかもしれない。そこまではチェックしなかった。

さらにググっているとNUT user-manual 6.2.5 check the ups dataの説明の中に
2)/usr/local/ups/bin/upsc upsname@localhost ups.status で判断できるようだ。
  →たしかにある。

勝手にコラム欄1
 QNAPのlinuxは独特で通常のフォルダーやファイルがないものが多い。
 /var/log/messages はファイルはあるが 0kb
 /var/log/syslog や /var/log/auth.log はファイルがない。
 エラーの場合どこを見れば良いか不明
 NUTも使っているようだが、「nut」フォルダーがない


upsmonにはmasterとしての働きとslaveとしての働きがあるようだ。
NASはQNAPの同じ会社のNASであればどれかがmasterとして働き他の複数のNASをslaveとすることで 同時にシャットダウンできるようだ。
しかしサーバーのシャットダウンはできない(ルーターが間に入らない同一ネットワークならばサーバーにNUTを 導入してslaveとして働かせることでシャットダウンすることができるかもしれないが)
そこでNAS上でシェルスクリプトを動かしサーバーにログインしてシャットダウンする方法を考える。

勝手にコラム欄2
 QNAPのlinuxは独特で通常のコマンドが実行できない
 adminで外部からログオンできる
 adminグループにあるuser1やuser2でもsudoができない
 root権限で行うコマンドはadminでログオンしてから実行する必要がある。
 telnetはadminのみ可能(??)


3.疑問点 21)〜22) 

これは、NAS上でスクリプトを動かしサーバーに自動ログインしてシャットダウンを実行することとした


4.疑問点 31)〜33)

サーバーにQNAPから自動でログインするにはどうすればよいか、ググっていると
公開鍵認証(パスフレーズなし)とすればログイン時にパスワードを聞かれないとの情報
やってみた。しかし公開鍵認証(パスフレーズなし)でもパスワードを聞かれる?
2〜3日の間これで悩んだが、サーバーの/var/log/auth.logを見ているとpam認証が働いている。
私のサーバーはsshのアクセス者が限られること及びセキュリティ上の理由でxinetd配下にsshdを置いたことを思い出した。
普通はsshdが常時動いている。従って公開鍵認証のパスフレーズなしでパスワードを聞かれることなく
ログインできるのだろうと判断した。今回はパスワードを聞かれることを前提にシェルスクリプトを考えることにした。


勝手にコラム欄3
 パスワード不要について混同していた。
 自動ログインするのにいろいろぐぐっていたら、
 1)公開鍵認証でパスフレーズなしで良いという情報がある。
 2)一方、/etc/sudoersを修正すればよいとの情報もあった。
 1)、2)ともに試したが自動ログインできなかった。

 完全に確認しきったわけではないが、
 1)はログインするときにパスワードが不要になるとの理解
   →今回はあきらめて「ssh_askpass」を使った
 2)はログインした後、sudoをパスワードなしで実行するときに必要と理解した。
     →今回適用した。



勝手にコラム欄4
 QNAPのシステムは独特でユーザーの追加はQfinderからの操作のみ?
 シャットダウン専用のユーザーuser1をadminでsshでログオンして作成した。
 しかし、user1でsshを使ったログオンができない。
 /etc/ssh/sshd_configにAllowHostsが存在するので
 user1を追加したが、それでもsshでログオンできない。
 そのうち「too much password wrong・・」と表示され拒否される。
 たくさんパスワードを間違えたからか? と新たにuser2を作成するも
 最初から「too much password wrong・・」が表示され拒否される。
 「ユーザーが違うじゃないか?!!」と叫んでもやむなし、解決しない。
 これで何日もロス。作業はadminでログオンしuser2のフォルダーで作業。
 Qfinderからユーザーを作成しないとだめなのか?と思い、
 user2を削除し、Qfinderから同じuser2を作成。これなら大丈夫かと思ったが、
 やはり同じ症状。 うーん。?? さらに数日ロス。
  Qfinderのコントロールパネルのネットワーク関係のところにtelnet/sshと
 あるのを偶然発見した(画像です)。
 ここからアクセス編集でuser2のところのsshにチェックを
 入れると、user2でsshを使ってログイン可能になった。 うーん。難しい。


自動ログインなどの言葉でググっていると

「Qiitaにwadahiro」さんが投稿した「expectやsshpassを使わずにシェルでSSHパスワード認証を自動化する」 や 「Keep the Light Alive」さんの「シェルスクリプトでssh越しにコマンドを実行する」のページ を見つけた。

ここでも 1番お薦めは公開鍵認証のパスフレーズなしがあがっていたが、 パスワード要求に対応するにはSSHPassやexpetcなどを使うのが良いとのこと。 しかしNASには難しい。
どうしてもパスワード入力が求められてexpectの導入などができない場合は ssh_askpassを使う方法の紹介があった。


  以下ソフトをインストールしようと考えたときに全て共通することで
 NAS(TS-231P)はCPUがARM系とのこと。インテルなどではない。
 OSはLinuxだが独自にアレンジしているようで、CentOS,RedHat,Debian系などではない。  従って yumやapt-getなどが使えない(と思う)

 いわゆるソースからの導入( ./configue ==> make ==> make install )となる
 しかし、NASにはgccなどコンパイラーが入っていない。
 めんどうだ!!!??
 NASとして使うことが目的なので必要最小限なのかもしれない。

「Keep the Light Alive」さんのシェルスクリプトとコマンドセットを これを使わせて貰うことにした。(感謝!! 感謝!!)




sudoを利用するときにパスワードなしで実行するには
「QiitaにRyodoTanaka」さんが投稿した「sudo のパスワードを入力なしで使うには」を参考にさせて貰った。

いろいろと並行して調べていたのでどちらが先かわからないが、 NAS上のUPS名が必要となった。ググっていると
「Lamb EDEN」さんの「QNAPに接続したUPSと連携する」(またはPDF)のページでQNAPのupsnameが解った。
「qnapups」だ。 これでシェルスクリプトにいれられる。

シェルスクリプトは試行錯誤の結果、(その2)に記述したとおり。


シェルスクリプトを直接実行するとサーバーをシャットダウンできたが、 cronで実行すると、実行はするが、シャットダウンできない。
これはシェルスクリプトのファイルをフルパス表示に改めることで直った。


勝手にコラム欄5
QNAPからUPSデータを全てチェックするには
 /usr/local/ups/bin/upsc omron123456@localhost 
             ↑upsname(仮)
  (参照 NUT user-manual 6.2.5 check the ups data 
          またはPDF(抜粋) )
ups.status を見るには
  /usr/local/ups/bin/upsc omron123456@localhost ups.status
  (参考 TS-231Pのコマンドは/sbin/upscにあった)

「Lamb EDEN」さんの「QNAPに接続したUPSと連携する」のページでQNAPのupsnameが解った。

 QNAPが使うUPSNAMEは「qnapups」のようだ
 したがって ups.status を見るには
 /sbin/upsc qnapups@localhost ups.status
で確認できる。


参考
NASとUPSの連携に
「プログラマーのメモ書き」さんの「QNAP TS-251+ の設定(UPSおよび他NASとの連携)」ページが参考になった。

また
「kenjiskywalkerさよならインターネット」さんの「Ubuntu 13.10でOMRONのUPS BY35Sを使う」も参考になった。
$ lsusb | grep -i omron
Bus 002 Device 006: ID 0590:0080 Omron Corp.
$
$ lsusb -v -s 002:006

Bus 002 Device 006: ID 0590:0080 Omron Corp.
Couldn't open device, some information will be missing
  (以下 略 )


 


電子工作へ     HomePage     このページのトップ