人気ブログランキング |

カテゴリ:玄箱( 7 )

玄箱サーバ死亡



玄箱(初代)のバックアップ機が起動しなくなりました。

玄箱は、我が家(ていうか私の)の中では情報の中核を成しているサーバなわけですが、それ故壊れたらイヤなので、運用機の他にバックアップ機を購入していました。そのバックアップ機では、アップデートをまず試しに実行してみたり、ビルドに何度もrebootしなければならないプログラムを試験的にインストールしたり、またまた大事なファイルを二重化でバックアップしておいたり、と‥‥。バックアップ機も常に電源を入れているワケではないながらも、偶には電源投入して使っていました。

それが、先日久々に電源をいれたところ挙動がおかしい。最初はEMモードから通常モードに復帰する時にtelnetでログインできない事象が起きたけど、何度か電源を入れ直したりしたところログインできるようになった。そのときはあまり気にしていなかったけど、しばらく使ってみて異変が!

kernel panic

そのときはEMモードでなにか不具合が有ったかと思ってrebootしたけど、ほぼそれが最後でした。

コンソールをつなげて起動をリアルタイムに見てみると、原因はすぐわかった。

d0222779_1633568.jpg

d0222779_1636530.jpg


U-BOOTの時点で"Net"(のインタフェース)を認識していない。そのままログインプロンプトは出て一見起動はしているのだけれど、dmesgをみるとエラーだらけ。インタフェースが無いことになっているので、ethernet関係がすべてerrorだから、まともに動くわけもない。当然telnetもできない。

仕方がないのでコンソールで色々確認していたわけだけど、どうもしばらく放っておくとなぜかnetが復活する。しかし、復活したからと言って使っていると、そのうち(数時間)でまた認識しなくなってkernel panicを起こす。なんどやってもその状態。不安定なのでサーバとしては使えない。

どうも放っておくとデバイスとして"Net"が見えることから、電荷が影響していると考えられ、電荷と言えばコンデンサ、コンデンサを使っている部品と言えば電源、と言うことで、最初は電源を疑った。

一応電源の電圧や、玄箱のメインボードテストピンの電圧を測っていたけど、異常なし。とは言っても電圧を測ったところで異常が気づくとも思えない。それで正常に動いている初号機(運用機)を止めて、部品をswapして切り分けをしてみた。

  1. 先ずは正常な電源を、故障機に移植して起動してみる。→NG
  2. 次にメインボードを正常に動いていた玄箱に移植して起動してみる→NG
  3. 最後に故障機に正常なメインボードを移植して起動してみる→OK

というわけで、メインボードの異常であることはわかったけど、メインボードは素人が手を出せるところは無く、もうそれ以上はどうしようもない‥‥。というわけで、このメインボードはお蔵入り。電源とか筐体とかは部品取りとして保管することに。

メインボードが一つしかなくなってしまったため、壊れる前にまたバックアップを手に入れたいところ。ただ、もう玄箱(初代)は中古でも手に入りにくく、更に手に入ったとしてもかなり時間が経っていることから、寿命が短いかもしれない。

それなら、今はやりのRaspberryPiに乗り換えるというのが運用を長続きさせる正しい道かもしれない。残念だけど、今のサーバの終焉の前に、早めに同じ機能をRaspberryPiで構築しなければ‥‥。
by tkn384 | 2014-09-23 16:39 | 玄箱

初代玄箱USB増設

今更ながら、必要に駆られUSBポートを増設しました。

増設とはいえ、玄箱には元々設計段階からUSBポートが前面にも付くことが想定されていて(初代玄箱は背面に1ポートのみ)、基盤にもパターンがあり、後はコネクタを半田付けするだけです。ケースもコネクタを付けても干渉しないように穴がもともと開いています。わずか100円のUSBコネクタと、ちょっとの手間でUSBがすぐ一つは追加できるわけです。(シルクを見ると更にもう一つ増設できるようですけど、今回はお気楽に一つだけで)
玄箱はオモチャ感覚で改造ができて面白いですね。

必要に駆られてと言うのは、USBHDDを増設したくなったから、です。一つだけ増設するならば背面の元々あるUSBポートだけで十分なのですが、もう一つ、先日買ったUSB-IO2も常時接続しておきかかったから。我が家の玄箱は家の内外で中心的な役割をしていて、VPNの端末に成っていたりもしています。外から操作するのにUSB-IO2を使おうと思っているのでこれは外せない。しかし録画やftpなどで2TBのHDDも既に94%となり、そろそろ増設が必要。3TBのHDDに替えるのも手ですが、まだ3TBは高いしまたOSから入れ直すのが面倒でその間使えなくなるのが不便。手っ取り早く、今ある1TBを増設してしまおうという、安上がりな魂胆です(せこい!)

手順は超簡単。
基盤のパターンで電源スイッチと同じ辺にUSB1とかいてあるパターンがあるので、そこの半田にコネクタを付けるだけ、です。と言葉で言うのは簡単ですが、有る程度知識と道具が要るかも。

コネクタを付けるには、まず半田で埋まっているスルーホール(部品を付ける基盤の穴)から半田を取って、スルーホールを剥き出しにしなければ、コネクタのパーツを付けることができません。私は、最初昔から使っている半田吸い取り線を使いました。でもこれは小さな穴なら有効なんでしょうけど、今回のはスルーホール深くまで半田が落ちているので、なかなか線に半田が溶けて染みこんでくれません。で、面倒なので次の手段へ。

スルーホールの半田を取るなら、コレが最強でしょう。吸い取り機です。これは比較的高いけど一つあると重宝するし一生モノです(^^;
d0222779_13573317.jpg

これを使って、裏面から半田コテで半田を溶かし、表面から溶けたはんだを吸い取ります。もう一発でスルーホールが剥き出しなので便利。一つ10秒くらいで終わります。吸い取り線だとこうはいかないね。
d0222779_13594647.jpg

後の作業は超簡単。USBの横型Aのコネクタを差し込んで、半田付けするだけなので、1~2分の作業ですね。我が家の2台の玄箱のUSBポートの増設に分解合わせても1時間もかからない位の作業でした。

元に戻して、化粧板(ベゼル?)にUSBのコネクタ用の穴を開けます。これも裏側から見ればわかるけど、構造的にはコネクタを出せるように成っていて、それを意図的に化粧板で塞いでいる状態。よって、この化粧板の薄いプラバンを、ニッパとカッターで加工して、コネクタを露出させればOK。実は一番時間がかかるところかも。きれいにやるにはね。
d0222779_1402223.jpg

ということで、無事増設完了です。

d0222779_1401654.jpg

by tkn384 | 2014-08-31 14:05 | 玄箱

USB-IO2.0を使う

先日たまたま本屋で見て買ってきた”トランジスタ技術2013年2月号”の付録に触発されて、また電子工作したい熱に駆られ、ちょっと秋葉ブラをした際に、秋月電子でUSB-IO2.0というusbとPIOのキットを購入しました。
d0222779_2253565.jpg


このキットについて帰宅してデータを調べていたら、元はmorphy企画というグループが企画製作していたUSBIOという機器と互換機をkm2NetがUSB-IOとして製造し、そのUSB-IOもマイコンの製造中止により、USB-IO2.0となった、とのこと。

参考→http://km2net.com/shop/index.shtml


しかし、歴史がある反面、今現在入手できる情報が意外に少なく、後で後悔することに。
もう買ったのを後悔しても時既に遅し、なんとか無駄にならないようにがんばるしか有りません。一応動くところまできたので、備忘録として書いておきます。




  1. 動作テスト
    キットに付属のCDROMをPCに入れ、内容を確認。visualBASICのサンプルプログラムが付属していて、windows95SP2以上くらいならば、説明書にあるとおり専用のドライバ無しで標準のままつかえるんじゃないでしょうか。ただ、そればwindowsの場合です。


    組み込みに使うならば、巨大ソフトのwindowsなんて使いたくないという兄も多いと思います。私もその一人。windowsで扱うのは簡単だけど、応用が利かないから、ね。

    そこで、linuxです。私としては玄箱で使いたい。我が家では、初代玄箱をサーバとして使っており、これにPIOを接続すれば、外部からon/offやらインプットならのインタフェースとして、色々夢が広がりそうです。

    平日は仕事で夜遅くまで家に帰れば無い生活をしている私としては、外から家の家電の操作ができるのは便利でもあり、機械好きとして興味があります。
    その点、我が家の玄箱は外出先からsshでのログインやvpnでの接続も準備完了しているので、環境としてはそろっています。あとはこのusb-io2.0のハードを玄箱で動かすだけ。
    でも、なかなか一筋縄ではいきませんでした。




  2. 方法の検討

    RS-232Cの時代にはc(++ではない!)で色々ドライバを試行錯誤で創っていたものですが、usbというヤツはオブジェクト指向でガチガチのシロモノなもんで、様々な.dllやら.oが絡まっていて、にわかに「よし、やろう!」と思っても、スキルがないとくじけてしまいます。実際そうでした。
    幸い、先人達が残してくれた足跡が多数ありましたので、それをググって確認してみました。しかし、記事があまりにも古く、URLのlinkがことごとく消えて無くなってしまっています。これには正直困った。


    断片的な情報から、以下のように大きく二つの方法があることがわかりました。



    • USB-IO2.0のドライバをkernelに喰わせてしまう方法

      kernel自体がUSB-IO2.0をPCハードの一部として認識させ、kernel内にUSB-IO2.0のリソースを確保する。
      メリットは、もう何のアプリも無く、直接ポートをたたけばUSB-IO2.0が反応すると言うことでしょう。デメリットは、やはりkernelに細工するので敷居が多少高いことでしょうか。


      私もポートの値を変更するだけで書き込みできるこの方法を実施したいと思ったのですが、かなり以前の問題で填りました。このUSB-IO2.0が世の中に出た頃(2004年頃?)はkernel2.4系が最新だったようで、先人達足跡もkernel2.4が中心で、今のkernel2.6系のドライバも一応開発はされたようなのですが、今やURLはlink切れで配布先が閉鎖されてしまっていてドライバが入手できず、自分ではドライバを作成する技量もないので断念せざるを得ませんでした。




    • USB-IO2.0をアプリ経由で操作する方法

      USB-IO2.0のアプリを立ち上げて操作します。USB-IO2.0と情報をやりとりするために、アプリからusbのライブラリを操作することで情報をやりとりします。アプリ次第で使い勝手は左右され多少使い勝手が落ちるとは思いますが、幸い、先人達の足跡がソースで残されていたため、こちらはkernelのバージョンに依存することなく利用できそうです。


      この方法でUSB-IO2.0を使用することとします。



     
  3. 玄箱での準備
     
    まずはusb関連のモジュールをインストール。

    apt-get install libusb
    apt-get install libusb-dev
    apt-get install usbutils


    ここでusbの状態をチェック。


    lsusb

    (なにも表示されず‥‥)



    我が家の玄箱では普通にusb-hddを接続しmountして使っているので、usbのhotplugとしての設定はできているモノと思いこんでいました。しかし、USB-IO2.0を接続しても、usb-hddを接続しても、lsusbを実行してもなにも表示されずにプロンプトが返ってくるだけです。
    気持ちが悪いので調べたところ、lsusbは/proc/bus/usbの状態を読んでいるとのこと。確認すると、/proc/busの下にusbが存在していませんでした。


    私の場合は次の方法で表示するようになりました。
    /etc/fstabに以下を追記


    none /proc/bus/usb usbfs defaults 0 0


    再スタートさせると、lsusbの結果が表示されるようになりました。

    <なにも接続しない場合>

    miz-testbox:/mnt/share# lsusb
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


    <USB-IO2.0を接続した場合>

    Bus 003 Device 004: ID 1352:0121
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub



    ベンダーidの1352と、デバイスidの0121が表示されるようになりました。これでアプリの方でデバイスの認識ができるようになりました。


  4. 動作確認
    玄箱のlinux上で認識した状態で、確認プログラムを動かします。

    http://km2net.com/usb-fsio/sample.shtml

    から、サンプルプログラムlinux_usbiofamily.zipをダウンロードします。


    コンパイルする前に、一応ソースを確認しましょう。
    私の場合、秋月バージョンなのでヘッダファイルのどこかのベンダコードとデバイス番号を変更しました(どこだったかは失念)


    コンパイルします。


    gcc -lusb -o io_test io_test.c

    問題なくコンパイルでき、USB-IO2.0のアシにテスターで測ると、期待通りの電圧が出力されていることがわかりました。



  5. 動作確認2

    テスターで測っても面白くないし面倒なので、目で見えるようにしました。
    とりあえず、セブンセグメントLEDを光らせる事にして、ソースをちょっと追加させて貰いました。(引数をGPIOに出力するだけ)



     /*----------------------------*/
     /* USB-IO Family TEST */
     /*----------------------------*/

      #include
      #include
      #include
      #include "usbiofamily.h"

      int main(int argc, char **argv)
      {
      int ret;
      int dat;
      int hikisuu;
     
      struct usb_bus *bus;
      struct usb_device *dev;
      usb_dev_handle *udev;
     
      unsigned char sendData[64];
      unsigned char recvData[64];
     
      if(argc<2){printf("hikisuu wo ireru!\n");exit(-1);}
      hikisuu=strtol(argv[1],NULL,0);
      printf("hikisuu=%d\n",hikisuu);
     
     
      /*-------------*/
      /* Device Open */
      /*-------------*/
      bus=io_init();
      dev=io_find(bus,dev);
      if( dev==NULL ){
      puts("io_find NG");
      exit(1);
      }
     
      udev=io_open (dev);
      if( udev==NULL ){
      puts("io_open NG");
      exit(2);
      }
     
      /*------------------------*/
      /* Port 1,2 in_out */
      /*------------------------*/
      memset(sendData, 0, sizeof(sendData));
      sendData[0] = 0x20; //in out
      sendData[1] = 0x01; //port1
      sendData[2] = hikisuu; //out
      sendData[3] = 0x02; //port2
      sendData[4] = 0x07; //out 0x07
      io_send_recv(udev,sendData,recvData);
      printf("in:P1(%x),P2(%x) out:P1(%x),P2(%x)\n"
      ,recvData[1],recvData[2], sendData[2],sendData[4]);
     
      /*------------------------*/
      /* channel 1, 2 Analog input */
      /*------------------------*/
      memset(sendData, 0, sizeof(sendData));
      sendData[0] = 0x2A; //Analog input
      sendData[1] = 0x01; //channel 1
      sendData[4] = 0x02; //channel 2
      io_send_recv(udev,sendData,recvData);

      /*---------------------*/
      /* Device Close & Exit */
      /*---------------------*/
      io_close(udev);
     
      exit(0);
     }
     



    回路は、参考のdipスイッチの部分をそのままGPIO0~3に接続すればok。
    下4ビットをセブンセグメントに接続し、数字が変わることを確認します。


    d0222779_2192091.jpg





    <参考>
    http://www.narimatsu.net/nari_page/musbio.html
    http://www.rlc.gr.jp/prototype/led/seg7led/drive/drive.htm
    by tkn384 | 2014-06-08 02:32 | 玄箱

浦島状態

ここ1年くらい仕事の関係で全く時間が取れず、なにもかも放置状態でしたが、このGWは久々にまとまった時間ができたので、玄箱もいじり始めたところです。そこで面倒なことに、いつの間にかlennyが終わってるじゃありませんか‥‥。


アップデートできないのは不安なので、この時間のあるときにやってしまいたかったので、とりあえず/etc/apt/sources.listのlennyを全てsqueezeに置き換えて、aptitude update、aptitude upgradeをなにも考えずにやって見ました。


まぁ一発でうまくいくことは稀でだいたい何かあるモノです。時間があるときはむしろその方が楽しかったりするのですけどね(M?)


今のところの問題点は有る意味非常にやっかいです。原因と対策は簡単なのですが‥‥。
エラーが出たのですが、そのエラーとはHDDの容量がゼロということで、至極明快なエラーでした。とはいうものの、新しいものを買って付ければ良いというわけではなく、パーテーションの変更という面倒な作業があります。パーテーションを切り直すためには、普通に考えればフォーマットし直しです。2TBもあるHDDを待避する手間たるや想像を絶する時間がかかるのでは(まぁ待避するのは機械の仕事ですが)

何か上手い方法はないかと考え中です。

by tkn384 | 2012-05-02 23:54 | 玄箱

玄箱DLNAサーバ化(mediatomb)

我が家では玄箱は映像置き場にも使っていて、使い始めた当初から、Mediawiz(BaffaroだとLinktheaterなど)のサーバとして使っていました。Mediawiz系の装置はDLNA以前のものなのでDLNAとの互換性は無いですが、なに不自由無く使っていたので、特にDLNAサーバを構築する欲求は有りませんでした。


テレビをREGZAやBRAVIAに替えてから、VARDIA(東芝のHDDレコーダ)をサーバとしてHD画質をDLNAで他のテレビで見れることから、「DLNAもいいな」と考えるようになり、やってみようかとなったわけです。玄箱だとSD画質ですが(暗号化されたファイルはダメ)、MediawizだとLinktheaterを立ち上げる必要がありましたが、DLNAだとテレビ自体に機能があるので、テレビだけで操作できるので一手間省けます。そんなこんなでインストールしてみました。

d0222779_15234670.jpg




  1. mediatombのインストール
    DLNAサーバはたくさんありますが、利用者の多そうな(?)mediatombにしてみました。ただ、apt-getでバイナリからインストールできるものは0.11.0-3と多少古いようなので、最新のものをsourceからインストールしてます。これだとISOも使えるようです(まだ試してないですが)


    apt-getだとこれがインストールされる
    # apt-cache show mediatomb
    Package: mediatomb
    Priority: optional
    Section: net
    Installed-Size: 96
    Maintainer: Andres Mejia
    Architecture: all
    Version: 0.11.0-3
    Depends: mediatomb-daemon (>= 0.11.0-3), iceweasel | firefox | www-browser
    Filename: pool/main/m/mediatomb/mediatomb_0.11.0-3_all.deb
    Size: 18064
    :
    :


    今回は最新のpkgのsourceを入手して使いました。

    sourceはここから入手
    http://mediatomb.cc/pages/download
    現状最新版はmediatomb-0.12.1.tar.gz

    /usr/local/srcで展開
    tar zxvf mediatomb-0.12.1.tar.gz
    その前に、必要なpkgをインストール。メモリを圧迫するため最低限表示に必要なモノだけを入れた。
    # aptitude install build-essential
    # aptitude install zlib1g-dev
    # aptitude install libmysqlclient-dev
    # aptitude install libid3-dev
    # aptitude install libexif-dev
    # aptitude install libmagic-dev
    # aptitude install libmozjs-dev
    # aptitude install mysql-server

    mysqlをつかうかlite3を使うか微妙なところだけど、これは好みの問題で。


    mediatombのsrcを展開したディレクトリに移り、makeします。
    # ./configure
    # make
    # make install


    私の場合、どうしても「expatがないよ!」的なエラーでconfigureが正常終了しなかった。aptitude install expatを実行しても、やはりconfigureで止まってしまう。
    半ばヤケになりapt-getでインストールできるmediatomb-0.11.0でいいかな‥‥、と思いましたが、ダメもとでexpatをsourceからインストールしてみたところ、うまくいきました。


    apt-get source expatで/usr/local/sourceにダウンロードし、expat-2.0.1のディレクトリで./configureを実行。特に設定するところはないので、makeしてmake installを実行。

    その後、mediatombをconfigureを実行したところ無事終了。あとはmake;make installで終了。



  2. 設定
    起動する前に、これは先人たちのhpを参考に、sqlのおまじない。

    mysqlのデータベースを作成します。
    # mysql -p
    mysql> CREATE DATABASE mediatomb;
    mysql> GRANT ALL ON mediatomb.* TO 'mediatomb'@'localhost';
    mysql> ^d

    次にテーブルを作成します。
    # mysql -p mediatomb < /usr/local/share/mediatomb/mysql.sql(パスワードはmysqlをインストールしたときのパスワード)

    そこで一度起動すると、root/.mediatombの下にconfig.xmlが作成されます。
    ※できるディレクトリはインストール時に/etcの下にmediatomb.confがあるかないかで変わるみたいです

    config.xmlは、0.12.1ではあまりいじるところは無くて、
     <protocolInfo extend="yes"/>
    no→yesに替えたくらいです。



    mediatomb.confの設定をしておきます。
    sourceからインストールした弊害なのか、私の環境ではmediatomb.confとinit.d配下にできるはずの起動用scriptファイルmediatombが有りませんでした。仕方がないので自分で作ることに。
    sourceを展開したディレクトリの下(/usr/local/src/mediatomb-0.12.1/scripts)に元となるファイルがあるので、それを適宜コピーして、自分の環境にあわせてディレクトリを修正すればOK。

    /etc/init.d/mediatomb
    miz-testbox:/etc# less /etc/init.d/mediatomb
    #!/bin/sh
    #
    # mediatomb This script starts and stops the mediatomb daemon
    #
    # chkconfig: - 95 30
    # processname: mediatomb
    # description: mediatomb is a daemon process which provides a UPnP service
    # config: /usr/local/etc/mediatomb
    # config: /usr/local/etc/mediatomb/config.xml
    # pidfile: /usr/local/var/run/mediatomb.pid

    # Source default mediatomb configuration
    . /etc/mediatomb.conf

    MEDIATOMB="-d -u $MT_USER -g $MT_GROUP -P $MT_PIDFILE -l $MT_LOGFILE -m $MT_HOME
    -f $MT_CFGDIR -p $MT_PORT"

    [ -f /usr/local/bin/mediatomb ] || exit 0

    [ -e /usr/local/etc/default/mediatomb ] && . /usr/local/etc/default/mediatomb

    # By default it's all good
    RETVAL=0

    # See how we were called.
    case "$1" in
    start)
    if [ ${MT_ENABLE} = false ] ; then
    echo "mediatomb startup is disabled in /usr/local/etc/default/mediatomb"
    exit 0
    fi

    # Check if MT is already running
    if [ -e /var/lock/mediatomb ] ; then
    $0 stop
    fi

    # Start daemon.
    touch $MT_PIDFILE
    chown $MT_USER.$MT_GROUP $MT_PIDFILE

    mkdir -p "/$MT_HOME/$MT_CFGDIR"
    chown $MT_USER.$MT_GROUP "/$MT_HOME/$MT_CFGDIR"

    echo -n "Starting mediatomb: "

    /usr/local/bin/mediatomb $MEDIATOMB $MT_OPTIONS

    RETVAL=$?
    if [ $RETVAL = 0 ] ; then
    touch /var/lock/mediatomb
    echo "ok"
    else
    rm -f ${MT_PIDFILE}
    echo "failed"
    fi
    ;;
    stop)
    # Stop daemons.
    echo -n "Shutting down mediatomb: "

    if [ -f ${MT_PIDFILE} ] ; then
    kill `cat ${MT_PIDFILE}` 2>/dev/null
    else
    killall mediatomb 2>/dev/null
    fi
    RETVAL=$?
    if [ $RETVAL = 0 ] ; then
    rm -f /var/lock/mediatomb
    rm -f ${MT_PIDFILE}
    echo "ok"
    else
    echo "failed"
    fi

    ;;
    restart)
    $0 stop
    $0 start
    ;;
    condrestart)
    [ -e /var/lock/mediatomb ] && $0 restart
    ;;
    *)
    $0 start
    ;;
    esac

    exit $RETVAL
    (END)



    うまく動くかどうかテストします。
    /etc/init.d/mediatomb start


    ps axで確認しプロセスが起動していることを確認。
    18533 ? Ssl 4:33 /usr/local/bin/mediatomb -d -u root -g root -P /var/r
    un/mediatomb.pid -l /var/log/mediatomb -m /etc -f mediatomb -p 50133


    玄箱のサーバのアドレスとmediatomb用にmediatomb.confで指定したポート(私は50133にした)にアクセスし、設定画面が開くことを確認します。

    d0222779_1517364.jpg



    テレビ側でDLNAで配信を受けるためには、配信するファイルをmysqlに登録する必要があります。操作は簡単、設定画面のGUIで操作するだけ。

    1.左上の"Filesystems"をクリックし、サーバのどのディレクトリを配信するか選び、右上にある"+"のマークをクリックすると、その配下のファイルおよびディレクトリがdatabaseに追加されます。
    d0222779_1519599.jpg


    その右となりの、"+"の周りに矢印がぐるっと回っているアイコンは、追加したディレクトリをスキャンして新たにファイルが追加された場合databaseに自動的に追加する設定です。これをInotifyにでもしておけば、ファイルにどかどか追加するだけで、クライアントで見れるようになります。
    d0222779_15202494.jpg


    一旦登録したファイルを消すには、databaseで該当のファイル、およびディレクトリを選択して”×”マークを押せばdatabaseから削除されます。



  3. 問題発生
    テレビからDLNAのサーバの内容が見れることは確認できましたが、肝心のファイルを選択すると、”クライアントで表示できません”的なメッセージが出ました。念のためjpgやmp3などを、BRAVIA、REGZA、iPhoneのそれぞれのDLNAクライアントで試したけど、結果は同様に表示や再生をできない旨のメッセージが出ます。

    ここで数日悩んで放置‥‥。

    で、最初から入れ直して気づきましたが、常識的なことなのかも知れませんが、mysqlで最初に登録する際のディレクトリ、およびファイルに日本語ファイルを設定してはダメです!
    なお、ディレクトリを最初に登録した後は、日本語ファイルでもいけます。これは気づかなかった。


    ということで、過去取りためたSD映像をサーバにポンポン入れておいて、必要ならばすぐ読みに行ける機能を無事に果たすようになりました。

    d0222779_15215414.jpg

    d0222779_15221096.jpg


    参考にしたhp
    http://shige-take.cocolog-nifty.com/blog/2008/02/hgdlna_d0f3.html
    by tkn384 | 2011-05-29 12:36 | 玄箱

ネットdeダビングとftpの両立

ウチの玄箱は、元々外向きのftpサーバを作りたいから導入した経緯もあり、未だに我が家ではftpサーバとして玄箱は重要な役割を担っています。またtoshiba製HDDレコーダーも使っており、そのHDDが一杯になってきたら待避場所としてネットdeダビングで玄箱にデータをダビングしたい欲求も出てきて、そのために常時動いているこのftpサーバをのサーバとしても使えないかと考えるのはごく自然な流れでしょう。

玄箱にtoshiba製HDDレコーダーからダビングするためのクライアントとしては、先人達のブログでも多く紹介されているRDserviceを使って試してみました。ネットdeダビングはftpを使っていることは解っていたので、RDserviceを使うためにはftp(私はproftpd)を停止させなければなりません。しかしftpは止められない(止めたくない)ので、HDDレコーダーのデータをダビングする時は、一度windowsパソコンでVRD(windowsアプリでネットdeダビングと接続できるソフト)に転送したあと、windowsからsamba経由でサーバにファイルを送るという面倒くさいやり方を何年も続けていました。

ところが同じようなことを考えている人も居て、その方のブログを拝見して目からウロコでした。

http://flowernet.gr.jp/masm/RDService.html


仕掛けとしては、同じIPアドレスで同じポートは共有できないため、一つの物理インタフェースに仮想に二つのアドレスを割り振り、サービスをそれぞれ別個にぶら下げるという方法でした。
「なんで早く気が付かなかったんだろう!」と思いましたよ。私はどっちかというと「ftpの別ポートを使ってなんとかできないものか」と思っていたので、まさに目からウロコでした。

そこで、まず先人の方法に沿って、設定を実施。

  • 1.仮想アドレスの追加eth0:0

    我が家のIPアドレスに沿って以下のように設定

    玄箱1(外向けftpサーバ現在のIPアドレス)
    →eth0 192.168.0.132
    玄箱2(新しく作る仮想アドレス)
    →eth0:0 192.168.0.232
     


    起動時にeth0:0を作るため、/etc/network/interfacesに追加

    iface eth0 inet static
    address 192.168.0.132
    network 192.168.0.0
    netmask 255.255.255.0
    broadcast 192.168.0.255
    gateway 192.168.0.1

    iface lo inet loopback

    iface eth0:0 inet static
    address 192.168.0.232
    network 192.168.0.0
    netmask 255.255.255.0
    broadcast 192.168.0.255
    gateway 192.168.0.1

    auto eth0 lo eth0:0



    rebootしてifconfig -aでeth0:0ができることを確認。


  • 2.RDServiceの再コンパイル

    ここは私の力ではどうしようもないところ。RDServiceの動作が解らないので、先人の知恵の通りに実施。

    cd /usr/local/bin/RDService
    patch -p1 < patch
    make

    しかし同じRDService 1.0b5でありながら、うまくpatchが通らない‥‥。
    うまくパッチが当てられなかったファイルは.rejができるので、そのファイルと
    diffを見比べる。
    結局、なぜか微妙にsrcファイルが違うみたいでpatchがうまくできないみたい。

    仕方がないので、diffファイルを見て、手動でpatchする。
    私のところでうまくpatchができなかったのは、FTPService.javaとMain.javaでした。

    やったことはdiffファイルを見ながら、-のラインを+のラインにそれぞれのファイルの中の該当のラインを機械的に置き換えるだけなので、注意深くviでsrcを書き換えした。
    たしか10カ所くらいだっただろうか。


    終わったらmake clean ;makeでコンパイル。無事終了。

    起動のために、usr/local/bin/RDService/RDServiceを修正

    #!/bin/bash
    sudo /opt/java/jre/bin/java -jar /usr/local/bin/RDService/RDService.jar -s -p 55
    00:5509 -d /mnt/share/video/tmp/RD -n miz-box -a 192.168.0.232

    ここで、-aオプションを仮に外して実行してみると、RDServiceが0.0.0.0で立ち上がりエラーになるため、-aオプションが有効になるように変更できたことがわかる。

    念のため、/etc/rc.2/S99rdservice restart (ウチではS99にしてます)
    を実施すると、

    miz-box:/usr/local/bin/RDService# /etc/rc2.d/S99rdservice restart
    Shutting down RDService:
    Starting RDService:
    miz-box:/usr/local/bin/RDService# RDService 1.0 beta 5
    Copyright 2004,2005 raktajino. (http://homepage.mac.com/raktajino/)
    local IP address : /192.168.0.232
    FTP control : port 21
    FTP data : port 5500 - 5509
    FTP buffer size : 1048576
    NETBIOS NS : port 137
    NETBIOS service name : miz-box
    Destination directory : /mnt/share/video/tmp/RD
    Ready.

    192.168.0.232のポート21でRDServiceが開始されたことが解る。


  • 3.inetdの設定
    元のproftpdが192.168.0.132だけを使うように設定します。
    /etc/inetd.confを修正

    192.168.0.132,127.0.0.1:ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/prof
    tpd


    行の最初のIPアドレスで、listen時に使うアドレスを指定できるとは、知らなかった‥‥。

    そして忘れずに確認することがあります。
    ウチのproftpdは、もともとstandaloneで動いていたのを忘れていて(inetd.confを設定しているのに!)、起動しても最初に起動するproftpdがすべてのIPアドレスのポート21をおさえてしまったため、RDServiceが192.168.0.232で起動しようとしても、「もう使ってるよ」ってなエラーを吐いて終わってしまいました。

    うまく動かない場合は次の確認をしておくと良いと思います。

    netstat -nap

    正常に起動すれば、それぞれのIPアドレスに対して一つずつlistenに割り当てられます。
    tcp 0 0 192.168.0.232:21 0.0.0.0:* LISTEN
    16351/java
    tcp 0 0 192.168.0.132:21 0.0.0.0:* LISTEN
    1256/inetd

    ※javaはRDService、inetdはinetdから呼ばれるproftpdがlistenしているということ

    standaloneからinet経由で立ち上がるようにするためには、以下を修正。
    /etc/proftpd/proftpd.conf
    :
    ServerType inetd
    :


    これで一応テスト。
    windowsなどから、ftp 192.168.0.132とftp 192.168.0.232を実施して正常を確認。RDServiceの方はIDを要求されれば正常に動いていると思います。


    実機でも確認します。

    d0222779_1362393.jpg

    この裏でftpでファイル転送もできるか確認します。

    ネットdeダビングですが、inetdでもRDServiceでも特に排他制御はしていないので、何個でもプロセスが走りますので、たとえばRD-XS57とRD-H1と同時に同じ玄箱にダビングはできますが、やはりちょっとでも不安定になるとすぐ「ネットワークで障害があり中止しました」に成ってしまう確率が上がるので、無印玄箱なら一つが安心でしょう。
    by tkn384 | 2011-03-27 01:43 | 玄箱
  • 我が家の玄箱

    d0222779_116759.jpgブログ引っ越ししました。
    最初なんで、我が家の玄箱の紹介をしておこうかと思います。

    玄箱とは? 一言で言えば、玄人指向のNASハードディスクで、ググれば嫌と言うほど紹介は出てくると思います。その初代機をまだ細々と使い続けています。尤も買ったまま使っている人はほとんどいないんじゃないでしょうかね?我が家のもlinuxを入れ替えた初代玄箱を、運用機と試験機として2台使っています。それぞれIPアドレス以外同じ設定で、試験機でテストした後に運用機に反映させるといった感じですね。

    現在の状態
    Debian GNU/Linux 5.0  (lenny化、u-boot化済み)
    2TB 1機搭載

    使用用途
    ・外向きのftpサーバ(友達とのファイル交換用)
    ・webサーバ(ホームページ)
    ・DLNAサーバ
    ・wizd(昔のlinkstation用画像サーバ)
    ・REGZA録画用サーバ
    ・sambaサーバ
    非力な装置でありながら、結構便利に使ってます。

    玄箱の良いところは、私的には使いやすさ、ですね。慣れもあるけど構造が単純なんで簡単なlinuxの設定で色々楽しめて、それが実用的なところ。あと、消費電力の少ないところ。サーバと言えば24h365dで動かしているイメージだけど、日中はほとんど使わないのにつけっぱなしはエコ的によくない。非力な玄箱といえどほったらかしておけば10w位消費してしまう。それでHDDの停止が簡単にできた玄箱を未だに使い続けているわけですね。日中はほとんどHDDが止まっているんで1ヶ月電気代は100円くらいのようです(エコワットで確認)

    これらについてぼちぼちと書いていこうと思ってます。
    by tkn384 | 2011-02-26 11:06 | 玄箱


    今の好きなことは、暇な時いじる玄箱とか家電とか


    by tkn384

    プロフィールを見る
    画像一覧
    更新通知を受け取る

    カテゴリ

    全体
    家電
    玄箱
    電子工作
    Raspberry Pi
    未分類

    以前の記事

    2014年 09月
    2014年 08月
    2014年 07月
    2014年 06月
    2014年 03月
    2013年 08月
    2012年 05月
    2011年 05月
    2011年 04月
    2011年 03月
    2011年 02月

    フォロー中のブログ

    メモ帳

    最新のトラックバック

    ライフログ

    検索

    タグ

    その他のジャンル

    ブログパーツ

    最新の記事

    玄箱サーバ死亡
    at 2014-09-23 16:39
    初代玄箱USB増設
    at 2014-08-31 14:05
    RaspberryPiのバッ..
    at 2014-07-21 23:31
    Windows7とWindo..
    at 2014-07-20 12:16
    Windows7のPCを買い..
    at 2014-07-06 01:48

    外部リンク

    ファン

    記事ランキング

    ブログジャンル

    ネット・IT技術

    画像一覧