サーバー類のリモート電源操作環境を整備

計画停電や節電の関係で24時間稼働していたサーバーをスリープ運用に切り替えたり、停電空けの自動復帰が上手くいかなくて遠隔でリモート起動させないとならない場合があります。iPhoneアプリの活用も含めて、ここ最近やった準備をまとめておきます。同じことを考えてる方の参考になれば幸いです。

■我が家の構成

我が家はメインのサーバーがhpのML115G1でUPS(無停電電源装置)を使って保護しています。このLinuxサーバーがVPN(PPTP)サーバーも兼ねているので、これが落ちていると基本的に他の全てのマシンにもアクセスできません。Webサーバー、メールサーバーも稼働しているので、最低限このPCの稼働状態を保つことが最優先です。残念なことにこのマシンはBIOSでAC電源断後の自動起動を設定しても、UPS等による正常シャットダウンの場合は「不意の電源断」と見なされず自動起動してくれないようなのですが、幸いこの激安サーバーのBTOオプションでLights-Out 100cという遠隔管理ボードをつけてあり、これを利用すれば遠隔再起動できました。

2番目に重要なのはテレビ録画用の自作Windowsマシン。今までは安定性重視で24時間稼働だったのを節電時間帯はスリープに切り替えました(でもまだ録画完了後に自動でスリープに落ちないとか課題あり)。しかしこのPCはHDD容量の余裕もあることから、一時ファイル置き場にもなっていて、スリープしてるのを外から起こして中のファイルを取り出したくなったりします。これは仕事用PCなども同様ですが、これらはメインサーバーが生きていてPPTPで自宅内LANに入ることができれば、後はWake-On-Lan(LANケーブルからの特殊パケットによってPCを起動させる機能)を使って起こすことは可能です。

ついでに、先日買ったMacBook Proと同Airを「どこでもMy Mac」機能で相互に遠隔操作できるようにしたので、据え置きでスリープしているMBPを、外出先のMBAから利用できるようこちらも設定してみました。

■ML115 + Lights-Out 100cを遠隔操作で起こす

Lights-Out 100cはML115のPCIバスに装着されたボードで、本体が通電されてる限りは起動している独立したプロセッサをもつ簡易サーバーです。本体とは別のEthernetポートをもっていて、IPアドレスも独立です。Webブラウザやtelnet/SSHターミナルからアクセスして、本体のハードウェア状況(温度やファンの回転数など)を監視したり、電源のON/OFFができます(例えばOSがフリーズして全く操作を受け付けなくなっても、こちらからブチッとやれる)。また本体のグラフィック出力やキーボード入力に割り込め、ブラウザ画面から物理モニタ、キーボードの前にいるのと同じ操作が行えます(ネットワーク的に死んでいてもコンソールで操作したりエラーメッセージを読み取るなどの余地が残る)。ハードウェアレベルで画面共有付きの遠隔操作できる訳ですね。

IMG_0865 IMG_0866

今回の場合、画面共有までは不要で、電源投入操作が行えればOK。WebやSSHでもできるんですが、出先からなるべく簡単に行いたいということで、先日教えていただいたiPhoneアプリを導入しました。IPMI touchというものです。IPMIとはこうした遠隔管理システムのためのプロトコルで、Lights-Out 100cはIPMI 2.0の設定でいけます。

画面写真、左がハードの各種数値を表示した状態、右が電源操作画面です。ナウいですね。

今回のケースではLights-OutのもつIPアドレスはプライベートで、このPCが落ちてるとPPTPでも入れないという状況なので、ルーターの設定をいじってポートをリダイレクトしてやる必要がありました。セキュリティの為、必ずパスワードやユーザ名を変更しておきます。

余談ですが、このパスワード変更を失敗してしまい、Lights-Outにアクセスできなくなり焦りました。BIOS画面辺りでリセットできるかと思ったんですがそう簡単でもなく、結局と海外の掲示板で調べ、あるツールとDOSをUSBメモリにインストールし、おまじないのような長い16進数パラメーターをつけたコマンドを実行する必要がありました。これあんまりおおっぴらにするのもなんだなということで覚え書きは自粛。個人的なメモに留めておきます。

■その他のPCをWake-On-LANで起こす

Wake-On-LANは今時のEthernetボード(マザーにオンボードのものも含む)ならまず対応しているみたいなので、起こされる側は特になにも設定の必要はないと思います。ただWindowsやMacではオフにする設定項目もあるので、もし起きないようならチェックしてみると良いでしょう。

Windowsの場合、デバイスマネージャーから該当するネットワークアダプタのプロパティを開き、「電源の管理」タブで「このデバイスで、コンピューターのスタンバイ状態を解除できるようにする(O)」のチェックを確認します(細かい文言はWindowsのバージョンによって違うかも知れません)。

MacOSXの場合、システム環境設定の「省エネルギー」で「ネットワークアクセスによってスリープを解除」でいいと思います。

さて、Wake-On-LANといえど、どんなパケットにも反応して起きてしまっては困りますので、マジックパケットと呼ばれる一定のルールに沿ったパケットを受信した時だけ復帰を実行するようになっています(モノによってはそれ以外のも反応するよう設定できるみたいです)。つまり起こす側はこのマジックパケットを出力できる必要があります。あと、PCが起動していない以上、IPアドレスは不定なので、マジックパケット送信のための宛先指定はMACアドレス(全てのネットワーク機器がもつ個別の識別番号)を使います。起こしたいマシンの有線LANポートがもつMACアドレスを予め調べておいて下さい。

・Linuxで起こす

ウチの場合、どのみちPPTPサーバーであるメインサーバーが起きていることが前提なのでそこにSSHでログインしてコマンドを叩くのが簡単です。CentOSの場合、net-toolsというパッケージに含まれるether-wakeというコマンドが使えます。ウチの場合は最初からインストール済みでしたが、もしない場合は、

yum install net-tools

でインストールできると思います。

使い方はシンプルで、

/sbin/ether-wake 00:5c:a9:21:55:ff

のようにMACアドレスを指定してやるだけ。root権限が必要みたいです。

σ(^^)はマシン毎のMACアドレスを覚えるのが大変なので、rootの.bashrcに

alias wake_pc1=’/sbin/ether-wake 00:5c:a9:21:55:ff’

のように書いておきました。これで次回ログイン時からは単にwake_pc1で実行できます。

・iPhoneアプリで起こす
IMG_0867

iPhoneからでもSSHアプリを使えば上記手順でできる訳ですが、アプリで簡単にできるものはそっちを使う主義なので、専用アプリを導入しました。iNet Proというアプリで700円です。これはスキャナーなどのネットワークツールの詰め合わせアプリなのでちと高いですが、同じところが出しているWake-On-LAN専用アプリiNet WOLなら230円です。

前者のみかも知れませんが、LAN内で稼働中のマシン一覧を取得してそこからリスト登録ができるので、一台ずつMACアドレスを調べて手打ちする手間も省けてGoodでした。

また相手がMacの場合、設定画面でIDとパスワードを保存しておけば、スリープ移行やシャットダウンもできるようです。ただウチでスリープを試した限り、画面は消えるものの、スリープランプが点滅にならないという感じでした。

(iPhoneのようにVPN経由で接続した端末からマジックパケットを送る場合、PPTPサーバー側でブロードキャストパケット中継を行う設定が必要でした。これは別エントリで説明します。)

・ルーター管理画面から起こす

BUFFALOの一部のブロードバンドルーターでは管理画面からLAN内の各マシンにマジックパケットを送る機能があるみたいです。該当機種をお使いの場合、それも簡単で良いかも知れません。

室内でワンセグ付きケータイを使用可能にする簡易アンテナ


ELECOM ワンセグ携帯用アンテナケーブル
[ 3m | 5m | 10m ]


YAGI ワンタッチ2分配器 CS2DP-D

節電生活の中でもニュース等の情報収集のためにテレビをつっけぱなしにしておきたいことがあるんですが、我が家の32インチテレビはエコ合戦前のものでカタログ上の消費電力が167W。バックライト輝度を落としても100Wは下らないんじゃないかと。その上、訳あってテレビにはB-CASカードが入っておらず、BDレコーダーも立ち上げてそちらのチューナーで視聴する構成になっています。

これを節約すべく、PC用のUSBワンセグチューナーを物色したんですが、Macにも対応したものだと結構お高い。VMWare上のWindowsでも使えるらしいのですが、それもなんか悔しいw。

こう毎日ニュースが気になるのはそう長くは続かない気がするので、今Mac対応のワンセグチューナーに1万円以上出すのはちょっともったいないなと。

そこで、おサイフケータイとして使ってるサブ端末のF-04Bの内蔵ワンセグチューナーを部屋の中でも見られるようにしようと、クリップ式の簡易アンテナを購入しました。片側がF型接栓になっていて、壁のテレビアンテナ端子に直結します(他にテレビがつながってる場合は別途分配器を使えばOK)。あとは反対側がクリップになっていて携帯電話本体のワンセグアンテナをはさんでやるだけ。

効果覿面!各種電波が恐ろしく入らない我が家でも楽勝でワンセグ放送を視聴できました。

PC用チューナーと違って本体をどこかに保持する必要があるのは難点ですが、逆にPCを起動してなくても使える点もあり一長一短ですね。1,000円ちょっとで買えるので、気軽に試せる点はGood。

MacBook Proのキーボード周り環境整備覚え書き

MacBook Proのキーボード周りの設定がようやく固まってきました。特にUSBでWindows用キーボードつなげる際のチューニングが、以前Mac mini用にやってたはずの方法が思い出せず(Mac miniは先日の停電の煽りか、システムがクラッシュして設定がのぞけなくなった)、再度あれこれ試行錯誤するはめに陥ってました。今度はちゃんと記録に残しておこうと思います。

今回いじったのは、

の4点。使用した外付けキーボードはJIS配列のRealForce。一般的なPC用キーボードで、Ctrlが左下でShiftの上にCapsLockという配列です。

目指した状態は

  1. 「英数」キー(スペースのすぐ左)でIMEのON/OFFをトグル
  2. Commandキーを使うショートカット(全選択:A、カット:X、コピー:C、ペースト:V等)がCtrlでも使えるようにする
  3. ファンクションキーとFn+ファンクションキーの動作を入れ替える
  4. USB接続のPC用キーボードで、左Shiftの上をCtrlにする(いわゆるCtrl-CAPSスワップ)
  5. USB接続のPC用キーボードで、英数の左がCommand、そのまた左がOptionという配置にする(Macに揃える)
  6. USB接続のPC用キーボードで、英数キーを利用可能にする
  7. ターミナルではCommandキーがOptionキー(=Metaキー)として使えるようにする

という感じ。1.はかなり特殊な使い方だと思いますが、「1」の左に「全/半」がない、またはESCキーとして使いたいという人にはなかなかオススメです。スペースをはさんで反対側にある「かな」キーを使い分けるのはどうも馴染めなくて、1つのキーでトグル動作させる前提で代替キーを模索した結果ここに落ち着いてます(Macにするずっと以前からコレで統一してます)。

3は、Macのデフォルトではファンクションキーは輝度や音量の調節アサインされ、通常のF1~F12キーはFnを押しながらタイプする必要があります。ちょうどPCと逆ですね。F6~F10はATOKでも使うので、これはPCに揃えたい。

4~6はPC用のキーボードをMacで使う時のお約束ですね。USBさせば普通に使えると思われがちですが、「変換(=かな)」、「無変換=(英数)」キーが使えなかったりするし、CAPSとCtrl、Command(=Win)とOption(=Alt)の位置が逆だったり。

7.はターミナルでEmacs等を使う時、Option(meta) + Wとか入れようとしてCommand + Wしてウインドウが閉じようとしてしまうのを防ぐ為です。

これら全てを解決すれば、MacBook Pro内蔵キーボードとUSBキーボード、そしてMacとWindowsのショートカットが違和感なく統一でき、気持ち良くスイッチできるというものです。

■解決編

以下、いくつかの解決方法があるものもありますが、なるべくOS標準機能を使い、サードパーティツールで書き換える部分を最小限にする方針でまとめてみました。

1. 「英数」キー(スペースのすぐ左)でIMEのON/OFFをトグル

KeyRemap4MacBookの「For Japanese」セクションに「Change EISUU Key」という項目があり、「Use EISUU as KANA/EISUU (toggle)」をチェックします(設定が用意されてるということは意外と特殊な使い方でもないのかな?)。

またIMEにATOKをインストールしている場合、「キー・ローマ字 カスタマイザ」->「キー設定」を開き、「英数」キーへの割り当てをすべて無しに、「かな」キーへの割り当てを全て「ひらがな入力文字種(あ)」にします(後者は違うのを設定した気がしますがいつのまにかこうなってました。他のON/OFF系の機能でもいいかも知れません)。

更に、「システム環境設定」→「言語とテキスト」→「入力ソース」を開き、「ATOK」の下の使わない入力モードのチェックをオフにする必要もあるかも知れません(オフにしたからといって変換候補に出なくなる訳ではありません)。

2. Commandキーを使うショートカット(全選択:A、カット:X、コピー:C、ペースト:V等)がCtrlでも使えるようにする

これもKeyRemap4MacBookで設定できます。上記同様「For Japanese」セクションの下に「Use PC style ~」というのがあるので、必要なものをチェックします。

3. ファンクションキーとFn+ファンクションキーの動作を入れ替える

これは簡単です。「システム環境設定」→「キーボード」を開き、「F1、F2などのすべてのキーを標準のファンクションキーとして使用」をチェックします。輝度や音量などアイコンで印刷されている機能を使う時にFnを押す形になります。

またSpotlight、Dashboard、Spaces、Expose等についてはそれぞれ「システム環境設定」の各画面でアサインが割り当てられるので、こちらだけはFnを押さずにダイレクトに機能させたければ別途設定可能です。

4. USB接続のPC用キーボードで、左Shiftの上をCtrlにする(いわゆるCtrl-CAPSスワップ)
5. USB接続のPC用キーボードで、英数の左がCommand、そのまた左がOptionという配置にする(Macに揃える)

    これら2つはKeyRemap4MacBookに設定があるのですが、ここで入れ替え設定しまうと内蔵キーボードと外付けキーボード両方に適用されてしまい、内蔵キーボードで問題がおきます。

    で、実はこれはOS標準の機能でキーボード毎に設定ができます。「システム環境設定」→「キーボード」を開き「装飾キー…」ボタンを押すと設定画面が現れます。画面上の「キーボードを選択」プルダウンメニューから対象キーボードを選択して設定すればOKです。ちょっと深いところにあるので見落としがちですが、Appleもこんな設定用意しといてくれるなんてニクいですね。

    6. USB接続のPC用キーボードで、英数キーを利用可能にする

    RealForceをMacにUSB接続した場合、無変換キーを押すとなぜか「A」が入力されてしまいます。かな入力モードで英数入力しようとおすと「あ」とか出ちゃう訳ですね。でこれもKeyRemap4MacBookの作者さんがパッチを作ってくれてまして、冒頭にリンク貼ったPCKeyboardHackがそれです。こちらをインストールし、「Enable XFER Key」をチェックし、Keycodeに「102」を指定すればOKです。ちなみに「かな」キーが「KANA Key」、「変換」キーが「XFER Key」なのでこちらも利用したければ設定して下さい。

    7. ターミナルではCommandキーがOptionキー(=Metaキー)として使えるようにする

    これもKeyRemap4MacBookで設定できます。「For Application」セクション→「Enable at only Terminal」にある「Change Command_L to Option_L」をチェックします。「(Pass-Through Tab and Backquote)」とついてるのとついてないのがありますが、ついてる方を選んでおくと、Command + Tabでアプリ切換したい時だけはCommandキーとして機能してくれます。ホント至れり尽くせりですね!

     

    なお、KeyRemap4MacBook、PCKeyboardHackともにインストールして再起動すると、「システム環境設定」画面の一番下に現れます。通常のアプリケーションとは勝手が違うのでご注意下さい。どちらもフリーですが、作者さんのサイトからPayPalを使って寄付できるようになってます。この2つのツールがなければこうもスンナリWin<->Macのスイッチができた気がしないので、感謝を込めて少額ながら贈らせていただきました。本当にどうもありがとうございます。>作者さん

    MacBook Pro Early 2011 15’のメモリ増設

    MacBook Proのメモリを純正の4GBから8GBに増設しました。Apple StoreのCTOで追加すると18,480円。タイプはDDR3-1333(PC-10600)の204pinのSO-DIMM。スロットは2つで2GBが2枚刺さっているので全交換になります。Amazonで見つけた最安はリンク下のCFDブランドのもので6,980円でした(8GBで7,000円とかスゴい時代ですな)。レビューをみると各種Macでの動作実績もあるみたいだしこれでいいやと注文したんですが、なかなか発送されないので、結局キャンセルしてヨドバシで上のADATAのものを買って来ました。ADATA、SDカード等のフラッシュメモリではあまり良いイメージがないですが、最近のDRAM、特にDDR3世代では意外と好評かみたいだしとか。ちなみにチップはhynix。MBP純正はSAMSUNGらしいとどこかで読んだんですが、実際にあけてみるとhynixでした(写真は換装前の純正品)。

    SDIM0033

    この写真、MBPを裏返して薄い底板外してすぐの状態ですが、こんなにすぐメインボードが露出するのっと国産ノートじゃ珍しい気がします。薄いとは言え金属板なのでその直下にこんな脆そうなパーツあってもキニシナイって感じなんですかね。作業中この上に重たいパーツ落としたらマザー逝くよなとかドキドキでした。

    で、あっさり起動して8GBと認識しました。問題なく動作している気がします。一応memtestのGUIフロントエンドらしいRemberをしばらく走らせてみましたが、数分で飽きて止めましたw。なにか不具合が出たらあらためて回してみます。

    2012.09.15追記: Mountain Lionにした頃からビープ三回フリーズが毎日のように発生しはじめ、結局別のメモリに交換しました

    ■メモリ増設にあたって心配したこと

    今回メモリを増設するかどうか結構迷いました。SSDが速いせいかあまり体感速度に不満はなかったので、むしろメモリが増えることでディープスリープ(ハイバネーション)からの復帰が遅くなったりしないかなとか。それがないなら値段的にも安いものだし気分も良いので増設しようと。

    気になったのはMacBook Airで1時間(正確には70分らしい)電源をつながない状態でスリープがつなぐと、Windowsでいう休止状態のような状態になり、そこからの復帰がややもたつくこと(もたつく時間より、その間アクセスランプなどのフィードバックが一切ないMacなので心臓に悪い、という方がイヤ)。MacBook Proでもそんなことになったらちょっとな、とか思ったんですが、知人に聞いたりしても復帰は一瞬じゃね?と話が合わない。よく調べてみると、1時間強でディープスリープに移行するという動作がデフォルトなのは30日スリープを謳うMacBook Air 2010のみみたいですね。他の機種でも設定をいじればそうできるし、MBAでそうならないようにもできるみたいです。つまりデフォルトではメモリ内容をSSD/HDDに書き出しつつ通電スリープで瞬時復帰(Windowsでいうとハイブリッドサスペンド、ただし時間経過による休止状態移行はオフ、って感じ)。Macではこれをセーフスリープと呼ぶみたいです。HDDだとパタンと閉じてしまらくは書き込み時間があるのですぐにカバンにしまって移動、というのは心臓に悪いですが、SSDなら問題なし。MBAに比べるとスリープで長時間持ち歩くということも少ないと思うので、これは正しい選択だし、当面このまま運用してみようと思いました。

    サーバーと一緒にUPS非対応なTeraStationをシャットダウンする

    ウチのやや古いTeraStation(HS-DHTGL/R5)はUPSに対応してませんが、どこかで先人がハックしていないかとググったところ、「Tera Stationをremoteからshutdownする方法」というブログ記事を発見しました。なるほど、wgetコマンドを使ってWeb管理インターフェイスのシャットダウンを実行する訳ですね。早速試してみたところ、ウチのDHTGLちゃんWeb管理インターフェイスの仕様が変わったらしく上記記事のスクリプトは使用できませんでした。そこで基本アプローチを拝借しつつ、DHTGL用に改変を試みました(以下、ファームウェアは1.15での情報です)。

    ■解析編

    まずそもそも元スクリプトはwgetのBASIC認証用のパラメーターで認証を突破してますが、DHTGLはBACIS認証ですらない。結構苦労しましたが、まとめると、

    • /cgi-bin/top.cgiにPOSTでパラメーターを送ることで動作している(元スクリプトではts.cgi)
    • gPage、gMode、gType、gKeyといったhidden値で実際の表示ページや動作を規定している
    • ログインページから送られるhidden値はgPage=top、gMode=authでID、PWはそれぞれtxtAuthLoginUser、txtAuthLoginPasswordというフィールド名で送られる
    • 一旦認証が通ると、gSSSとgRRRというhidden値が生成されセッション管理に用いられる
    • シャットダウンの時は認証情報の代わりにgSSS、gRRRをつけ、gPage=maintenance、gMode=shutdown、gType=shutdownを送る

    といった感じ。gSSSはセッション毎、gRRRはページ遷移毎にユニークに生成されてるっぽいです。gSSSは「07ae46da8acb13a7ba9c99acf3ef66f9」のような16進数値、gRRRは「463273411635750418」のような10進数値です。

    つまり認証(gSSS、gRRR取得)とシャットダウン実行でwgetを2回実行する必要があるみたいでした。

    ■実装編

    シェルスクリプトやsedに使い慣れてないのであまり綺麗な実装ではないですが晒してみます。うまいことすればTMPファイルを減らしたり無くしたりできそうなもんですが、よくわからなくて2つほど生成してます。もっとエレガントな方法があれば是非教えて下さい。

    #!/bin/sh
    #
    # rc script to shutdown Tera Station by knakao
    #

    #REQUIRE LOGIN

    WGET=/usr/bin/wget
    SERVER=192.168.0.***
    USER=admin
    ADMIN_PASSWD=**********
    URL="http://$SERVER/cgi-bin/top.cgi"
    TMPFILE="/tmp/ts_shutdown.tmp"
    TMPFILE2="/tmp/ts_shutdown2.tmp"

    ts_down()
    {
        # Loging in as administrator
        OPT="–post-data=txtAuthLoginUser=$USER&txtAuthLoginPassword=$ADMIN_PASSWD&gPage=top&gMode=auth -O $TMPFILE -q -T 5"
        $WGET $OPT $URL

        cat $TMPFILE | grep gSSS > $TMPFILE2

        gSSS=sed 's/.*name="gSSS"  value="\([^"]*\).*/\1/g' $TMPFILE2
        #echo ‘Current gSSS is ‘$gSSS

        gRRR=sed 's/.*name="gRRR"  value="\([^"]*\).*/\1/g' $TMPFILE2
        #echo ‘Current gRRR is ‘$gRRR

        OPT="–post-data=gPage=maintenance&gMode=shutdown&gType=shutdown&gSSS=$gSSS&gRRR=$gRRR -o /dev/null -q -T 5"
        $WGET $OPT $URL

        rm -f $TMPFILE
        rm -f $TMPFILE2
    }

    case $1 in
    start)
    ;;

    stop)
    ts_down;
    ;;
    esac

    このファイルを実行可能にして/etc/init.d/terastation等として置きます(RedHat系)。赤字部分は適宜書き換えて下さい。

    手動で実行するには

    /etc/inin.d/terastation stop

    などとします(なお当たり前ですがstartオプションは無視されます)。せっかくrcスクリプト形式なので適当な/etc/rc*.dディレクトリにシンボリックリンクを張るとか、/etc/rc.d/init.d/haltに書いておけば自動実行されるんですが、通常のメンテナンス時にも一緒にTeraStationまで落ちるのが難点ですね。UPSによるシャットダウンの時だけに実行できる仕組みがある場合はそちらを利用するのが良いでしょう。

    あとTeraStation自体と途中のハブもUPSでまかなっていないと意味がないのでご注意を。