はてなブックマーク - LinuxでUSB外付けHDDを追加 – USBハブ使って倍プッシュ編
    このエントリーをはてなブックマークに追加

    Fusic 平田です。
    とあるお客様のところにLinuxのサーバを納入しているのですが、今回はそのお話を。
    # 倍プッシュ編しかありませんので、そこはご容赦ください。

    このサーバ、普段はファイルサーバとして活用しているものです。
    で、今回別途USBの外付けHDDを2台追加することになりました。
    用途はSambaでアクセスできればいいよーだったのですが、問題がひとつ。
    他にも外付けHDDなどなど挿したりしてて、USBポートに余裕がないと。

    で、USBハブあるよーとのことなので挿してみました。
    さっくり動いてmountできたのでおー動く、と思ったのもつかの間。
    数分たったりUSBハブに他の機器を挿したりした瞬間に動かなくなりました。
    /var/log/messagesを見ると、以下のIO Errorがずらり。

    scsi 9:0:0:0 rejecting I/O to dead device

    これを解消すべく、以下の手順でいろいろやってみました。

    0. 前提

    サーバマシン: Linux(CentOS 5.3)の2Uサーバ
    元からあったUSB外付けHDD: 1台(IO-DATA)
    今回増やすUSB外付けHDD: 2台(IO-DATA)
    問題: USBポートが既にいっぱいいっぱい
    目標: 正常に動かす
    目標2: さらに増やす時に手間がかからないようにする

    1. /dev/***の部分を各HDDで固定する

    現象を見ていると、/dev/sd*の部分がころころ変わるようで。
    と言うか/dev/sd*の部分はudevで勝手に割り当てるので、再起動時なんかに変わってしまう可能性が大。
    これをまずは固定しようということでいろいろ調べたところ、↓を発見。
    fredericiana.com/2006/03/15/writing-udev-rules-short-notes/
    要はudevのruleを作成して、デバイスファイルを固定しようってことです。
    というわけでudevルールの書き方を読んでみると、

    > ユーザ指定のルールは、基本の/devレイアウトを作成するudevの初期設定を、事実上無効にしてしまいます。したがって、ユーザが記述するルールには、実用的である初期設定の名前とユーザ指定の名前両方を得るために、devfs形式の名前やシンボリックリンクも指定することをお勧めします。

    とあったので、/etc/udev/rules.d/98-local.rulesとして以下の内容のファイルを作成。

    BUS=="usb", KERNEL=="sd*", SYSFS{serial}="0010100740AABBCC", NAME="%k", SYMLINK="usbhda\n"
    BUS=="usb", KERNEL=="sd*", SYSFS{serial}="0010100740DDEEFF", NAME="%k", SYMLINK="usbhdb\n"
    BUS=="usb", KERNEL=="sd*", SYSFS{serial}="0010100740ABCDEF", NAME="%k", SYMLINK="usbhdc\n"

    # SYMLINKの値はこちらで決めていいので、”usbhd/****”とかにして別途まとめる形でもいいです。
    serialの調べ方ですが、1つずつ挿して/dev/sdbなりで認識されているのを確認した後に

    udevinfo -a -p $(udevinfo -q path -n /dev/sdb)

    と実行すると

    # udevinfo -a -p $(udevinfo -q path -n /dev/sdb)
     
    Udevinfo starts with the device specified by the devpath and then
    walks up the chain of parent devices. It prints for every device
    found, all possible attributes in the udev rules key format.
    A rule to match, can be composed by the attributes of the device
    and the attributes from one single parent device.
     
      looking at device '/block/sdb':
        KERNEL=="sdb"
        SUBSYSTEM=="block"
    ----- (中略) -----
      looking at parent device '/devices/pci0000:00/0000:00:03.1/usb3/3-1/3-1.4':
        ID=="3-1.4"
        BUS=="usb"
        DRIVER=="usb"
        SYSFS{configuration}==""
        SYSFS{serial}=="0010100740AABBCC"
    ----- (後略) -----

    てな感じでずらずら出てくる中から読み取れます。

    ruleを保存した後に再度挿すと、こんな感じになります。

    # ls -l /dev/usbhd*
    lrwxrwxrwx 1 root root 3  8月 20 17:57 /dev/usbhda -> sdb
    lrwxrwxrwx 1 root root 4  8月 20 17:57 /dev/usbhda1 -> sdb1

    複数台挿して/dev/sd*の順序がずれても、

    # ls -l /dev/usbhd*
    lrwxrwxrwx 1 root root 3  8月 20 17:57 /dev/usbhda -> sdb
    lrwxrwxrwx 1 root root 4  8月 20 17:57 /dev/usbhda1 -> sdb1
    lrwxrwxrwx 1 root root 3  8月 20 18:06 /dev/usbhdb -> sdd
    lrwxrwxrwx 1 root root 4  8月 20 18:06 /dev/usbhdb1 -> sdd1
    lrwxrwxrwx 1 root root 3  8月 20 18:05 /dev/usbhdc -> sdc
    lrwxrwxrwx 1 root root 4  8月 20 18:05 /dev/usbhdc1 -> sdc1

    といった感じできちんとアクセスできます。

    2. USBハブを変える

    使用したハブがそこそこ古いものだったので、外付けHDDを複数台挿すと途端に動かなくなります。
    デバイスファイルの問題は解決しているので、あとは単純にUSBハブの供給電流とかの問題だろうなと。
    # あとusb2.0に対応してなさそうだな、とか。
    # 型番を必死に調べたのですが、外観以外の情報がないので絞り込めませんでした。。。
    というわけで今回使用したのはこちら。
    ELECOM U2H-GM002BK
    PS3用じゃないか!とツッコミをいただいたりもしたのですが。
    > セルフパワー時/7ポート合計3500mA以内
    が非常に強力なので、これにしました。
    # 4ポートのELECOM U2H-TAP3420Sもあったのですが、口に余裕があったほうが困らないので今回は却下。
    # 7ポートのほうはマグネットが付いてたりするので、そういうの困るなって場合は後者がいいと思われます。

    というわけで設置、USBハブ電源スイッチオン、USB外付けHDDをざくざく挿入。
    きっちり稼働して万々歳です。
    以降定期的にちょこちょこ覗いてますが、特に問題も発生していないようです。

    同様の事象で困る例は非常に少ないと思いますが、備忘録がてらということでひとつ。
    何か後日談なんかが出てきた場合は、またこちらで紹介させていただきます。
    まあ後日談=十中八九トラブルなので、なるべく書かなくて済むことを祈りますが。。。

      はてなブックマーク - OpenOfficeとpopplerを使用した画像変換処理
      このエントリーをはてなブックマークに追加

      またまた山本です。
      以前ご紹介した自社サービスのZENPREの反響が思いのほか大きく、とりあえずほっとしております。
      いいスタートダッシュは切れたので、引き続き新たな機能の実装を続けてまいります。

      今回はZENPREで使用している機能の1つを紹介させていただきます。

      ZENPREではアップロードされたMicrosoftOfficeのPowerPointのデータやPDFを画像変換することで、Flashを通しての配信を可能にしておりますが、
      この時のフローとしては、3つの段階を経ています。

      OpenOffice + JODConverterでppt,pptxファイルをpdfファイルへ変換(省略可)

      poppler(Xpdf)を使用して、pdfファイルをppmファイルへ変換

      ImageMagickを使用して、ppmファイルをjpgへ変換

      つい最近まで、OpenOfficeのバージョンは3.2.0でした。
      このバージョンでは、Office2007の形式である「pptx」も変換可能なのですが、
      1枚目に表示される「クリックしてサブタイトルを入力」というガイドまでも変換されてしまうというバグがありました。
      しかし、最近バージョンが3.2.1にあがりその問題が解消されましたので、晴れて「pptx」にも対応いたしました。

      開発段階においては、2番目のフローである「pdf→ppm」変換をせず、
      「pdf→jpg」変換を行っておりました。
      しかし、この変換方法だと生成される画像の解像度が低いという問題がありました。
      600×480ほどのサイズであれば問題なく、表示もそれに合わせればよいのですが、ZENPREの機能の一つにフルスクリーンモードというのがあり、
      それを使用すると利用者によってはとてつもなく大きいモニターで表示することになり、
      その場合、画像が引き伸ばされぼやけてしまうことになります。

      そこで着目したのがpopplerでした。
      popplerの前身はXpdfであり、pdfをppmという高解像度の画像へ変換することが可能です。

      以下は、ppmに変換せずに生成したjpgとppmに変換した上で生成したjpgの2ファイルです。
      ppm処理しないjpg
      ppm処理したjpg

      前者は粗さが目立ちますが、後者は文字の縁が滑らかなまま表示されています。
      もちろんファイルサイズが大きくなってしまいますが、大した負荷ではないので採用することにしました。

      インストールは、Redhat系をご使用であればyumインストールで使用可能なのですが、
      yumだと肝心のpdfをppmに変換する機能である、「pdftoppm」が含まれてません。

      情報が少なくて、pdftoppmを導入する方法がなかなかわからなかったのですが、
      popplerをyumインストールするのではなく、ソースからインストールすることで解決しました。
      Poppler

      課題としては、全体的に変換に時間がかかるということです。
      pdf変換においても結構時間がかかるのですが、その上にppm変換を挟んでいるのでどうしても短縮が困難です。
      pptの変換サービスとしては有名なところでSlideshareがあると思いますが、
      この変換速度はかなりなものだと思います。

      これに近づけたらと思います。

        はてなブックマーク - プレゼンテーション配信ツール「ZENPRE」のご紹介
        このエントリーをはてなブックマークに追加

        こんにちは。
        最近、これから紹介するサービスの対応に追われ続けている山本です。

        8/3(火)に、Fusicの新サービス「ZENPRE」をOPENしました。
        今回は、そのZENPREのご紹介や特徴について書かせていただきます。

        ZENPREは、スライド資料と動画が同時に配信できるプレゼンテーションツールです。
        Ustreamが身近に使われるようになった昨今、全国で行われるイベントの模様がお気軽に配信・閲覧できるようになりました。
        勉強会やセミナーの様子も配信される機会も増え、主に都心部でしか行われない貴重な勉強会でも遠方にいながらにして擬似的に参加できるようになりました。
        しかし、専用のカメラ機材を使って中継される稀なケースを除き、配信される映像の解像度は低く、スクリーンに映し出された資料の解読が困難なことがなかったでしょうか。

        当サービス「ZENPRE」では、資料と動画を別画面に分けて表示します。そのため資料部分の可読性は一気に向上します。
        また、配信する方のページ操作がそのまま受信する方のページに反映されるため、リアルタイム性が保持されます。
        さらにチャット機能も搭載しておりますので、発表の際の気になった発言もすぐ質問ができ発表者や自分以外の参加者とのコニュニケーションが可能です。

        発表の際に、受信する方が見る画面サンプルを掲載いたします。

        画面は3つの領域に分かれます。
        左側が資料を表示する領域です。この部分が、発表者のページ操作に同期し自動でページが切り替わります。自分で操作することはできません。
        右側上部が動画再生領域です。Ustreamを通した現地の様子が閲覧できます。
        右側下部がチャット領域です。

        これらサービスの利用には、発表者に資料の登録をしてもらう必要があります。
        セミナー等で発表することが決まり、資料の作成も完了したらZENPREに資料を登録してください。
        また、動画を配信するために、UstreamのチャンネルIDも同時に登録しておきます。

        実際に発表の日時になり、自分の番になったらZENPREの配信用画面を会場のスクリーンに映し出します。
        配信用の画面サンプルは以下になります。

        ほぼ受信用の画面と同じですね。
        唯一違うのは、赤色で強調した部分のページ送りボタンが付いていることです。
        「次ページ」ボタンを押すことで、自身の画面のスライドが次ページへ移動するとともに、受信者の画面にも伝わり、次ページが表示されます。
        もちろん「前ページ」ボタンで前ページへ移動し、ページ数の指定もすることができます。
        また、配信用画面には動画は不要というケースもあるため、資料部分のみフルスクリーンで表示することも可能です。

        公開が終了した後は、受信者画面でもページの操作ができるようになり、後々の資料として活用することもできます。

        ページ操作に関しては、この配信用画面から操作する以外にもスマートフォンアプリを利用して行うことができます。
        OPENに合わせて、iPhone用アプリとAndroid用アプリを用意しました。
        どちらのアプリも全く同じ機能を持っているのですが、iPhoneアプリの画面を以下に掲載いたします。

        ページの操作はフリック(画面を指でスライドさせる動作)で行います。
        直感的に、かつ、リモコン感覚でページの操作が可能になります。

        他にも、
        ・新着ニュースの閲覧
        ・過去に配信した資料の閲覧
        がアプリで可能です。

        AppStore、もしくは、AndroidMarketで「ZENPRE」と検索してください。
        無料でダウンロード可能です。

        以上の機能が、すべて無料で利用できます。
        今後、より多くの人に参加してほしい勉強会やセミナーがございましたら、ぜひともZENPREをご活用ください。

        次回は、ZENPREを支えている技術についてご紹介したいと思います。

        ZENPRE
        zenpre.net

        Fusic によるZENPRE紹介
        fusic.co.jp/product/zenpre.html

        ZENPRE on twitter
        twitter.com/ZENPRE