WZR-900DHP 3台目

BUFFALO WZR-900DHPの3台目を確保、というかメルカリで注文しました。

そもそも何で

理由としては、現在ルータがそこそこ増えてきているものの、弄る用途のモノだけしか無くてWebサーバなどとしてある程度固定で運用できない為です。
あとは、100Base-TXが多く1000Base-T対応機種が少ないこと、MZK-W300NHがコンデンサ妊娠のためお役御免になったことなども理由だったりします。

ちなみにMZK-W300NHの妊娠したコンデンサは1000μF, 6.3V, 105℃のモノで、前にG31マザーのCPU電源回路のコンデンサを交換したときの余りが残っていましたが、USB Type-A搭載機種では無いこと、100Base-TX機種なことなどから結局処分することにしました。
それと、今ある2台のWZR-900DHPは、片方が純正ファームで所謂イーサネットコンバータとして使用、もう片方がLEDE-Projectを導入してWordPress動かしたりEjectしたり弄り倒してます。

何故WZR-900DHPなのか

ハードにそこそこの性能があって、中古価格が安く出回るからです。
参考にWZR-900DHPのスペックを(メインのブログ以来)再掲。

WZR-900DHP 仕様

  • SoC: Broadcom BCM47081A0 (ARM, 800MHz, 1C1T)
  • Flash: Zentel A5U1GA31ATS-BC (128MB)
  • RAM : Samsung K4B2G1646E-BCK0 (256MB)
  • WAN / LAN Speed : 10/100/1000 Mbps
  • WLAN : IEEE802.11 a/b/g/n
  • USB : USB 3.0 Type-A x1

SoCのクロックが高めである程度ゴリゴリ動かせること、RAM容量が多くPHPなどに多めに振れること、Flash容量が多いのでExtRootなどしなくても、Webサーバ系やSambaなどのオプション的なパッケージが大体収まってしまうので、個人的に安定な機種です。

↓WordPressを動かしてた時のメモリ使用状況

ただし、無線はBCM4331を2つ(2.4GHz帯、5GHz帯それぞれで利用)搭載しているのでOpenWrt (LEDE-Project) ではまともに使用できません。まあ、日本国内は電波法の関係でどのみち使えないので問題ないですね。
そして、前述のとおり中古価格が安価で、付属品などの状態にもよるものの最安2,000円台~3,000円台程度で出回ります。

そんな感じで、「同じものいくつもあってもなー」とか思ったものの、結局WZR-900DHPに落ち着きました。
ちなみに、WZR-600DHP2とは無線チップとUSB 2.0か3.0かの違いだけだったりします(600DHP2、2.0なのに端子青くしてるのね…)。今回WZR-900DHPのほうが安かった。なお、WZR-600DHPとWZR-600DHP2は中身別物なので注意。WZR-900DHPとWZR-900DHP2の違いは分かりません。

着弾したらやること

  • 筐体開けてシリアルにピン立てて引き出す
    重要。シリアル直接叩ける安心感。USB – シリアル変換アダプタは、いつも通り秋月で600円の変換基板を使います。
    直立させたときに下に来る面に穴が多数空いているので、そこから適当に外に引き出す予定。
  • 純正ファームバックアップ
    WZR-900DHPは、純正ファームへ戻す方法がバックアップしておくしかない模様なので、抜き出す予定。
    今までは特に戻す必要は無かったものの、無線欲しいときありそうなので。
  • LEDE-Project化
    純正ファームをバックアップしたら、さっくりLEDEを突っ込んでしまいます。CFEのWebページにsysupgradeファームを投げつければOK。
  • Ejectサイト構築
    「除夜のEject」サイトを構築予定。現状WT3020でどこまでやれるか試す予定ではあるものの、SoCとRAMからして厳しそうなのでその場合の代替として。
    Planex VR500でEjectするのもいいんだけど、アレはどちらかというと”逸般の誤家庭”向けルータ…

大体こんな感じのことをやる予定です。
年が明けたら、WordPressか何かで真面目に個人的なサイトを組むか、もしくはnginxなどで要求アドレスによるリクエスト転送などもやってみたいなーと。
ではでは。

家庭用ルータでもEjectしたい!

というわけで、今更ながら11月頭のOSC 2016 Tokyo/Fall行ってきた報告と、そこから着想を得て色々やってみた報告です。
”手順だけ見たい”という方は、しばらくそこに至るまでの顛末なのですっ飛ばしてください。

OSC 2016 Tokyo/Fall

正式名を “OpenSouce Conference”、オープンソースソフトウェア(OSS)についての情報共有、活用事例の紹介などを目的として、全国各地で開催されるイベントです(公式サイト)。東京でも11月5日と6日に開催され、私も一般参加してきました(今更)。

OSCは今回で3回目くらいでしたが、1・2回目はほとんど何もわからないまま参加した感じだったので、中々知らない人に話しかけるのが苦手なのも影響してほとんど何も得られないまま帰宅する結果に。
しかし今回は、1日目に「WordPressをルータで動かす」ことについてWordPressユーザーグループの方に色々お聞きしたり、「OSC一日目の朝に突如お亡くなりになったOpenWrt (LEDE-Project) ビルド鯖(Xubuntu)の対処法」をUbuntu Japanese Teamの方に詳しくお聞きしたりしました。また、午後からの展示ツアーにも参加し、個人や企業ブースを偏りなく回り、色々知見を得ることができました。企画に感謝です…。

meets “Eject”

OSC 1日目にユーザーグループの展示関連を回っている中で一際異様な雰囲気を放っていたのが、”Ejectコマンドユーザー会(公式サイト)”。何やら床に動くものが…
(他の参加者の方のツイート)

自走するCDドライブの破壊力。ユーザー会の方曰く”eject カー”というこれは、1方向のみに回転する車輪を使い、開閉するドライブによってしゃくとり虫に似た要領で進むとのこと。それだけならまだしも、バッテリーを搭載して完全にコードレスにした上、Webサイトから操作もできる(!)という、もはやハードとソフト両面で攻めまくる逸品。
操作用のサイトは公開されていて、来場者もスマホなどから操作して楽しめるようになっていました。

その他にも、Ejectによる金魚の餌やりシステムや鐘(っぽいもの)をつく装置なども紹介されていて、単純な動きでも発想次第で色んなことができるんだなぁ…と。そう思ったところで再度視線が下に向くと…
何かある!!
↓Ejectコマンドユーザー会あっきぃ氏のツイートの画像右下

”Ejectキット5セット配布”これは…

!!
気付いた時には、スマホに指を走らせ”BusyBox eject”と検索、そして手にはEjectキットの入った紙袋が…意識を失うと怖い。
こうして”Eject on 家庭用ルータ”に至りました。
記事長くなったけど、まあいいやこのまま書いてしまおう。

Eject on 家庭用ルータ

さて、このブログでも度々登場するルータ(など)向けLinuxディストリビューション”OpenWrt (LEDE-Project)”、Linux関連のコマンドやツール類がひとまとめになった”BusyBox”というモノを搭載しています。
OpenWrt側のコマンドとしてはEjectを見かけた記憶は無かったものの、もしやBusyBoxにあるのでは…ということで調べたらありました。

lede-busybox_eject

デフォルトではOpenWrtのBusyBoxはejectコマンドを含んでいないので、有効にしたうえで各ルータ用ファームウェアをビルドする必要があります。

用意するもの

  • USB Type-Aポートを搭載し、OpenWrt動作実績のあるルータ

    ドライブに対してEjectコマンドを投げます。当方では、以下のルータを使用しました。

    • BUFFALO WZR-900DHP
    • NEXX WT3020H(またはWT3020F。Flash 8MB版を推奨)
    • Planex VR500
  • CD(またはDVD)ドライブ

    ルータからのコマンドを受け取って開閉します。IDEやSATAのモノを使用。

  • USB – IDE(またはUSB – SATA)変換アダプタ

    ドライブをルータのUSBポートと接続するための変換アダプタで、センチュリーの「裸族の頭(CRAIU2)」など。当方で動作を確認したのはCRAIU2のみですが、それ以外もたぶん使えるはず…
    ドライブのインターフェース(IDE/SATA)に合わせます。

  • OpenWrt (LEDE-Project)ビルド用のLinux環境(またはWSL)

    前述の通り、デフォルトではOpenWrtのBusyBoxはEjectコマンドを含んでおらず、利用できないので自前でビルドします。
    私自身は普段XubuntuにJenkinsを導入して定期的にビルドさせています。また、Windows 10のWSL (Windows Subsystem for Linux) でも、Anniversary Update以降であればビルドが可能です。ただ、WSLの制約からかビルドが少々遅めです。

ルータでEjectするために必要なものは以上です。なお、上記にある私が使用したルータ用にEjectコマンドを含めてビルドしたLEDE-Projectファームは、Jenkinsで公開しています。大体動作確認はしていますが、実機への投入は自己責任で。

ファームウェアのビルド

実際にファームウェアをビルドします。なお、当方ではOpenWrtからフォークした”LEDE-Project”をもとに作業しています。OpenWrtでもやり方はたぶん同じはず。
ビルド環境の構築については、記事が長くなりすぎるのでここでは書きません。OpenWrtのWikiを参考に、各自で構築してください。

  • make menuconfig
    ビルドするファームウェアに含めるパッケージと、Linuxカーネルに関する設定を行います。
    ビルド環境の構築で “make defconfig” まで終わったら、 “make menuconfig” コマンドでこの設定画面を開きます。
  • Ejectを有効にする

    今回メインとなる、BusyBoxのEjectコマンドを有効化します。
    “make menuconfig” の画面で並んでる項目の中から “Base system > busybox” と進みます。デフォルトで拡張設定が無効になっているので “Customize busybox options” にチェックを入れて拡張設定を表示させ、さらに “Miscellaneous Utilities” 以下に “eject” があるので、チェックを入れ有効化します。
    “SCSI support” は必要かわからないけど有効にしておきました。

  • カーネルのサポートを追加する

    Ejectコマンドは有効化したので、今度はOpenWrtのLinuxカーネルにCDドライブとUSBのサポートを追加します。
    menuconfigのトップに戻り、
    “Kernel modules > Block Devices” の “kmod-scsi-cdrom” と
    “Kernel modules > USB Support” の “kmod-usb-storage”, “kmod-usb2”
    にチェックを入れます。以上でCDドライブをOpenWrtのLinuxカーネルでサポートする設定は完了です。

    あとは他に各自必要な設定を済ませてmenuconfigをExitします。デフォルトではWebUIのLuCIが有効になっていないので、入れておくといいかも。
    終了時に変更を保存するか聞かれるので、忘れずに。

  • ビルド開始

    設定が終わったので、ビルドを開始します。
    “make” コマンドのみでもビルドすることは可能ですが、CPUのコア数に合わせて並列ビルドを行うとそこそこ必要時間を短縮できます。
    例:make -j4

    ただ、初回のビルド時は ”ビルドに必要なツール類” も同時にビルドするため、時間が多くかかります。
    ちなみに、デフォルトではビルド中のコンソールに最低限の情報しか出力されないので、何をしてるか眺めたいときは “V=s” オプションを含めると全部の情報を流せます。
    例:make -j4 V=s

  • ビルド完了&ファーム取り出し
    ビルドが終わると、コンソールの流れが止まり、OpenWrtのディレクトリ内の bin ディレクトリのいくつか下に .bin や .trx 、その他拡張子の付いたファームウェアが生成されています。
    ルータの機種名の後に “squashfs-sysupgrade” というモノや “initramfs-uImage” と付いたファームウェアがある(ルータの機種によって変化)ので、自分のルータへのOpenWrtの導入方法に合わせて適切なものを取り出します。

    Windows 10のWSLを使用した場合、WSL側のファイルシステムに保存されているので、上記のディレクトリから “/mnt/c/Users/(Winユーザー名)/Downloads/” などにcpコマンドを使ってビルドしたファームウェアをコピーします。

    例:WZR-900DHP用LEDE-ProjectファームをWindows ユーザー “Tofu” のダウンロードフォルダにコピー

    cp ./bin/targets/bcm53xx/generic/lede-bcm53xx-buffalo-wzr-900dhp-squashfs.trx /mnt/c/Users/Tofu/Downloads/

ファームウェアの導入

ビルドしたファームウェアをルータに投入します。
投入方法は機種ごとに異なるので、ここでは省きます。OpenWrtのWikiForumDD-WRT OpenWrt 適材適所で両方使いたい人向け @ ウィキ、2chのOpenWrt板などを参考にしてください。

注意事項

OpenWrtなどメーカー純正ではないファームウェアをルータに導入した場合、メーカーによる保証は無くなる他、意図しない動作や故障(所謂文鎮化)を引き起こすことがあります。必ず自己責任の下、導入してください。
また、日本国内では電波法などにより電波の取り扱いが厳しく制限されます。これについても自己責任の下、(本記事の主旨はEjectですが)無線LANルータ等は法に抵触しない様使用してください。

Ejectする

ルータにOpenWrt (LEDE-Project)を導入したら、いよいよEjectします。

ドライブの電源を入れた状態でUSB – IDE(またはUSB – SATA)変換アダプタをルータのUSBポートに接続すると、正常に認識されればOpenWrtの “/dev/” 以下に “sr0” というデバイスが現れます。これがCD (DVD)ドライブです。
この “sr0” に対してEjectコマンドを叩きます。
例:

eject /dev/sr0

すると、ドライブからトレイが開きます。
また、引数に “-t” を付けるとトレイが閉まり、”-T” では ”現在の状態と逆の状態”(トレイが開いているならば閉まり、トレイが閉まっているならば開く)にします。

↓NEXX WT3020にEjectさせた様子。動画内で実際にEjectするまでが長いのは後悔してる

以上で家庭用ルータでEjectは完了です。OpenWrt (LEDE-Project)はuhttpdやApache、lighttpdなどのWebサーバを搭載することもできるので、WebサイトからのEjectも実現できます。
なので色々こねくり回してみると面白そうです。Ejectコマンドユーザー会のGitHubレポジトリで公開されている除夜のEject公式サイト)は動作しました。

また、OSCでEjectコマンドユーザー会の展示でEjectコマンドを発行していたのはRaspberryPiでしたが、ルータならNEXX WT3020など数千円程度で入手できるものでもEjectができます。
拡張性はさすがにRaspberryPiには劣るものの、ルータで色々遊んでみるのも良いのでは。

久しぶりに長い記事を書いたので眠いです。おやすみなさい。

無職になりました(半年以上遅れ)

さて、今更ですが無職になりました(なっていました)。
今年3月末をもって、2年と留年1年の計3年を過ごした情報系の専門学校を退学しました。

現在まで

原因は色々とありますが、2年次から徐々に不登校に陥り、一度留年後も改善が見込めなかったため最終的に自分の判断で退学しました。

今後

できることならば、すぐにでも働きたいと考えています。両親に頼り、ただ消費するだけという立場は自分としても非常に嫌で、自分のできることを生かして何かできないか、というふうにいつも考えてはいます。
しかし、何ができるのか、どんな仕事ができるのかということが今一つ自分にもわからず、アルバイトにしても、就職にしても躊躇してしまっているところがあります。また、就職するにしても、今持っている知識だけでやっていけるのか、先に大学など進学してさらに知識をつけてから臨むべきなのか、というところが全く分かりません。

現在は、とりあえずは次の4月に間に合うかはわからないものの、大学への進学を考えている状況です。主にネットワークやサーバ関連を学べたら、と思います。
しかし、前述のとおり就職についても興味はあり、どちらがいいのかわからなくなってきています。

両親の自閉症などへの無理解に対する反発から、就職することに決めました。

仕事探し

どういった分野が自分に合っているのかすらよくわかっていませんが、職を探しています。以下は色々と自分に関しての詳細です。
新卒でもないためどう職探しをすればいいのか全く分からないのと、どこかに登録したりする方法も知らないので、ここに書いておきます。
近々ハローワークにも行ってきます。

持っている資格・技能等

資格

  • 基本情報技術者(実務経験無し)

技能

  • HTML / CSS基礎程度
  • C#触れ込み程度
  • OpenWrt* ビルド環境構築・ビルド
  • OpenWrt* 軽微なソースコード修正等
  • Git clone, fetch, merge, branchなど初歩的なコマンド
  • Webサーバ構築(Microsoft IIS)
  • PC組立(所謂自作PC)

* OpenWrtからフォークされたLEDE-Projectを含む。

今やっていること

  • OpenWrtファームウェアのビルドと修正

    OpenWrt(現在はLEDE-Projectがメイン)の開発状況を追いかけて自分のフォークに取り込みつつ、所有しているルータで何か問題が起きた際は、可能な限りどこに問題があるのかを特定し、できる範囲で修正しています。
    自分では以下の2機種のコードを修正しました。

    • BUFFALO WHR-G300N — ブート中のKernelPanic
    • BUFFALO WZR-900DHP — LED設定不可

    修正したコードは以下で公開しています。

    GitHub : musashino205/lede-source

  • ソフトウェア製作

    C#の学習も兼ねて、Windowsに搭載されているWinSAT.exeを実行し、出力された計測値を読み込んで表示する簡素なソフトウェアを自作しています。まだシステム情報の扱いなどわからないことだらけで、既知の問題を修正できていないなどの問題はあるものの、少しずつ調べながら修正したり、改善したりしています。

    WinSAT Reader

Planex VR500をOpenWrt(LEDE)化して弄ってみた

先日Planex社の「SAKOKU 500(VR500)」を確保したので、それにOpenWrtとLEDEを導入して色々弄りまわしてみました。

pic_vr500_wzr-900dhp

↑筐体を開けた状態のVR500(上)。カバーは家庭用ルータに多いハメ込み式ではなく、スライド式のカバーがネジ止めされているのみなので、開けやすくて嬉しいところ。下は毎度おなじみBUFFALO WZR-900DHP。

VR500のスペックは公式サイトにも掲載されていますが、内部的なものも合わせると大体以下の通り。

VR500 仕様(ざっくり)

  • CPU:MediaTek MT7621A (880MHz, 2C4T)
  • RAM:256MB
  • ROM:SPI Flash 64MB
  • WAN / LAN:10 / 100 / 1000 Mbps
  • USB:2.0 x1, 3.0 x1

VR500は、前述のとおりカバーが開けやすいほか、内部のシリアルがランドだったりスルーホールだけだったり、ではなく、きちんと最初からピンが立っています。今までWT1520などで時々ハンダ付け失敗することもあり、これも嬉しいところ。
早速、シリアルを接続してOpenWrtに書き換えていきます。

ちなみに、OpenWrtへの書き換えに関しては、ファームウェアさえ用意していれば特にシリアルを接続する必要無しに導入できてしまいます。

しかし、今回は後でオリジナルファームにも戻せるように、ということで、基板上のフラッシュメモリに格納されているデータ(mtdblock)を全て書き出し、PC上に保存しました。手順は大体以下の通り。メモは取らなかったので、若干記憶がすっぽ抜けてます。

  • ddコマンドを用いて、/dev/mtdblock0 ~ /dev/mtdblock5 を /tmp などの下にファイルで書き出す

    例:# dd if=/dev/mtdblock0 of=/tmp/vr500_mtd0.bin

  • 「1」で書き出したファイルを、VR500のWebUI提供のため動作しているlighttpdのドキュメントルートに配置する

    例:# cp /tmp/vr500_mtd0.bin /(パス忘れ)/vr500_mtd0.bin
    ドキュメントルートのパスは、psコマンドを実行してlighttpdの引数を見ると分かります。

  • ブラウザでVR500のWebUIにアクセスし、ユーザー認証後に「1」で書き出したファイル名を指定してダウンロード

    例:http://192.168.111.1/vr500_mtd0.bin
    IEだとMIMEが誤判定されることがあったため、Firefoxなど他のブラウザを推奨。

以上でオリジナルファームの保存は完了です。ただ、私は取得したファイルを使用してのオリジナルファームへの戻し方は知らないので(ぇ)、その辺りは詳しい人にお願いします。

ここまで完了したら、今度はOpenWrtファームの導入を行います。作業前に、OpenWrtの2種類のVR500用ファームウェア

  • openwrt-ramips-mt7621-vr500-initramfs-kernel.bin
  • openwrt-ramips-mt7621-vr500-squashfs-sysupgrade.bin

を自分のPC上に用意しておきます。とりあえずOpenWrtを導入してみたい、という方は、srchack氏が公開されているものを使用するのが良いと思います。

  • VR500(オリジナル)のWebUI(管理画面)から更新ページを開き、…vr500-initramfs-kernel.binを選択して更新を実行する

    …vr500-squashfs-sysupgrade.binを選択した場合は、「不正なファイル」というようなエラーが出て弾かれる模様。

  • 「1」の後再起動が行われ、OpenWrtが起動する

    OpenWrtがもういきなり起動してきますが、これはまだFlash内には書き込まれておらず、RAM上でのみ展開され動作しています。そのため、再起動すると全て消えてしまいます。次の「3」にて、Flash上に書き込まれるOpenWrtファームを導入するための、踏み台となるOpenWrtファームです。

  • ブラウザでVR500(OpenWrt)のWebUI(LuCI)にアクセスし、更新ページで …vr500-squashfs-sysupgrade.binを選択し更新を実行する

    Flash内の消去と書き込みが行われ、自動で再起動します。さよならオリジナルファーム、こんにちはOpenWrt。

以上でOpenWrtの導入は完了です。

え、起動しない?文鎮化した…ですか?やらかしました。

後日自分でビルドしたOpenWrtファームウェアを導入した際、ファーム自体に問題がありVR500がブート中にKernelPanicを起こして止まりました。
その際は、ブート中に「TFTP経由でファームウェアを取得してFlashを書き換える」、「Flashから読み込んで起動する(通常起動)」…などの選択肢が4・5秒程度表示されるので、2番のTFTPから取得し書き換えの項目を選択し、TFTPでsysupgradeのファームを送り付けて復旧しました。
ただ、Planexオリジナルのファームウェアでもこの選択肢が表示されるかはわかりません。ごめんなさい。

以上大体の書き換え方(+その他)でした。LEDE-ProjectのVR500用ファームウェアも、おおよそ同じ方法で書き換えができると思います(未検証)。OpenWrtとLEDE-Projectのファームウェアのビルドに関しては、気が向いたらまた別の記事で書きます(いつになることやら)。


ついでに、当方でビルドしたLEDE-Projectのファームウェアも置いておきます。LuCIやFS何種か(exFAT, Ext4, NTFS, vFATなど)、Samba、miniDLNA、WoL、QoS、AdBlock, Statisticsなど色々入っています。また、USB関連もUSB 2.0 / 3.0両方のポートでフラッシュメモリや外付けHDDが扱えるほか、当方で使う関係でRTL8192CUのドライバも導入済みです。とりあえず色々な機能を試してみたい方にお勧め?
ただし、あくまで当方のVR500で動作確認したのみなので、使用は自己責任で。

OpenWrtのページ

さて、GWということで、思い立って大破.netにOpenWrtのページ(というかディレクトリ型サイト)を作りました。今までIISのディレクトリ公開をそのままつかっていて、訪問した方にとってわかりにくくなっていたと思うので。

OpenWrt Index Page – 大破.net

初めてBootstrapを使ってみましたが、ボタンやテーブルなど、使いたい要素の場所で引っ張ってくるだけで整った形にできるのでホントに便利でした。

とりあえず、Linkページ以外は作ってあります。Linkページは途中で力尽きました。そのうち作ります。あと、機種ごとのページに導入方法とかもそのうち書きたいなーという感じに考えてます。

なんだか最近なかなかやる気が起きないんですが、5月病でしょうかね…。