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

2010/09/29

sshリバースポートフォワードのメモ





普段から順方向のポートフォワードはやたら多用してるんですが、逆方向、つまりかっちょよく言うとリバースポートフォワードを使えるようにsshサーバを設定変更したのでそのメモ。
# vi /etc/ssh/sshd_config
で、以下の1行を追加。
GatewayPorts yes
"yes"じゃなくて"clientspecified"の方がいいかもしれませんが、これ設定したところでどのIP使ってリスンするかが変わるだけなので別にいらないかな。接続してくるホストを制限できるわけではない。

で、sshd再起動したらクライアント側から、
# ssh -N -f -R 10022:localhost:22 usename@remotehost
でOK。便利ですね。

具体的な使い道としては、クライアント側がinboundの通信許可してなかったりNATの下だったりしたときかな。さらに具体的に言うと、NAT下(どこ?)で起動させたままのPCのリモートデスクトップに家から接続したりとか、かな。。。localhostじゃなくてホスト指定したりするとすっかりバックドアなので、セキュリティには気を配って使いましょう。かなり便利。

なんかもうsshサーバが1台あるとすっかりVPN装置/FWの如く遊べるから楽しいわ。

2010/09/23

XBMCで音が出ない動画をffmpegでどうにかしたメモ


いつからかわからないんですが、以前はちゃんと再生できてたモノラル音声かつサンプリングレート48kHz以外の動画ファイルをXBMCで再生しようとすると、音が出ないことに気づきました。どっちが悪いのか切り分けてませんが、この2つの条件が重なると”failed to initialize audio device”ってエラーが出たりして(出ないパターンもあるので難解。。)音が出ない。つってもかなり昔にエンコードしたようなファイルだけなので実害は無いのですが、なんか嫌なのでForumで質問したり.asoundrcいじったり色々してみましたが、全然改善しないので発想を変えて再エンコードしてみました。その時のメモ。

携帯動画変換君とか使えばいいのかなと思いましたが、自宅サーバ上で一気にやりたかったのでffmpegを使ってやってみました。便利ですねffmpeg。めっちゃ便利。ubuntu10.04でやった。

  1. ffmpegが入ってなければaptitudeで入れる。
  2. 音声をmp3で再エンコードしたいので、libmp3lameを入れる。単にlibmp3lameと指定しても見つからないけど、以下のパッケージを入れると使える。
    # aptitude install libavcodec-unstripped-52
  3. 対象の動画の音声だけを2chにしてサンプリングレートを48kHzにして書き出す。ビットレートは適宜(デフォルト64kb/s)。
    # ffmpeg -i hoge.avi -vcodec copy -acodec libmp3lame -ab 128k -ar 48000 -ac 2 hoge.mod.avi
    -vcodec copy: ビデオは同じ設定で書き出す。
    -acodec libmp3lame: 音声コーデック指定。
    -ab: 音声ビットレート指定。kをつける。
    -ar: 音声サンプリングレート指定。
    -ac: 音声チャンネル数指定。2chに。
これでできました。あとは以下の感じでディレクトリ無いの全aviファイルを一気に処理して完了。
# for i in *.avi ; do ffmpeg -i $i -vcodec copy -acodec libmp3lame -ab 128k -ar 48000 -ac 2 $i.mod.avi ; done
実は最初はこうやって一発でできるってわからなくて、一度mp3だけ設定変えて書き出し→音声消した動画だけ書き出し→両者を結合、とか3回も処理させてました。なんでかって、まずmp3だけ書き出し→元の動画と結合、ってやってみたら元の動画の音声がそのままになっちゃったからでした。じゃあ一度音消して結合すればいいや、というわけですね。色々試してみたら、先に読み込ませた方の音声が有効になる(?)みたいでした。つまり、音の入っている動画ファイルに音声かぶせるときは、
# ffmpeg -i hoge.avi -vcodec copy -i hoge.mp3 -acodec copy hoge.mod.avi
だとダメで、
# ffmpeg -i hoge.mp3 -acodec copy -i hoge.avi -vcodec copy hoge.mod.avi
だとOK。なんだかそういう事みたい。ふーん。紆余曲折っと。

とりあえずこれで特に音ズレとかも無しでXBMCから再生できる動画になりました。ホントffmpeg便利なのねえ。

2010/07/07

DLNA+iPhone





ReadyNAS上でReadyDLNAを動かしてiPhoneアプリのMedia Link Player Liteから音楽や動画を再生してみた時の話。家のファイルサーバとかPC上のファイルをiPhoneで再生したい人は微妙に参考になるかも。ReadyNAS持ってないとならないかも。

***

何日か前にTwitterでNドライブってのが話題になってたなあ、とふと思い出してiPhoneに入れてみました(なんか規約で色々騒いでたみたいですね)。オンラインストレージのサービスなんですが、保存したmp4動画(h.264)をそのままiPhoneで再生できるの。最初はiPhone4で撮影した動画をアップロードして、それを再生してみておおすげえ、とか騒いでましたが、30分ほどの720p動画をアップロードしてみたらそれもちゃんと再生できる(Wi-Fi環境でのみ試した)。iPhone4すげえな。

うーんこれ便利だな。でもいちいちアップロードしたくないな。こうやってネットワーク経由で再生できるんだったら、ファイルサーバにある動画や音楽をそのまま再生できればいいのになあ。 とか思いました。そもそもね、iPhoneって直接ネットワークに接続できるんですからわざわざiTunesに接続して転送、とかiFunBox使ってとか愚の骨頂だろ、と常々思ってました。で、XBMCのiPhone版とかiPhone用SMBクライアントとかあればmp4動画をきっと再生できるのになあとか夢想してました。でもそんなアプリ見当たらない。いつもここで止まってました。

ですが、今日はもうちょい調べてみました。そしたらDLNAクライアントならiPhoneに用意されてるじゃないですか。DLNAサーバならReadyNASのプラグインですぐ動かせるしちょうどいい。って事で早速いじってみました。以下適当な説明。

1. クライアント(iPhone)の準備

App Storeで「DLNA」って検索すると「Media Link Player Lite」が出てくるのでインストールします。

それと、もちろんiPhoneをDLNAサーバにするサーバと同じネットワークにWi-Fiで接続しておきます。

2. サーバ(ReadyNAS)の準備

Frontviewに接続して、[サービス]-[ストリーミング・サービス]から「ReadyDLNA」にチェックを入れ適用する。「メディア共有」にはコンテンツの含まれてる共有を選択。

メディアのスキャンが始まるのでなんとなくしばらく待ちます。もちろんなんかしらmp4の動画とかをReadyNAS上に置いておくように。

3. 接続・再生

おもむろにiPhoneのMLPlayer Liteのアイコンをタップします。すると勝手にReadyDLNAを見つけてきてくれます。便利。

見つかったDLNAサーバをタップすると、フォルダをブラウズしたり音楽、写真、動画の各コンテンツを再生したりできるみたいです。早速Videoを下りて行ってみます。「All Video」を選ぶとDLNAサーバに登録されてるフォルダ以下の全部の動画が観られるみたいです。

で、mp4ファイルの再生ですがあっさりできました!720pの動画もWi-Fi経由で超キレイに動きます。iPhone4の液晶はほんとにきれいだなあ。HD動画再生しても全然遜色ないわああ。音楽も聴けるし写真も見られて便利!


とまあひと騒ぎしましたが、LANの中にいるならテレビで観ますわな、実際。つまりそれってXBMCでやってる事なんですが。そんなわけでせっかくDLNA動かしましたがiPhoneじゃそれほど実用性ないなあと思いました。わざわざ小さい画面で観ませんね。でもこれ、iPadだったら結構いいなと思いました。今後は動画のエンコードはh.264以外の選択肢は無いなあと思いました。実際俺のライブラリも旧来からのaviが多くてほとんどは「メディアフォーマット不明」ってなっててタップしても再生できないって怒られます(再生できないフォーマットは表示しないで欲しい気もしますが)。

サーバ側でトランスコードしてくれればなあと思いましたが、かなりマシンパワーがいるっぽいです。トランスコードしてくれるサーバもあるみたいなんですが、どうもリアルタイムで再生されないみたいなんですよね。変換が終わってから再生開始。そんなのiPhone握り締めて変換終わるまで待てませんよね。実用的じゃないって事で深入りしないでおきました。そもそもそこまでやるならmp4に変換してiPhoneに転送しますわ。

しかし生まれて初めてDLNAが便利だなと思いました。ネットワークプレーヤー歴は長いのですが、Avel Link Player→XBMC(XBOX)→XBMC(Ubuntu)と使ってきてましてずっとSMBで繋いでたので(そういやAvelにバンドルされてたサーバはトランスコードしてくれたっけね。懐かしい)。

今後家で、iPhoneには転送してないけどファイルサーバ上にあるmp4ファイルをどうしてもテレビじゃなくてiPhoneで観たい時や、iPhoneには転送してないけどファイルサーバ上にある音楽ファイルをどうしてもiPhoneで聴きたいときにはこのDLNAサーバが活躍してくれると思います。でもそんなシチュエーション、ねえだろなあ。

2010/05/29

ブログへの投稿をmixi日記へ投稿するスクリプト


mixi日記をやめてブログへのリンクを貼るようにできますが、それじゃあmixi日記がもったいないのでブログへの投稿を自動的にmixi日記に投稿できないかなと考えました。できればリンク貼るだけじゃなくて本文も少し貼って、つづきはこちらとリンクでブログに誘導するのが理想。が、色々ネット上を探してみてもすぐ使えそうなものは見つかりませんでした。メールで投稿するのはありましたが、なんか面白くない。じゃあ自分で作ってみようと考えて3日くらい、やっとできました。

仕組みとしては、このブログのRSSを定期的にチェックして新しい投稿があればそれをmixi日記に書き込むというシンプルなものです。僕はシェルスクリプトしかわからない(しかも全然詳しくない)ので、今回もシェルのコマンドのみで作りました(いくつか自宅サーバでTwitterのbotを動かしてますが、全部シェルスクリプトですw)。grepとかsedとかawkをパイプするしかできない僕ですが、なんとかなるもんですね。ちなみにUbuntu上で動かしてます。

RSSを取り込む部分ですが、最初はwgetでいいかと思ったのですがちょっと探したらコマンドラインのRSSリーダーが見つかったのでそれを使いました。rsstailです。aptで簡単に導入できます。

mixiに書き込む部分ですが、APIがないようなのでこっちもwgetで書こうと思ったのですが、フリーのパフォーマンス測定ツールとして有名なJmeterがコマンドラインから使えるのでこちらを使いました。wgetだとcookieの取扱いとか面倒なので。Jmeterはjavaが入ってればzip落として来て解凍すればすぐ動きます。10.04ならaptでもOK。

まずJmeterのProxy機能を使って実際のmixi日記への書き込みをキャプチャします。それを利用してテストシナリオを作り、*.jmxファイルを保存します。コマンドラインから-n -t <シナリオ>.jmxでそれを呼び出して使います。コマンドラインからmixi日記の書き込みができるようになれば、もう半分完成です。ちなみにJmeterは仕事のパフォーマンステストで半年位毎日使ってたので、シナリオ作成はお手の物です。HTTP Cookieマネージャを使いましょう。

次にrsstailでRSSを確認し、mixi日記に投稿する内容を作ります。僕は rsstail -1 -d -p -l -b 600 -n 10 -H -u $rss_url、って感じで投稿時間、本文600バイト、最新10の投稿を取得しています。取得したら各投稿の投稿時間をmd5でハッシュ化し保存しておきます。次回以降はそのハッシュリストと比較し、新しい投稿だけを処理するようにしました。この辺の作りはTwitterの@otchyに教わったperlスクリプトの動きを何となく真似しました。でも僕perlわからないから。。。投稿時間だけをハッシュに使ったのは、ちょくちょく本文とかタイトル修正する癖があるからです。ここは適宜。

で、あとはrsstailでmixi日記のタイトルと本文を変数にしてJmeterに渡せばOKです。Jmeterへコマンドラインから変数の渡し方がわからなかったのですが、これまたTwitterで@sunflower09さんから引数での渡し方を教えてもらい解決しました。jmeter.sh -n -s <シナリオ>.jmx -JParam1=xxx -JParam2=yyyとすればOKです。そしてJmeterのシナリオの中にはJParam1に対応する変数として${__P(Param1,1)}を、JParam2に対応する変数として${__P(Param2,1)}を書いておけばバッチリです。

というわけで、何となく全体像が完成。実際にRSS→Jmeterのあたりはすぐ動きましたが、その後か文字コードのあたりで相当ハマってmixi日記が文字化けしまくり。スクリプトの中にexport LANG=〜とか書いて解決しました。文字コードとかよく理解してません。。。

さて、実際のスクリプトをここに貼るのが親切なんでしょうが、恥ずかしくてとてもお見せできません。。。25行位のスクリプトなんですが、とても衆目にさらす勇気がありません。万が一興味のある人はTwitterででも声かけてください。もしくはメールとか。Jmeterのシナリオもあります。

とりあえず今の時点で修正したいのは、

  • 本文の最後に"?"が入ってしまうところ。
  • 短縮URLでリンクを貼りたい。
あたりでしょうか。1点目はrsstailでバイト単位でぶった切るので2バイトの文字がおかしくなるせいなんだと思いますが、末尾をsedで切ったりしてみたけどうまく行きませんでした。取り合えず放置。

cronでこのスクリプトを回しているんですが、見事この投稿がmixi日記に反映したらお慰みです。

@otchyからもperl覚えれば?と言われているんですが、やれやれ今回もシェルスクリプトでなんとかなってしまったので、また先の話になるのかな。。。w

2010/05/28

ESXiと俺物語(2)


このエントリの続きです。

〜前回のあらすじ〜
色々やったけど結局SDカードからまっさらのESXiをブートしただけです。

さて、ではまずNICを認識させましょう。万が一HDDが先に認識してもNICがダメならその努力意味ないです。それにNICさえ認識しちゃえばSDカードブートのままNFSをデータストアにして仮想マシン作ったりと色々できるからです。

どうもESXiはインテルのNICじゃないと公式にサポートしてないみたいです。Fionoが積んでるNICはlspciコマンドの出力によると、

Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)

ってなってます。これを認識させるべし。

ちょっとググってみるとすぐ情報が見つかりました。SDカードに入れてる起動イメージの中にoem.tgzってファイルがあるので、それをRealtek8168/8111用に作られたもの(http://www.vm-help.com/esx/esx3i/customize_oem_tgz.phpで見つかります)で上書きしてやればいいのです。.ddファイルを編集する方法もあるようですが、僕はSDカードに直接入れる方法を取りました。以下手順。

  1. 上記サイトから、oem.tgzを入手。
  2. SDカード中のHypervisor1パーティションにoem.tgzを上書き。
  3. SDカードからESXiを起動する。
これだけです。簡単。

すると、やはりIPアドレス0.0.0.0(static)で起動しますが今度はネットワーク設定画面の先に進めます。そこで手動でIPを設定すると、VICから接続ができるようになりました!

この状態だとまだデータストアが無いので仮想マシンが追加できません。NFSでデータストアを作成することもできますが、なんか仮想マシンをリモートに置くってちょっと気持ち悪い。どんだけトラフィック発生するの?とかも思います。なので、さらに内蔵HDDを認識させる必要があります。つづく。

2010/05/23

VMware ESXiと俺物語(1)


こんなベアボーンを買いました。
2Gのメモリと合わせて23,000円くらい。atom330搭載で弁当箱サイズのナイスなやつです。Fionoとかって言います(スペックはこちら)。実はこれ買うの2台目でして、1代目はXBMCっていう最強メディアセンターを導入してTVの横でHTPC(ホームシアターPC)として大活躍してます。HDMIもついてます(XBMCとこのHTPCについては別に記事を書きたいと思ってます)。

さて、今回これを買った目的は、第一にVM ware ESXiを導入してゲストOSにWindowsXPを入れてなんちゃってシンクライアント環境を作る事です。今1台メインのPCを起動しっぱなしにしててリモートでログインしてるので、それを廃止したい。そして第二に玄箱で動いてる何やかやももうひとつゲストOSとしてUbuntuを入れてそこに引越しさせるって事です。atomの330なら余裕で動くかと。

この用途だとHDMIがもったいないなあ、とも思いましたが値段のバランスが一番良いのがこのベアボーンなので泣く泣く無駄にします。あと、WOLが動かないんですがサーバにするので起動しっぱなしなのでいいかなあと(HTPCにしてる方はWOLが無いのが弱点)。

2Gのメモリとその辺に転がってた80Gの2.5インチのSATA HDDを組み込んで、早速ESXiの導入です。まず最新のESXi4.0をVMwareのサイトからイメージをダウンロードしてCDに焼いてインストール実施。

はい、動きません。

メッセージを見るに、どうもメモリの最低要件が2Gだった様子。はい、ハードウェア要件も調べずにESXi入れる気満々で機器揃えました。アホです。

とりあえず、搭載した2Gのうち256Mがビデオメモリとして使われてる。サーバなんだし全然そんなにいらねえな、って事でそれをDisabledに。って、そんなことしたら次の起動で何も表示されなくなるだろ!って既にやっちまったし。。。

<…ここで画面の出ない状態でBIOS戻すのに約30分格闘。結局あきらめてCMOS消しました…>

というわけで、ビデオメモリ32MBにして再度挑戦。なんだか今度はさっきより進みました。ワクワク。

はい、動きません。

なんか謎のエラーが出てます。

ディスクが認識できないとか、CPUがなんだとかそんな事書いてある気がしましたが、ググっても全然情報が出てこないので挫折。検索してるとどうもESXi3.5の方が情報が抱負なんで、そっちに変更。新しいより枯れてる方が良いに決まってますね。

というわけでVMwareのサイトで再度ESXi3.5のイメージをダウンロード。 なんか4.0とは別にまたメールアドレスとか色々聞かれて煩わしいです。再度これをCD(CD-RWです。RWにしといてよかった、ってしみじみ思うほど何度もCD焼く事になるとは…)に焼いてインストール実施。

はい、動きません。

なんか"Unable to find a supported device to write the VMware ESX Server 3i 3.5.0 image to."とかとか言われます。

つまりHDDが認識されてないからですね。またここで色々ググってみると、SATAのHDDが認識されないのは常識みたいです。セオリーとしてはUSBメモリブートでドライバ周りいじって認識させるらしい。けど俺500MBくらいのUSBメモリしか持ってないし。じゃあって事で、このベアボーンにはSDカードスロットがついてるのでSDカードブートでやってみることにしました。SDカードからESXiを起動させさえすれば、SSH動かして色々いじれるみたい。

起動用SDカードの作り方は以下の通り。Ubuntu機から実施(Windowsの場合は適宜読み替えて下さい)。

  1. ESXi3.5のisoからinstall.tgzを取り出す。書庫マネージャで開けばOK。
  2. install.tgzの/usr/lib/vmware/installer/からVMware-VMvisor-big-3.5.0_Update_5-207095.i386.dd.bz2を取り出す。
  3. 上記bz2を解凍し、VMware-VMvisor-big-3.5.0_Update_5-207095.i386.ddを取り出す。
  4. ddコマンドを使用し、上記ディスクイメージをSDカードに書き込む。
    i.e. $ sudo dd if=VMware-VMvisor-big-3.5.0_Update_5-207095.i386.dd of=/dev/sdx
これで出来上がり。

ちなみにSDカードからの起動(or USBメモリ)ってことはもう内臓HDDにESXiのインストールを諦めたって事です。取り合えず起動させといてから内臓HDDを認識させて、データ格納先にだけでも使おうという言ってみれば妥協的な選択です。結構不本意。

気を取り直してSDカードから起動してみたところ、ESXiが動きました。

うおおお、恋い焦がれた黄色い画面!やったぜ、かなりの進歩。

しかし、起動後表示されるIPアドレスが0.0.0.0で、設定変更もできません。つまりまだなんにも認識してない状態だって事ですね。NICもHDDもダメ。実はなんの進歩もしてなくて、SDカードにイメージ書き込んだだけwwww

先は長い。NICを認識させる手順に続きます。

Ubuntu Server 10.4へのVMware Server 2.0.2のインストール


単にインストーラを走らせただけではダメだったので、自分用メモです。

  1. gccのインストール
  2. VMware Serverインストーラーのダウンロード
    VMware-server-2.0.2-203138.x86_64.tar.gz
    をVMのサイトからDLする。64bit版。
  3. パッチ適用スクリプトのダウンロード
    スクリプトをここからDLする。んで、任意の場所に解凍する。
  4. スクリプトの実行
    $ sudo ./vmware-server-2.0.x-kernel-2.6.3x-install.sh <DLしたvmwareインストーラのpath>
簡単に説明すると、

  • パッチを使わないとvmware-config.pl実施中のvmmonのビルドが"_MSC_VER" is not definedってwarningで失敗する。
  • パッチはカーネル2.6.31にも2.6.32にも対応(10/5/23現在2.6.32-22で実施して成功)。
  • スクリプトを実行するとインストールスクリプトまで一緒に走らせてくれる。
と言う感じ。詳しくはググってください。とりあえずこれで動いた。つい半年前に9.04に入れたときはどこも引っかからなかったんで油断してました。

Related Posts Plugin for WordPress, Blogger...