技術的ひとりごと(備忘録)

いろいろな備忘録的な何か

FreeNAS 上に置いている動画をDLNAで公開する

例によって殴り書きのメモメモ。

  1. 背景
    • FreeNASはバージョン8.2からプラグイン機能をサポートしている。
    • 公開されているプラグインの中にminidlnaというものがあり、FreeNAS上に配置されている動画ファイルをDLNAで公開することが可能。
    • 現在、動画の保存場所としてFreeNAS 8.0.2 を利用していたが、DLNA配信を試してみたくなったので、FreeNASをアップグレードし、DLNAを検討してみる。
    • 10/12時点では 9.2 以降は不安定という評判が見受けられたので 9.1.1 にアップグレードする。
  2. 今回やったこと
    1. FreeNASアップグレード
      1. 事前に設定ファイルないしはシステムドライブのバックアップを取得する。
      2. 公式からアップデートファイルを入手。
        • 今回は FreeNAS-9.1.1-RELEASE-x64.8_0_x_LEGACY_GUI_Upgrade.xz を取得。
      3. IEを起動してFreeNASの管理画面にアクセス。
        • 普段使っているChromeだと管理画面が正しく動作しなかった。要注意。
      4. 左下のメニューで「設定」を選択し右下の画面で「高度な設定 > ファームウェア更新」を選択。その上でアップデートファイルを登録。アップデートファイルのハッシュ値を聞かれるので、公式サイトに記載されている値を入力。
      5. しばらく待つとアップグレードが自動的に完了する。
    2. DLNAの有効化
      1. 公式からminidlnaのファイルをダウンロードする。
        • 今回は minidlna-1.1.0_1-amd64.pbi を利用。
      2. IEを起動してFreeNASの管理画面にアクセス。
      3. 画面上部の「プラグイン」を選択し右下の画面で「Upload」を選択。ウィンドウが開くので先ほどダウンロードしたpbiファイルを指定して「Upload」を押す。
      4. しばらく待つとプラグインの登録が完了する。
      5. 初めてプラグインを導入する場合に限り「Jail」の設定画面が表示される。プラグイン関連のファイル等を格納する領域となる。適当な領域を指定する。
      6. 左側メニューで「Jails」を指定し「"プラグイン名" > ストレージ > Add Storage」を選択。Souceに dlna で公開する領域の親ディレクトリを指定する。Jail用に用意したフォルダのサブディレクトリを指定する。
        • 通常はデフォルトで用意されている「media」ディレクトリと、NAS上の任意のフォルダをマッピングさせれば良さそう。
      7. 左側メニューで「プラグイン」を指定し「MiniDLNA」を選択し、パラメータを設定して「OK」を押す。
        • Friendly name には DLNA サーバとしての名前を設定する。
        • Media directory には DLNA で公開する領域のパスを指定する。(jail領域をrootとした相対パスで指定。)
        • その他オプションについては初期値でもOK。
        • 当方の環境では「OK」を押した後に、設定画面を開き直すと、設定した値が消えてしまう現象が発生したが、GUIの表示がおかしいだけで、OS上の設定ファイルは更新されていたので気にしないことにした。
      8. FreeNASにsshでログインし、rootユーザに切り替える。
      9. minidlnaのスタートアップスクリプトを開き、# minidlna_enable="YES" と書かれている行のコメントアウトを外す。
        • スタートアップスクリプトのパスは "Jail用ディレクトリ/プラグイン名/usr/pbi/minidlna-amd64/etc/rc.d/minidlna"。
        • 管理画面上部の「プラグイン」を選択し、右下画面の 「ON/OFF」スイッチをクリックするのが正規の手順であるが、当方の環境では個々のスイッチがうまく切り替えられなかったため、スタートアップスクリプトを直接いじることにした。
      10. FreeNASを再起動すればDLNAが有効化される。
  3. Tips
    1. 複数のボリュームを dlna で公開したい場合の対応手順
      1. FreeNASにSSHログインし「media」ディレクトリの下にサブディレクトリを作成。
      2. 作成したサブディレクトリと、公開したいフォルダをマッピングさせる。
      3. minidlnaの公開領域として「media」ディレクトリを指定する。
    2. プラグインファイル関連のファイルパス
      • プラグインのログ出力先:"Jail用ディレクトリ/プラグイン名/var/log/messages/"
      • プラグイン設定ファイル:"Jail用ディレクトリ/プラグイン名/usr/pbi/minidlna-amd64/etc/minidlna.conf"
      • 設定ファイルの手動更新はNG。GUIで設定した情報が別の領域に格納されているようで、再起動時にその情報が設定ファイルに反映される模様。プラグインの設定を更新する際は、必ずGUI経由で更新すること。

録画ファイルサーバの動画再生方法を見なおしてみた

  1. 経緯
    • 録画鯖(Windows 7 Pro)の上にPT2に以下の録画データが格納されている。
    • 録画ファイルの形式は .ts で、順次 h264 形式の mp4 にエンコードしている。
    • 録画データの視聴や、エンコ前後のチェックでこれらのファイルを開く必要がある。
    • 録画鯖と普段使っているPCは別物である。動画閲覧は普段用PC(Win7Ultimate)でやりたいため以下の形で対応していた。
      • .ts や .mp4 の置き場所をCIFS共有で公開。
      • 普段用 PC にインストールしたプレーヤ(VLC等)で上記ファイルをオープン。
  2. 今回の問題
    1. 問題概要
      • 普段用PCで録画鯖の動画を再生すると数秒感覚でバッファリングが発生し、まともに視聴できない。
      • 動画ファイルによって発生頻度が違うが、ひどい時は3秒再生して5秒待ちとかを延々に繰り返す感じ。
      • VLC とか WMP とか GOM とかいろいろ試したが、どのプレーヤでも発生する。
    2. 切り分け(覚えている範囲)
      • wireshark で cifs 通信を解析したところ パケロス による再送がたまに発生していた。
      • ping レベルでサーバ間のパケロスを調べてみたがロスは発生していない。
      • サーバ間のファイル転送では普通にMB/sレベルの速度が出ている。
      • サーバ間や間の危機のMTUをいじるとか、ファイル共有のバージョンをCIFSからSMB1.0に帰るとかひと通り試したが、一向に改善せず。
      • VLC のバッファ周りもいろいろいじってみた。バッファをどんなにあげようが、バッファリングが頻発する現象は変わらなかった。発生頻度そのままなのに、バッファリング時間は大きくなるのでむしろ逆効果だった。
    3. 切り分けから感じたこと
      • Windowsファイル共有(CIFS or SMB1.0)の上に乗っている動画を直接見るという行為自体がイケていない?
  3. 対策
    1. 方針
      • Windowsファイル共有を使わずDLNAで動画を試聴することを検討。
    2. 構成案
      • DLNAサーバは録画鯖のWMP12。
      • DLNAクライアントは普段用PCのWMP12。
    3. 検討過程のメモ
      • 当初はDLANサーバを別途立ててフリーのDLNAサーバソフト「TVersity」を導入するつもりだったが、動画ファイルをうまく認識してくれなかったため断念。
      • 調査するとWMP12はDLNAサーバの機能を持っているので、もうこいつ使えばいいやと思った。
      • WMP12のDLNAサーバで配信できるファイルは、そのサーバのローカルに置かれているファイル限定になるので、DLNA機能の外出しは断念。
  4. 結果
    1. DLNA導入の効果
      • 対策に従い構成変更を実施。その上で動画を再生したてみたところ .ts ファイル、 .mp4 ファイル 共に再生中に動画が途切れることはほぼなくなった。
    2. DLNA導入時の注意点
      • Windows 7 SP1 環境では、WMP12のDLNA機能を使う前に mfds.dll のバージョンをロールバックする必要あり。この対応をしないと音声が再生されない。詳細はこちら
  5. 感想
    • 良い点
      • 再生性能が大幅に改善したので満足。
      • 動画ファイルの長さ表示に対応、再生位置のシークも普通にできる。
    • 微妙な点
      • クライアントがWMP12に制限されるので見た目がいじれない。
      • 外部サーバのファイルをDLNA配信の対象に指定できない。
        • 今回は録画鯖とDLNA鯖を共存させる構成になったが、録画鯖に負荷が発生したり、DLNAが起因で障害が発生したりしないか不安。
        • ファイルの置き場所をNASにした場合対応手段がなくなるし。

Excelの時刻変換 ( x分x秒 を時刻に変換)

○シチュエーション
1分2秒 といった文字列をTIMEVALUE値に変換したい。

○対応方法
SUBSTITUE関数とTIMEVALUE関数を使う。
以下の様な流れ

 ① SUBSTITUE関数で、"分"の部分を":"に、"秒"の部分を".0"に置換する。
 ② ①で作った文字列をTIMEVALUE関数に放り込む。

dynamips 上に建てた仮想ルータ特定のポート間で通信ができない

dynamips構築でハマったのでメモ。いつもの様に殴り書き。

問題の概要

  • 過去に手書きで作った.netファイルをGNS3に読ませてルータを継ぎ足したところ以下リンクの疎通がとれなくなった。
    • 旧ルータのg1/0 <--> 新ルータのfa0/0
    • 旧ルータのg1/0 <--> 新ルータのg1/0
    • 旧ルータのg2/0 <--> 新ルータのg2/0
  • それぞれのルータ上では g1 も g2 も正常にリンクアップしている。
    • L1/L2ともにUP状態で、自分に対してpingを送ると応答あり。
  • 仮想リンクをキャプチャしてみると以下の状態だった。
    • 旧ルータの g2/0 をキャプチャ → 旧ルータが投げるパケットをもれなくキャプチャできる。新ルータ側のパケットは一切見えない。
    • 新ルータの g2/0 をキャプチャ → ↑のケースとは逆に新ルータが創出するパケットのみ見える。旧ルータが送ったパケットは一切見えない。
  • dynamips上で仮想リンクが機能していないように見える。

情報

  • 旧ルータも新ルータも同じ構成 (下記参照)
    • モデル C7200系
    • slot 0 : C7200-IO-2FE
    • slot 1 : PA-GE
    • slot 2 : PA-GE

原因

  • .netファイルの書式に問題があった。
    • NGケース
      • dynamipsサーバの指定が以下の通り、localhost:7200 と 127.0.0.1:7200 に分かれていた。
      • 仮想ルータに紐つけるdynamipsのアドレスが変わると、仮想リンクが上手く動作しなくなる???

[localhost:7200]

設定

[[ROUTER 旧ルータ]]

設定

[127.0.0.1:7201]

設定

[[ROUTER 新ルータ]]

設定

    • OKケース
      • 以下のように変えたところ正常に動作するようになった。

[localhost:7200]

設定

[[ROUTER 旧ルータ]]

設定

[[ROUTER 新ルータ]]

設定

PoserShellでサブフォルダ内のファイル一覧を出力(ファイル名単位)

  • フルパスで出力

$ ls -r -Name
test\hoge1
test\hoge2

  • フォルダ単位でセパレート
    • 半角¥を,に置換して出力
    • ファイル名だけ拾いたい場合に使う (CSVエディタで開いて列を選択してコピペ)

$ ls -r -Name | %{$_ -replace '\\',','};
test,hoge1
test,hoge2

Rasberry Pi に DualMiner を挿して Mining

DualMiner USB 2 によるマイニングに手を出してみたいとおもい、お試し環境を作ってみたのでメモメモ。

  1. Raspberry Pi 導入
    1. ライセンスにお金を掛けたくないので、raspbian を使う。(今回は 2014-01-07-wheezy-raspbian を使用)
    2. このへんからイメージを落としてきて、DDforWinでSDカードにイメージを焼きこむ。
    3. Rasberry Pi に SDカード を挿して、初期セットアップを行う。(タイムゾーンとか言語設定を日本とし、あとはデフォ値で)

  2. ビルド準備
  3. autogen を利用するため、dh-autoreconf を導入する。

    sudo apt-get install dh-autoreconf

  4. cgminer ビルド
  5. DualMiner 対応の cgminer をビルドする。下記を参考にした。
    http://support.dualminer.com/raspberry-pi-user-guide/

    git clone git://github.com/dualminer/dualminer-cgminer.git cgminer
    cd cgminer
    sudo chmod +x autogen.sh
    ./autogen.sh
    ./configure --enable-dualminer --enable-scrypt --disable-opencl --prefix=/home/pi
    sudo make
    sudo make install

  6. Mining 開始
  7. 以下を start-mining.sh として保存し、実行すると mining 開始。

    #!/bin/bash
    sudo cgminer \
    --dualminer-pll 850 \
    --scrypt \
    --url=stratum+tcp://poolURL:port \
    --user=username.workername \
    --pass=workerpassword

シンクライアント用端末としてのRaspberry Pi

以前、以下の様なコンセプトでシンクラ接続用環境探していたんですよ。

  • Linux OS であること。
    • Android端末 は日本語キーボード周りが使いづらいのでNG
    • Windows は高いので…
  • 楽に持ち運べるサイズ・重量であること。
    • 出先に持っていいって、必要なときに自宅の検証環境に繋ぐ的な用途を考えている。
    • 手帳サイズくらいが理想。
  • モニタは外付けを想定
    • 出先のモニタにつないで画面出力する形態を想定。
    • タブレットではなくPCとして使えるものがよい。
  • なるべく安いこと。

その時は『安い・小さい』という部分を評価して、DN2820 を買っていたんですね。
(余談ですが、この時の本命は ECS の LIVA だったんですが、某クリアファイルをくれるお店が、LIVAを取り扱っていなかったので DN2820 を選んでいた。)

ただ、ここは Raspberry Pi 買ったほうが正解だったかも。
(ニュースとかで、存在は知っていたけど、購入対象として意識してなかった。)

DN2820 の場合、メモリとかストレージ(SDカード)とか考慮すると2万円以上のカネがかかったんですが、Raspberry Pi だと 本体キット・ケース・ストレージ 全部揃えても 1万円程度で済みました。
(本体は 秋葉原千石電商 本店2Fで購入。)

これに無線IFつけても、2万は超えないと思うのでので、VNCやRDPのクライアントがまともに動くのであればこっちのほうが良いかなと。