Flickrのdeveloper blogを見てたら、載ってた動画。なんかもうすごい折り紙。
投稿者: 管理人 (35ページ目 (40ページ中))
…今更、気がついた(汗)
さっき、3wareの英語サイトを眺めていたら、フッターがLSIになっていて、なんかの間違いだろうと思って、Goolgle先生に聞いてみたら…。
AMC flogs 3Ware storage | TheINQUIRER
AMCCが$20 millionと引き替えに、3wareをLSIに売却したって書いてあった。MegaRAIDシリーズのLSIと、9650SEなどの3wareの組み合わせは悪くないのかなぁとおも思ったりして。
とりあえず、LSIは「LSI Welcomes 3ware」だそうだ。
こちらのエントリーに書いたように、ウチのNASの「HS-DHGL」のファームウェア更新に失敗し、とりあえず、中身をいじってなんとか復旧はさせたけれど、ついでなので、HDDを交換することにした…と。
まずは、買ってきた「WD10EADS」をSATA-USBケーブルに接続して、Ubuntuが入っているThinkpadに接続。で、自動マウントされるので、全部アンマウント。ドライブが/dev/sdbで見えてたので、
fdisk /dev/sdb
で、こちらのページを参考にしながら、領域を確保。ま、/bootの200MBは、このまま200MBで確保するのがいいのか迷ったけれど、そのまま200MBで確保しておいた。で、後は、mkfs.xfsとかのコマンドを使ってパーティションにファイルシステムを作った。
とはいえ、このままだとHDDの箱ができただけなので、NASとしてはbootせず…と。
で、Buffaloのサイトから適当なファームウェアをダウンロードしてきて、Windows上で解凍するといくつかファイルが現れる。Google先生に聞いた感じでは、この中のいくつかのファイルを/bootに放り込んで起動させれば、NASとして使えるようになるらしい。
どうやら、以下のファイルが/bootにあればよさげ…と。
- initrd.img
- hddrootfs.img
- u-boot.buffalo.updated
- uImage.buffalo
ただ、initrd.imgとhddrootfs.imgは、imgって拡張子になってはいるけれど、実態はパスワード付ZIP
らしく、そのパスワードは…インターネットのどこかにあるらしい…と。(笑)
これらのファイルをHDDの/bootにコピーして、HDDをHS-DHGLに接続しなおして起動すると、(おそらく普通に)NASとして使えるようになるはずだが、設定はきれいさっぱり初期設定状態なので、最初にセットアップした手順でほいほい設定すればよさげ。
で、もともと入っていたHDDに入っているデータは、NASにぶら下がっているUSB-HDDにバックアップを取ってあったので、そこから書き戻し。xfsを扱えるLinuxマシンだと、もともとのHDDを覗けるので、データを引っ張り出して、NASに書き込めばいいんじゃないかと。
自宅のNASは、Buffalo LinkStation HS-DHGL。普通に使えていたので、ファームウェアをそのまま放置していたが、ふと、思いついて行進してみたら、「ACP STATE FAILURE」が出て失敗。再起動してみたり、もう一回ファームウェアを更新してみたり、いじくっているうちにまともに起動しなくなった(汗)
でも、google先生に聞いてみたら、同じような症状に直面している人が少なくないらしく、なんとかできるような気がしてきた(笑)
で、どうやら、HS-DHGLのケースを開けて、HDDを取り出さないといけないらしいので、じゃあ、ついでにHDDも交換しておくか(汗)ということで秋葉原へ行って、Western Digitalの「WD10EADS」を買ってきた。FAITHで\7,480。WD10EADSに交換することで、容量が320GB->1TBに増えることになる。
さて、いきなり新HDDにするのもアレなので、もともと入っていたHDDでなんとか起動する状態に戻してみようということで、作業にとりかかった。
こちらのblogを拝見したら、「ACP STATE FAILURE」が出てファームウェアの更新が失敗してしまう原因は、/boot領域にゴミが溜まってしまい、容量不足になって、ファームウェアのデータの書き込みに失敗することのようだ。対処法は、/boot領域のお掃除をすること…と。
/bootの容量不足で書き込み失敗ってのはなんともお粗末な印象…。
で、HS-DHGLの中身はどうやら、ARMで動いているLinux箱みたいなので、/boot領域のファイルシステムはext3になっているらしい。そこで、HS-DHGLのネジをいくつか外して、HDDを露出させて、UbuntuがインストールされているThinkpadを用意して、SATA-USBなケーブルでHDDを接続してみた。(事前に調べた情報で、Linux箱とはいえ、「/」とデータが収められているパーティションはxfsみたいなので、Ubuntuのパッケージマネージャから、xfs関係のモジュールをインストールしておいた)
そしたら、HDDはいくつかのパーティションが切られていて、/bootはext3だけど、システム領域(「/」ですな)と、ネットワーク越しに見えるデータ領域はxfsが使われていることを確認。
/bootがだいたい200MBほど確保されているけど、ファームウェアのデータがだいたい100MB近く。そもそも余裕がある設計になっていないようだ。
うーむ、未確認な妄想だけど、ファームウェア更新完了時に、新旧2つファームウェアのデータが/bootに存在することが必要で、再起動後に新ファームウェアからHDDにデータが展開された後に旧ファームウェアが削除されたりする仕組みなのだろうか。こういう仕組みだとすると、ファームウェアのバージョンアップに伴う肥大化によって200MBという領域が微妙に不足する(300MBくらい確保してたら回避できるのかも)のが、ACP STATE FAILUREの原因と言うことになるのかも。てか、そうでもないと、200MBの領域に100MBのデータを書き込むのに失敗する理由がよくわからん。もしかして、ファームウェアの更新処理に旧ファームウェアの削除処理が入っていないとかいうオチなんだろうか(汗)
ま、とりあえず、/bootに落ちているhddrootfs.buffalo.updatedとかhddrootfs.imgを削除(なんで同じようなファイル名で同じようなサイズのファイルが2つも落ちているんだろう)。ただ、rootが所有者なので、sudoしながらrmで削除。で、Ubuntu側でアンマウントして、HS-DHGLに接続しなおして起動してみたら、とりあえず起動したが、smbやWebインターフェイスなどは起動していないので、ファームウェア自体は書き込まれていない感じだろうか。というわけで、ネットワーク越しに北米バッファロー(汗)のサイトから落としてきた最新ファームウェア(Ver.2.11?)を書き込んでみたら、再起動がかかって、しばらく経過したら、Webインターフェイスにアクセスできるようなったので、とりあえず成功したっぽい。
HDD換装につづく。
ひさしぶりに人生ゲームってどうなっているんだろうなぁ…と思ってTAKARA TOMYのサイトを覗いてみたら「極辛」ってのが出てた…。
ちらっとマス目を見たら、こんなのがあるらしい。
- クレジットカードをスキミングされる。
- 新型ウィルスで高熱。
- オレオレ詐欺にあう。
- その場の空気が読めず大失敗。
- 子供がケータイを使いすぎ。
- マンションが傾いてきた。
などなど。
…いやはや、世知辛い世の中ですな。
「この指とまれ!」のサポートセンターによれば、現在はシステムが全面的にダウンしており、原因究明と復旧作業を継続しているが、復旧のめどはたっていないという。
そういえば、doblogのサーバでディスクが2本故障して、RAID5が崩壊したときもこんな感じのサービス停止だったような気がするなぁ(汗)
サービスを全面的に、ある程度長時間にわたって停止せざるを得ない「甚大なトラブル」ってHDD周辺のトラブル(それもマスターサーバでのデータロストなんかのトラブル)くらいしかないんじゃないかなぁ(この手のサービスだと、サーバ自体は冗長化しているだろうから、もし、サーバが故障したといったトラブルだと、縮退してでも動きそうな気がするので)
「この指とまれ!」は使ってないとはいえ、早く復旧して欲しい気がする。
PHPからメールを簡単に送りたいなぁと思って、phpmailer(使ったバージョンは、リリースされたてのVer.5.0.0)を使ってみた。
ちらっとソースとドキュメントを読んで、サンプルアプリで使ってみていたら、Subjectの処理で少し気になることがあった。端的に言えば、長いSubjectのメールを送ろうとしたときにMIMEエンコードされた文字列が改行されずに1行になってしまい、その文字列を埋め込んだメールヘッダーがRFCに引っかかってしまう恐れがあるという事象に直面した。
で。
Subjectに日本語を入れたりする場合は、SubjectをMIMEエンコードする必要があるので、PHPのmb_encode_mimeheaderって関数でMIMEエンコードした文字列を作って、それをphpmailerに渡して、どーんとメールを送ってみた。
…すると。
MIMEエンコードされた文字列は生成されたものの、MIMEエンコードされた文字列が1行に連結されてしまっていた(汗)(…強制改行されているとは思いますが、実際は1行です。)
Subject: =?ISO-2022-JP?B?GyRCJDMkbCRPJUYlOSVIJWEhPCVrJE4lNSVWJTglJyUvJUgkMyRsGyhC?= =?ISO-2022-JP?B?GyRCJE8lRiU5JUglYSE8JWskTiU1JVYlOCUnJS8lSCQzJGwkTyVGGyhC?= =?ISO-2022-JP?B?GyRCJTklSCVhITwlayROJTUlViU4JSclLyVIJDMkbCRPJUYlOSVIGyhC?= =?ISO-2022-JP?B?GyRCJWEhPCVrJE4lNSVWJTglJyUvJUgkMyRsJE8lRiU5JUglYSE8GyhC?= =?ISO-2022-JP?B?GyRCJWskTiU1JVYlOCUnJS8lSBsoQg==?=
で、メールに関するお約束のRFC2822にこんな規定がある。ヘッダーに限定されているわけではないが、メールの1行に並べていい文字数には制限があるようだ。
http://www.puni.net/~mimori/rfc/rfc2822.txtより引用:
行の長さの制限
この標準では1行中の文字数に2つの制限がある。それぞれの行の文字はCRLFを除いて、決して998文字以下でなければならず(MUST)、78文字以下であるべきである(SHOULD)。
そんなわけで、MIMEエンコードされたSubjectがずらっと1行に並んでしまうと、うっかり998文字を超えてしまうおそれがあるわけで、なんとか78文字くらいで改行するのがよろしいということだろう。
ちなみに、上で使ったのと同じ文字列をBecky!2.50.07の件名の欄に突っ込んで、メールを送ってみたら、やっぱり適度に改行されていた。
Subject: =?ISO-2022-JP?B?GyRCJDMkbCRPJUYlOSVIJWEhPCVrJE4lNRsoQg==?= =?ISO-2022-JP?B?GyRCJVYlOCUnJS8lSCQzJGwkTyVGJTklSBsoQg==?= =?ISO-2022-JP?B?GyRCJWEhPCVrJE4lNSVWJTglJyUvJUgkMxsoQg==?= =?ISO-2022-JP?B?GyRCJGwkTyVGJTklSCVhITwlayROJTUlVhsoQg==?= =?ISO-2022-JP?B?GyRCJTglJyUvJUgkMyRsJE8lRiU5JUglYRsoQg==?= =?ISO-2022-JP?B?GyRCITwlayROJTUlViU4JSclLyVIJDMkbBsoQg==?= =?ISO-2022-JP?B?GyRCJE8lRiU5JUglYSE8JWskTiU1JVYlOBsoQg==?= =?ISO-2022-JP?B?GyRCJSclLyVIGyhC?=
ってことは、phpmailerで処理されたsubjectのスペース区切りで繋がっているところが改行になってれば何の問題もなさそうってことか。
PHPのmb_encode_mimeheaderで生成した文字列を出力してみたら、ちゃんと改行が入っていた(汗)ので、犯人はphpmailerさんですか…と(汗)で、phpmailerに渡されたSubjectがどうなっているのか追いかけてみたら、送信するときにCreateHeader()って関数が呼びされていて、その中でSubjectが以下のように加工されていた。
if($this->Mailer != 'mail') { $result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject))); }
で、このSecureHeader()ってメソッドは何をやっているのかというと。。。
/** * Strips newlines to prevent header injection. * @access public * @param string $str String * @return string */ public function SecureHeader($str) { $str = str_replace("\r", '', $str); $str = str_replace("\n", '', $str); return trim($str); }
あ、改行コードを吹っ飛ばしてるじゃん…(汗)このメソッドを回避してみたら、Becky風にほどよく改行された。
でも、これ、Header Injectionを回避するためのサニタイズをやっているようなメソッドっぽい…、このメソッドを呼び出す限りは、RFC2822の998文字越えをやらかしてしまいそうだし、このメソッドを回避してSubjectを作ると、Header Injectionに直面するリスクを抱えるってことだろうか。
でも、基本的にはシステムが生成したメールを送信するだけなので、悪意思ったSubjectってのはやってこないような気もするが…。ま、ちょっとHeader Injectionについて調べてみよう。
追記:
phpmailerにセットする前に改行コードを外す処理を追加しておけば、phpmailerの中でSecureHeader()を呼び出す必要はないんじゃないかって気がしてきた。とはいえ、phpmailerを直してしまうと、バージョンアップの時にややこしいことになりそうだし…。うーむ。
NTTデータのDoblogがやっぱりサービス終了らしい。そりゃ、一切アクセスできない状態で2ヶ月止めてて、サービス再開しても使いたいと思うユーザは少ないだろうなぁと。そんなわけで、サービス終了は、ある程度、予想範囲内だったような気がする。
…とはいえ。
復旧作業の終了を受け、今後のDoblogについて検討した結果、Doblog開設時の目的である、ブログシステムを構築するための技術的知見、およびコミュニティサービスを運用・運営するためのノウハウの蓄積については十分に達成できたものと考え、サービスを終了するという判断をいたしました。
この終了の判断に関する記述の中に、Doblogを使っていたユーザに対する配慮が一切ないのが、SIerらしいなぁという印象を受けた。
ま、「Doblogのサービス終了のお知らせ」を読んでみると、Doblogのユーザから集めたクレームやエンハンスリクエストを元にして拡張したDoblogのアプリケーションを企業内Blogのエンジンとして売るくらいの腹づもりだったんだろうなぁと何となく想像しているけれど、NTTデータ的には、その辺がご破算になっただけなんだろうな。
さて、JavaBlackさんのエントリーの 真・Doblog終了のお知らせ – カレーなる辛口Javaな転職日記より
これはNTTデータとしては最低最悪なスキャンダルで,「NTTデータといえば,小規模なブログサービスも満足に運用できなかった,あの会社だよね?そんな怪しげな会社に任せて本当に大丈夫?」と訪ねられたら,NTTデータの営業は一体なんと答えるつもなんでしょう?
「あれは、Doblogを運用委託していた協力会社がやらかしたんですよ。ある意味、うちも被害者なんですよ。御社向けのシステムにはちゃんと実績のある協力会社を使いますから、ご安心ください」的な弁明をするんではないか、に一票(汗)