Raspberry piをNAS兼音楽プレイヤーにする(NAS編)

OpenVPN サーバのインストールに続いて、Raspberry Pi サーバ化の第2弾です。外付け HDD を使って、NAS機能をもたせ、その中の音楽ファイルを再生するプレイヤーに仕立てます。

Raspberry Pi2 を使った場合、100Base の時点で NAS の性能としては期待できません(最大でも10MB/s程度)。もっとアクセス速度が欲しい場合は Raspberry Pi4 が良いでしょう。USB3.0、GbE 対応と NAS に必要となるバス速度が桁違いに早くなっています。

ただ、音楽データを置いたり、写真データ、バックアップデータなど容量がかさばるけど、頻繁にアクセスしないデータ置き場であれば Pi2 でも十分です。

構想

NASとしてのプロトコルは Windows からアクセスすることを考慮して SMB サーバを立てることにします。samba による SMB サーバ構築は Linux では昔から実施されている枯れた技術ですね。

音楽プレイヤーとしては今回は Music Player Daemon(mpd) を使います。サーバ/クライアント構成の音楽プレイヤーで、Raspberry Pi にサーバを立ち上げ、スマホやPCのクライアントから音楽を再生できるようにします。

音質にこだわった方は Rapsberry Pi に I2S 接続のDACを繋げたり、USB DAC を接続したりして高音質なプレイヤーを作り上げていたりしますが、今回はRaspberry Piのアナログオーディオ出力をそのまま使います。今回の私の目的はリビングに据え置きの安物スピーカーでFMラジオ的に音楽を鳴らすことなので、そもそもあまり音にこだわる意味がない環境です。

図にすると以下のような感じです。 …続きを読む

Raspberry Pi2 のVPNサーバの実力は?

先日の記事で Raspberry Pi2 を自分専用 OpenVPN サーバにしました。

Raspberry Pi2 というと今ではそれほど性能は高くないので VPN サーバとして実用的な速度が出るのかが気になるところです。

今回、結構速いWiFiスポットがあったので VPN サーバの性能を測定してみました。

結果から言うと十分実用的なスループットが得られました。

 

まずは自宅の環境を説明します。自宅にはマンションタイプの光回線を引いていて、幸運にもマンションまでは 1Gbps で接続されているそうです。

自宅のルータに有線で接続した時のスループットが以下です。

スピードテストはUSENのインターネット回線スピードテストを使いました。

自宅のインターネット回線のスループット(有線LAN接続時)

…続きを読む

raspberry piで自宅VPN環境を構築(openvpn編)

買ってから今まで有効利用されずに家に転がっていた Raspberry pi2 を VPN サーバに仕立てあげてみました。非力な Pi2 ですが、なんとか実用できるレベルで使えています。

今ではコロナの影響もあって外でPC作業をすることはほとんどなくなりましたが、それ以前は気分転換にカフェや漫画喫茶でPC作業をすることもありました。無料のWiFiも増えてきましたし、ワイヤレスゲートを契約しているので、ある程度の場所ではWiFiに困らなくなりました。

ただ、やはりセキュリティ的にはちょっと安心できない気がするので、しばらくは無料の VPN Gate を使っていました。回線速度も結構速く、公衆無線LANの盗聴防止という意味では十分でした。VPNさえ繋いでしまえば、WPAなどの暗号化がされていないオープンなAPでも安心です。

とはいえ、VPN Gate も他人の家の回線を使っているという点では不安はあるので、自宅でもVPNサーバを立ち上げることにしました。

そんな VPN サーバを Raspberry Pi にインストールするまでを、忘れたときのために一からメモしていこうと思います。VPN関係なく Raspberry Pi をサーバに仕立てる共通的な作業も書いたので長くなってしまいました・・

…続きを読む

格安SPI/I2C ReaderをLinuxで使う

仕事で SPI Flash の読み書きが必要になって、個人的にもSPI Flashのライターが欲しいなと思っていたので、色々と探してみたらAmazonで格安のSPI Flash / I2C リーダライタ を発見。

買ったときの値段は忘れてしまったけど、現在の価格は送料込みでたったの 325円 !!
怪しいくらい安い。でもこのくらいなら失敗しても痛くないので買ってみた。
中国からの発送で2週間位かかったと思う。

見た目はこんな感じ。写真は撮ってないけど他にもSOP-DIPのピッチ変換基板が付いてきた。

こういうDIPソケットってめちゃくちゃ高かった気がするから、貧相な安物だろうと思っていたら、ちゃんとTEXTOOLだった。すごいな。この値段っておかしくないか?

裏面はこんな感じ。

裏面のシルクのように、ソケットの位置でSPIフラッシュとI2CのEEPROMを使い分けるようになっている。TX, RXもあり、USBシリアルとしても使えるらしい。

Windows版のプログラムは以下からダウンロードできるみたい。おそらくここがオフィシャル?のツールだと思う。

英語ページよりも中国語ページのほうが内容が充実しているので、中国語ページをgoogle翻訳したものを見るといいかも。

ただ、上記でダウンロードできるツールは、いくつかのアンチウィルスソフトで「トロイの木馬」と検出されるらしい。誤検知らしいんだけど、こういう前例があると会社では使えないよね。

色々探してみると、Linux版のツールも見つかった。

SPI Flashライタツール

どちらも CLI のツール。flashromの方は ubuntu のリポジトリにも入っている。

flashromの方が対応しているFlashデバイスが多く、SFDP にも対応しているみたいなので、対応リストに入っていないFlashでも使える可能性は高い。基本的にはこちらを使っていれば問題はないと思う。

ただ、どちらのツールも4byteアドレスには対応していないので、16MBまでのFlashしか読み書きできない。
また、クロックがそれほど速くないせいか、大容量のFlashだと読み書きに結構時間がかかるようだ。

I2C EEPROMライタツール

Linux用で見つけられた唯一のツール。

24c32 と 24c64 にのみ対応している?のかな?
違う容量のEEPROMの場合はソースの修正が必要になるかも。

パーツボックスに転がっていた 24LC64 は問題なく Read/Writer/Erase できていそうだった。
24LC64 (8kB) で Read が 0.3 秒、 Erase が 3.3 秒、 Write も 3.3 秒だった。

USB I2C kernel driver

kernelドライバとして実装されているので、kernelが持っているI2Cデバイスのドライバ(温度センサやタッチパネルとか)が使える。

これは試してみてはいない。

USBシリアル kernel driver

USBシリアルのドライバとしてはすでにメインラインに取り込まれている。ubuntuでも使えるかも。

シリアルとSPI Flashライタツールを同時に使うことはできるのかなぁ。
kernelドライバとlibusbで同時に1つのデバイスを操作できるのだろうか。

 

軽く使ってみた感じでは、CLIであればLinuxでもまぁまぁ使えることがわかった。値段の割にはちゃんと使えるので、ライターが欲しい人にはいいかもしれない。

でも裸だと雑に扱えないからケースがほしいなぁ。アクリルで作ってみようかな。

DEBUG HACKS Conference 2009 に参加しました

久しぶりのブログです。今回は zaurus とは関係ないですが。。。

昨日開催された Debug Hacks の発売記念イベント Debug Hacks Conference 2009 に参加してきました。

参加前は本を買うかどうかは立ち読みしてから決めようかと思っていたんですが(^^;)、会場の即売所で買ってしまいました。

オライリーの紙袋 Debug Hacks Tシャツ

会場で本を買ったら DEBUG HACKS Tシャツがもらえました。ネタ以外では着れないですが・・・。
本を入れてくれたオライリーの紙袋がCoolです。

Conference の内容は詳細に書かれている方々がいらっしゃると思うし、動画がいずれニコニコ動画等にアップされると思うので、個人的にためになった部分を。

GDBでリスト表示

まず、gdb のユーザ定義コマンドによるリストの表示。構造体内のnext を辿って最後まで表示してくれるというもの。ユーザ定義コマンド自体は知ってたけど、面倒そうで使ったことなかったんですが、 こういう使い方が出きるなら便利ですね。

コードはメモってないので書けませんが、ユーザ定義コマンド(仮に list_print とする)で1つの構造体を表示するようなコマンドを作っておき、別のユーザ定義コマンドで next を辿って list_print を呼び出すというもの。(説明が下手ですな)

たしかに、ユーザ定義コマンドを作るのに手間がかかりますが、何度も何度もリストを見なければいけない場合には使えそうです。

今までは、

(gdb) p *list_head->next->next->next->next->next->next->next

とか普通に打ってました (汗)

Yuguiさんの発表

私は Ruby は触ったことがないこともあり、失礼ながら Yugui さんを始めて知りました。

まず、プレゼンうまいなーと。スライドの作りも個性的で、話の流れもわかりやすく、ユーモアもあり、とても印象に残りました。

印象に残ったのは、Ruby や Rails ではデバッグであまり苦労していないということ。言語設計やソフト設計が厄介なバグを混入しにくくしているんだなと感心しました。

DbC (Design by Contruct) や BDD (Behavior Driven Development) といった、軽微なバグを初期段階で検出できて、バグを混入しにくい作り方が、地味そうに思えるも非常に有効だと分かりました。

体験談として、DbC を適用して assert 入れまくったらバグがボロボロ出てきて、全て退治したらバグが1つしか残らなかったとおっしゃってました。1つのスキームで数百、数千単位のバグを1つにまで減らせたというのは驚きです。

こういう理論って確かにそうだけど、実際開発には適用が難しくない?とか、本当に手間に対する効果があるの?みたいなことを考えてしまうのですが、バリバリ開発しているハッカーに言われると非常に説得力があります。

いま仕事で開発してるソフトに DbC に倣って assert 入れまくってみようかな。結果がちょっと怖いですが (^^;

サインもらいました

最後に著者の方々にサインをもらってきました。

まだ本は読んでないですが、なかなか勉強になる Conference でした。