UPSからNASとサーバーをシャットダウンする方法(その3)
UPS (OMRON BY50S) NAS(QNAP TS-231P) サーバー(shuttle xs36v4)
UPSを入れたのでNASは自動でシャットダウンできるようにした(ここ)。
しかし24時間運転のサーバーもUPSに繋いで電源が
落ちたときは自動でシャットダウンしたい。UPSのUSBが1カ所しかないため、両方をシャットダウンできる方法を考える
うまくいった結果は(その2)に書きました。ここはこれに至るまでのトラブルや悩んだことを書きます 機器 サーバー :shuttle XS36V4 (OS:Ubuntu 14.04LTS) のことネットワーク構成 インターネット----ルーター--|-------ルーター ----|------ NAS 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 で判断できるようだ。 →たしかにある。
upsmonにはmasterとしての働きとslaveとしての働きがあるようだ。 NASはQNAPの同じ会社のNASであればどれかがmasterとして働き他の複数のNASをslaveとすることで 同時にシャットダウンできるようだ。 しかしサーバーのシャットダウンはできない(ルーターが間に入らない同一ネットワークならばサーバーにNUTを 導入してslaveとして働かせることでシャットダウンすることができるかもしれないが) そこでNAS上でシェルスクリプトを動かしサーバーにログインしてシャットダウンする方法を考える。
3.疑問点 21)〜22) これは、NAS上でスクリプトを動かしサーバーに自動ログインしてシャットダウンを実行することとした4.疑問点 31)〜33) サーバーにQNAPから自動でログインするにはどうすればよいか、ググっていると公開鍵認証(パスフレーズなし)とすればログイン時にパスワードを聞かれないとの情報 やってみた。しかし公開鍵認証(パスフレーズなし)でもパスワードを聞かれる? 2〜3日の間これで悩んだが、サーバーの/var/log/auth.logを見ているとpam認証が働いている。 私のサーバーはsshのアクセス者が限られること及びセキュリティ上の理由でxinetd配下にsshdを置いたことを思い出した。 普通はsshdが常時動いている。従って公開鍵認証のパスフレーズなしでパスワードを聞かれることなく ログインできるのだろうと判断した。今回はパスワードを聞かれることを前提にシェルスクリプトを考えることにした。
自動ログインなどの言葉でググっていると 「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で実行すると、実行はするが、シャットダウンできない。 これはシェルスクリプトのファイルをフルパス表示に改めることで直った。
参考 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 (以下 略 ) |