ラベル memo の投稿を表示しています。 すべての投稿を表示
ラベル memo の投稿を表示しています。 すべての投稿を表示

2014/05/27

[余談] Buffalo TS5400 シリーズで管理者パスワードを忘れた場合の対処

職場で Buffalo TS5400R という、ラックマウント型のNASが使えるようになった。

ISOイメージや製品インストーラやアップデータ、検証時のキャプチャ画像など、なにかと一時的なデータの量が多いので、一時的な物置として用意されたのだ。

使ってみると、UIは割と分かりやすく、また HTMLファイルを適当にアップロードすればWebサーバになったり、MySQLやPHPが内蔵されていて動的なWebページを持つサーバとしても利用できる、SOHOでのWebサーバなんてこれがあれば十分じゃないのか?という感じでなかなか良い。
( もっとも、 iSCSI機能については少々 挙動不審なところがある。iSCSI ストレージとして使いたいなら、Terastation IS (TS-RIXシリーズ)を買え、という事なのだろう...、まあ、iSCSI有効にして ESXi に繋ごうとするのがそもそもの間違いというか。)

折角だからと色々試みているうちに、気がついたら管理者パスワードを忘れてしまったのか、管理画面でユーザ:admin、パスワードを知っている限り入力してもログインできなくなった。

しょうがないのでパスワードリセットの方法を探したが、FAQはこのとおり、サポートに電話してもパスワードリカバリーUSBを作ってなければどうしようもない、修理扱いになる、との返事でした。まあ、これはサポートが言う事が正しく、作ってなかった私が悪いのだが。

と、嘆いていても仕方ないので、なんとかしてみることとした。

このNAS、後ろ側を見ると USBポートがあるのはともかく、何故か VGAコネクタと「HDD-USB」と書かれたスライドスイッチなんかがある。ディスプレイを繋ぐと、Linux を起動しているのがよく分かる。

ためしに、USBメモリに適当なx86なLinuxを突っ込んで、スライドスイッチをUSB側にして電源を入れたところ、一応起動はした。どうもCPUも x86っぽい。ならば、USBから起動することでパスワードリセットぐらいできるだろう。

ただ、そのLinuxの選定で苦労した。 gparted-live-0.18.0-2-i486 を使ったところ、どうも起動途中でドライバーが足りないっぽいメッセージで fail する。ubuntu-ja-12.10-desktop-i386 の場合は、こんどは CPUパワーか RAMか何か足りないのか、起動途中でハングアップする。

結局、systemrescuecd-x86-4.2.0 で何とか起動に成功した。この systemrescuecd だが、混まんドライベースになるが結構良くできている。

ともあれ、dmesg をもとにデバイスを判断し、mount /dev/md1 /mnt とかしてマウント、/mnt/etc/shadow ファイルを編集、admin ユーザのパスワードを消して再起動することでパスワードリセットに成功した。

デバイスが /dev/md* になるのは、LVM を使ってない場合に限る。このとき /dev/md0 が /boot に相当、/dev/md1 が / , /dev/md2 が swap になる模様だ。LVMが使われた場合も、割と Linux の標準的な構成になるはずなので、適当に探ってほしい。


なお、ISOイメージから USBメモリにブート可能で書き込むのには、UNetbootin を利用した。これも、Mac 版はどうもうまく動いてないというか、書き込みが終わってもブート可能になってない模様。(他のサイトにもあったが、MBR のアクティブフラグが原因かと考えフラグを立ててみたが、改善されず)
使ってる人も多いだろう  Windows版の場合はまったく問題ないので、深追いせず VMware Fusion 上の Windows7 でさっさと作ってしまった。仮想環境でも、 plopbootmanager を併用すれば起動確認もできる。

ともあれ、仮想化とは全く関係がないのだが、メモ代わりに残しておく。

2014/05/08

「セキュリティが強化された Windowsファイアーウォール」が起動不良に陥る

本日ハマったのでメモ。

ふと気がついたら、リモート環境にある WindowsServer 2012 のRDP接続ができなくなっていた。vSphereClient 側から確認するにOSは正しく動いている。が、RDPだけ返答しない。

ファイアーウォールの問題かと思ってMMCを開こうとすると 0x6D9 のエラーを表示してパネルが開かない。そもそも、advfirewall サービスが動いていないようだ。

ググると、同じ問題で困ってる人は居るが、解決したらしい記述がない。

どうも、

a. netsh advfirewall reset
b. net start mpsdrv
c. net start bfe
d. net start mpssvc
e. regsvr32 firewallapi.dll
の手順でコマンドを試せば良いようだが、三つ目の net start bfe でこれまた「エラー 1075: 依存関係サービスが存在しないか、または削除の対象としてマークされています。」を表示する。

このエラー番号から調べて見つけたのが以下のページ


こちらにリンクされている「RestoreBFE.exe」を実行、再起動するとBFEサービスも起動し、ファイアーウォールも正常に稼働、RDP接続もできるようになった。


イベントビューアでログを見ると、SQL Server のアップデートがかかってエラーしている記述がある。どうも、エラーが起こってアンインストールが行われる際に、依存関係か何かから BFEもアンインストールを試み? 削除マークだけ残ってる?? という感じっぽい。

再現方法が分からないので確証はないが、以上、私的なメモまで。




2013/12/11

[余談] WiFiルータ

vExpert な知人の間でアドベントカレンダーが回っているようだ。

話は聞いていたのだが11月末から12月冒頭、主に出張でばたばたしてたのですっかり出遅れてしまった。用意したネタはなきにしもあらずだが慌てて出す必要もないし、またじっくり確認してからにしようと思う。

で、その出張で公私ともに役に立ってるWiFiルータの話をちょっと載せておきたい。

その愛用品は Planex の MZK-RP150N という名の WiFiルータだ。個人的に使っているものは確か1年ほど前、博多駅近くのヨドバシで購入した。

出張用の旅行鞄には長らく初代の AirMacExpress が入っており、旅行先の宿で無線LANを利用するのに使っていた。が、この博多出張の折たまたま家に忘れてしまい、これが吸収を転々とするわりと長期にわたる出張だったためなきゃないで困るので、目の前にヨドバシがあるうちにと買いに行ったのだった。

AirMacExpress も購入当初はなんて小さな WiFi ルータだと思っていたが、MZK-RP150N のマッチ箱を二つ重ねた程度の小さな筐体は輪をかけて小さく、買ったときには技術革新にひどく驚いたものだ。

さて、小型の WiFiルータなら他にもたんとあるのに、わざわざこれを選んだ理由は「Ethernet が2ポートある」という点に他ならない。WiFiを抜きにしても、簡易的なNATルータとして利用可能なのだ。これは思いの外便利で、1IPアドレスしかとれないような会議室で結構役に立つ。ほかの多くは1ポート、上位ネットワークにつながるポートしかないのでこうしたことができない。

怪我の功名ではあるが、なかなかいいものを買ったと思っている。
後日 職場の機材で持ち運びの容易なWiFi ルータが必要になったときにこの MZK-150Nを提案し、何台と導入して便利に使っている。小さく、そこそこの性能があり、なにより安い(市価で2000円強)。


ただ、良いことがある一方、あまりよろしくない点もある。

一つは、デフォルトの設定がイケてないということだ。デフォルトではオートモードという設定になっており、外部(Internet)側ポートの接続状況に応じてNATルータ(ルータモード)かブリッジ(APモード)かを自動的に切り替えるようになっている。

確かに、NATルータとして振る舞ってほしい場合もあれば、有線と無線をつなぐ単なるブリッジでいい場合もある。そのために都度設定をするのは面倒といえばそうだ。
しかし、このモードの切り替えはどうも外部側ポートに割り当てられたIPアドレスで判断しているらしく、プライベートIPがついた場合はたいていブリッジになるようだ。

「らしく」というとおり切り替えの基準がいまいちはっきりしないのと、最近のビジネスホテルの部屋のポートは 10.x.x.x のプライベートアドレスが割り当てられることが多い、というかまっとうなグローバルアドレスがそんなぽんぽん割り当てられるはずもなく、従って意図せずにブリッジとして動作していることがある、ここがかえって厄介になっている。

またモードによって管理ページのIPアドレスが異なる(最終オクテットが .1, .249, .248 の3パターン)ため、設定をしたくても管理ページにたどり着くのが一苦労だったりもする。
このため、私物および職場で私の管轄下の機器についてはルータモードに固定しており、必ずNATルータとして振る舞うようにしている。

製品自体には今時の機器らしく、マニュアルは付属せず簡単な説明用紙がついているだけだ。この説明用紙が、初心者向けに優しく書いているのだが、詳しいことを知ろうとするとかえってわかりにくい。オートモードと相まって飼い慣らすまでが一苦労だ。
(オンラインで詳細マニュアルは存在する)

また、後継機種らしい機器が出てきているためか、若干ながら入手が難しくなってきている。
こちらはEthernetが1ポートしかないため、私にとっての利点が失われてしまっている。

今後の入手可能性が不安なため、職場での機材増加に伴う追加購入の際、無理を言って予備機を用意してもらった。( 予備機もしまわれているわけではなく社内での検証などにも流用されている )

少々問題はあるが、とはいえ設定さえルータモードに固定してしまえば、あとは「差すだけ」というのはとても便利だ。

そろそろ私物のほうも予備を買っておこうか、と思うぐらいには気に入っている。

2012/12/13

GPO でレジストリをいじる

事の発端は IE9。気がついたらなにやら調子が悪くなり、調べたらどうやら GPUを使ったハードウェアレンダリングが有効になっていた。

VMware の仮想マシンは 3Dサポート機能を有効にすることで OpenGL, DirectX といったGPUを有効活用するAPIが利用可能になるのだが、私の Windows7 ではこれを無効にしていたため、存在しないGPU相手になにやらやっていて、タイムアウトが起こるまで不調が続いたという感じだ。

対処については以下の通り。インターネットオプションの詳細より無効化できる。
http://support.microsoft.com/kb/2618121/ja

が、問題はこの設定は GPO で簡単には配布できないということだ。

http://technet.microsoft.com/ja-jp/library/gg699401.aspx より
Internet Explorer 9 には、ハードウェア アクセラレーション (GPU レンダリング) を無効にするポリシーは用意されていません。必要な場合、グループ ポリシーの基本設定を使用してハードウェア アクセラレーションを無効にできます。HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main キーでレジストリ値 UseSWRender を設定します。グループ ポリシーの基本設定の詳細については、「グループ ポリシー ツールによるブラウザー設定の管理」を参照してください。
「グループポリシーの基本設定」でできるとあるが、こちらで動いてる ActiceDirectory のドメインコントローラが Windows Server 2003 のためか、「Internet Explorer のメンテナンス」などのメニューにそれを見つけることができなかった。

あまり時間もなかったのと、ユーザへ個別に .reg を配ったり .bat ファイルを実行させるのも気が引けたので、adm テンプレートを作って強制的に適用するようにした。

; IE9 HW Accesll
CLASS USER
CATEGORY !!IE9SWRender
KEYNAME "Software\Microsoft\Internet Explorer\Main"
POLICY !!IE9SWRenderConfig
    EXPLAIN !!IE9SWRenderExplain
    VALUENAME "UseSWRender"
    VALUEON NUMERIC 1
    VALUEOFF NUMERIC 0
END POLICY
END CATEGORY
[Strings]
IE9SWRender="IE9 SW Rendering Configuration"
IE9SWRenderConfig="IE9 SW Rendering Configuration"
IE9SWRenderExplain="Use SW Render insted GPU"


作ったのは上記の通り。adm ファイルの書式については解説は不要だろう。

要するに「HKCU\Software\Microsoft\Internet Explorer\Main」の「UseSWRender」の値を DWORDで1か0かを設定するというシンプルなものだ。

ただし、実はこれではうまくいかない。というか表示されない。

諸々試したが、Software\Policies 以下でないパスへの操作については、GPOエディタでデフォルトでは表示されないようだ。

この通り定義したはずの POLICY項目が表示されない

これについては、右クリックして「表示」から「フィルタ...」を選択、


「完全に管理されているポリシー設定のみを表示します」のチェックを外すと見える。


ただし、表示されるようにこのポリシーは適切に管理されるとは限らない。
たとえば「無効」にも「未設定」にもせずにこの adm を削除したりすると、レジストリの中に設定がそのままごみとして残ってしまう恐れがある。


分かって使う分には問題ないが、あまりお勧めはできないこと、わざと表示していないことを察するべきだろう。






2012/04/25

[余談] ファイルを探索後、そのファイルを検索する

ちと本日ネタになったので覚え書き代わりに書くとする。

本日みたある資料では、以下のような感じになっていた。
grep ERROR `find . -name "debug*.txt" -print`
これがいけないこと、というのを指摘したのだが分かってもらえなかったようなので何故いけないかをつらつら語りたいと思う。


ある程度 UNIXの経験がある人ならば「何だその話かよ」で終わる話だが、様々な面でこれは問題のある表現である。


一番簡単な問題は「溢れる」ということだ。コマンド行の固定長で上限ある。
このサイズは ARG_MAX という定数で定義されている。

例えば、Mac OS X 10.5.8 では以下の感じだ。
grep -R ARG_MAX /usr/include/
(中略)
/usr/include/limits.h:#define _POSIX_ARG_MAX 4096
/usr/include/sys/syslimits.h:#define ARG_MAX   (256 * 1024) /* max bytes for an exec function */
POSIX な定数だとわずか 4KB, そうでなくても 256KB 程度になる。これ以上は保証されない。

上記の find の書き方だと「カレントディレクトリ (.) とそこから下のサブディレクトリ」を再帰するので、debug.txt と書かれたファイルが下のディレクトリにあるなら容易に溢れる訳だ。溢れると、のたうち回った末にこんなエラーが表示される

/usr/bin/grep: Argument list too long.
計算機資源に優しくないのでやめろ感じる訳だ。

また、サブディレクトリを探す意図はなかったというかも知れないが、ならばシェルの補完でも十分だ。「 grep ERROR debug*.txt 」で間に合う。どうしてもバッククオートを使いたいなら「grep ERROR `ls debug*.txt`」とでもすればいい。


もちろん「溢れ」の可能性については前世紀から分かってる事実であり、このため find には頼もしい助っ人である「xargs」コマンドがついている。

上記の例を「悪い」見本で直すとこんな感じだ
find . -name "debug*.txt" -print | xargs grep ERROR
xargs は標準入力で渡されたリストを ARG_MAX を越えない程度に分割して、それを引数で渡されたコマンドの引数にして実行する。また、コマンドの実行が一々増えていいのなら

find . -name "debug*.txt" -exec grep ERROR {}\;
と書けばいい。-exec は find がマッチしたファイルパスの一つ一つに対して指定のコマンドを実行する。{} の部分がファイルパスに置換される。また、-exec の引数となるコマンド列の末尾は ; で終わるが、これがシェルに解釈されないように \ を入れる。-exec hogehoge {} \; まではイディオムであり、よく見かけると思われる。

個人的には、上記二つで普通のUNIX屋であると認識する。


で、より上位の人に「一々 -exec するな」か「マッチしたファイル名に空白がはいってたらどうする」かで突っ込まれるのもまた普通の話と思われる。

そう、xargs で引き渡された標準入力に、普通の英数字以外が混じっているとそこが「区切り」と見なされることがある。


で、だ。そんなことも、xargs を作ったような在りし日のUNIX屋にとっては想定内である。そのため、find には -print0, xargs には -0 オプションがある。正しいのは以下になるだろう。
find . -name "debug*.txt" -print0 | xargs -0 grep ERROR
find の -print0 オプションは -print とほぼ同じだが、区切り文字を '\0'、ヌル文字にしてくれる。空白や制御文字はファイル名に入れることは出来ても、ヌル文字は決してファイル名に現れない。このため、一つの検出されたファイルパスが間違って分割されることもない。

一方、ヌル文字が区切りであることを示すのに、xargs には -0 (ゼロ)オプションがある。find の -print0 での出力を xargs -0 は正しく解釈し、ARG_MAXに越えないだけにまとめてコマンド実行をしてくれる。

いつ頃から find -print0 と xargs -0 があったかは知らないが、私が駆け出しの頃にはすでにあったものだ。今日日の環境ならどこにでもあるだろう。

ファイル名に空白があるは、かつて Apple も iTunes のアップデートでミスった問題だ。
決して少ない訳じゃない。


決して新しい知識ではないのだから、ここまでは配慮して欲しいと思ったのが、本日ぐだぐだ言ってた理由だ。








2012/02/20

[余談] MacOS X のVPN接続をコマンドラインから実行する

仮想化とは関係ないけど、余談で。

MacOS X では VPN接続機能が用意されており、システム環境設定の「ネットワーク」にて、左下の「+」ボタンを押すことで設定が可能になる。標準で用意されているのは、L2TP over IPsec, PPTP, Cisco IPSec の三つだ (Lion の場合)

それぞれを選択、アカウントなど適宜情報を記入することで L2で VPNを張ることができる。

ただ、その接続がシステム環境設定を開いて該当するネットワーク設定を選択、「接続」ボタンを押すか、メニューバーにVPN設定のアイコンをあらかじめ表示させておき、そこから選ぶか、になる。

そう頻繁にVPNを張らない人や、MacBookAir を利用しててメニューバーの横幅が足りないのであまりアイコンを表示させたくない人からすれば、一々システム環境を開くのは面倒だ。

そこで、ターミナルのコマンドラインから VPNを張れないかを調べてみた。
とりあえず、ざっと調べた限りではそれっぽいコマンドは見つけられなかった。のでスクリプトで対応させることとした。

#!/bin/sh
DoScript() {
/usr/bin/osascript << __EOF__
tell application "System Events"
   tell current location of network preferences
       set VPNservice to service "$2"
       if exists VPNservice then $1 VPNservice
   end tell
end tell
__EOF__
    return 0 ;
}
case $1 in
"connect")
    DoScript "connect" $2 ;;
"disconnect")
    DoScript "disconnect" $2 ;;
esac


DoScript 関数がこのシェルスクリプトの実体で、osascript にヒアドキュメントで AppleScript を流し込み、実行している。

tell application "System Events" により SystemEvents に対して指示を送り、さらにその中で「current location of network preferences」、つまり現在のネットワーク設定に指示を送っている。
OS X をあまり使われてない方には馴染みのないことだが、OS X では「場所」ないしは「ネットワーク環境」という名前で、使用するネットワークインターフェイスやインターフェイス冠の優先順位、IPアドレス、DNS、デフォルトルート、プロクシーなどの設定をまとめて切り替えることができる。ネットワーク管理をやってた頃はいく先々ごとにこのネットワーク環境を作り、ついたら切り替えることでたとえ固定IPアドレスや特別なプロクシの設定が必要でも一気に切り替えられたので便利なのだ。
ThinkPad など一部のベンダーのPCにも同様の機能はあるが、OS標準でないため細かいところで面倒だったのと、やはりUNIXコマンドが標準搭載なのもあり Macのノートは私の回りのネットワーク管理者にとっては必須のデバイスであった。

何を送ってるかというと $2 にはVPNサービス名が入り、$1 には connect か disconnect が入るため、set VPNservice to service "何らかのVPNサービス名" で、VPNService という変数にサービス名を突っ込む。

それから、if exist VPNservice でそのサービス名に該当する設定があるかを確認、あれば $2, つまり connect(接続)もしくは disconnect(切断)を行う。

case でくるんでるのは、コマンドラインからは connect でも start でもよくしようとして、途中で面倒になったからそうなっているだけだ。( "connect") を "connect"|"start") とかするだけなのだが)

さて、このスクリプトを vpnc という名前でパスの通るところに保存、実行フラグを立てる。システム環境設定のネットワークから「MyOffice」というVPN設定を作った後

$ vpnc connect MyOffice

とコマンドを叩けば、接続される訳だ。
なお、厳密には「接続を指示する」ところでこのスクリプトは終了してしまう。VPNの接続確立までに時間がかかる場合は、そのぶん待った方がいい。

私は接続先に既知のサーバがあるので、ちょっと待ってから ping を打って繋がってる確認した後に利用するようにしている。

もう少し頑張ればVPN明があるかをチェックしてなければエラーを返すとか、色々改善もできるだろうが私の用途ではこれで十分なのでそこから直していない。