ミラーレス一眼カメラを LAN に接続 ~ Raspberry Pi で作った NAPT ルーター経由

イメージ
先日購入したミラーレス一眼カメラである OLYMPUS OM-D E-M10 III の Wi-Fi 機能を使って、Raspberry Pi 3B+ で作った NAPT ルーター経由で LAN に接続したよ、って話です。思い付きでやってみた感じで、設定も比較的単純な内容なのですが、他に記事になっているようなものを見かけなかったことと、やってみて、思ったように出来たこと、出来なかったことがありますので、まとめてみたいと思います。 プロジェクトの概要 ミラーレス一眼カメラでも、最近の上位機種は、LAN ポートを持っていたりして、直接ネットワークに接続できるものもあるようです。ですが、私の持っているものも含めて、現状の多くのカメラの場合、Wi-Fi 機能があると言っても、大抵は次のような使い方を想定したものであるようです。 カメラ側が Wi-Fi アクセスポイントとして機能するため、そこに接続するスマートフォンなどは、既存のインターネットなどの接続を切断した上で、新たに接続し直す必要があります。カメラがネットワークに組み込まれるわけではなく、Wi-Fi という形を取りながらも、ピア・トゥ・ピアでの接続となります。 屋外で使う前提でいくとこの形がいいのはわからなくもないのですが、既に LAN が導入され、Wi-Fi が飛び交っているような屋内で使おうとすると、手間ばかりかかります。他の PC などでも使おうとした場合、それぞれに接続し直さなきゃいけないし、デスクトップ PC などの場合は、そもそも Wi-Fi インタフェースを持っていない場合も多いし。ノート PC などで、Wi-Fi を使っていたとしても、既存の LAN やインターネットの接続を切ってつなぎ直さなきゃなきゃならないというのは、NAS などへのアクセスもできなくなることを意味するので、たとえば、カメラから取り込んだデータを NAS に保存したい場合などだと、作業に制限が出てしまいます。 というわけで、次の図みたいにできたら、便利なんじゃないかなー、という思い付きです。調査してみたところ、カメラとスマートフォンの間の通信プロトコルは、HTTP だということも判明したので、もしかしたら WebDAV が使えるのではないか、と期待してテストはしてみたのですが、そ

Raspberry Pi をハードディスクから起動してみた - 安直な発想で(笑)


自宅では、6 台目の Raspberry Pi。位置づけは、予備機、兼、テスト機。まぁ、やっと手に入れたお遊びマシーンとも言えます(笑)。
今まで、3 台の Model 3B と 2 台の Model 3B+ を使ってきたわけですが、それぞれ最初から使用目的を定めて導入したものばかりなので、ヘタにいじってトラブると、ネットワークや生活そのものに支障がでる感じで、あまり大胆なことできないし、新たな機能導入にも慎重にならざるを得なかったです。一方で、万が一、ハード的なトラブルが起こった場合のことも心配になってきたので、ストック的な意味も兼ねて、テスト機の導入となりました。


こちらの既製のケースも、初めての購入です。机上で遊び道具になることを、最初から想定していました(笑)。
で、とりあえず、やってみたかったこと … っていうか、浮いたハードディスクドライブがある今しかできないということで、ハードディスクからの起動テストです。ちなみに、このハードディスクドライブは、別途、使用予定が控えてます。ジャンクかなにかで、もっと小容量のお遊び専用ドライブを探してきてもいいんですが、とりあえず、現在、使えるものでということで。


安直な方法その 1 … 配布されているインストールイメージを直接ハードディスクに書き込んでみた


Raspberry Pi の公式サイト(Raspbian ダウンロード)からダウンロードした Raspbian Strech with Desktop のインストールイメージですが、普通は、micro SD カードに書き込みますよね。これ、そのままハードディスクに書き込むだけじゃダメなんだろうか? という、率直な疑問から、とりあえず、やってみました。ハードディスクドライブには、SATA - USB の変換ケーブルを付けてあるので、基本的に、やろうとしていることは、micro SD カードに USB の変換アダプターを付けたのと、同じです。
ただ、普通、これ、PC から書き込むことが多いかと思うのですが、Windows PC の場合、誤操作防止を考えているのかなにか、直接、ハードディスクにインストールイメージを書き込めるアプリケーションソフトが見つからなかった、というか、探すのも面倒くさかったので、別の Raspberry Pi マシーンから dd コマンドを使って書き込みました。

pi@raspberrypi-001:~ $ sudo dd if=<パス>/2018-11-13-raspbian-stretch-full.img of=<出力デバイス>

みたいな感じかな(赤が入力部分)。もちろん、<パス> や <出力デバイス> の部分は、環境によって変わります。dd コマンドの常として、指定を間違えると取り返しのつかないことになることがあるので、行う場合は、ご自身の環境に合わせて、くれぐれもお間違いのないように、ご注意くださいね。

結果 … 起動はしました(構成によっては起動しないケースもあると思われます … 対応方法は後述)。ただ、初回起動時の設定プロセス中に、落ちました。どこで落ちたかと言えば、おそらく、root パーティションの拡張を行っている部分です。落ちた理由は、その部分がハードディスクに対応していないのか、そもそも、ディスク容量最大にすると、MBR 方式のパーティションテーブルでは対応できないって問題なのか、よくわかんないですが、とりあえず、4TB のハードディスクでは、無理があったようです。MBR 方式が対応できる 2TB 以下のハードディスクドライブがあったら、別途試してみたい気もします。
で、パーティションの拡張だけなら、fdisk などを使って、手動でもできるわけですが、どうも、設定プロセスが途中で止まってしまった関係で、いろいろな部分が未設定のままです。日本語の IME とかも、設定されていないままの状態です。地道に設定すれば、使えるとは思うのですが、使えるようにするのが目的でもないので、とりあえず、このやり方は、打ち切りとします。


判明したこと … コールド状態からは起動するがホットからの再起動はできない


これ、おそらく、使っているハードディスクドライブや、SATA - USB 変換ケーブルによって、現象が変わるんじゃないかと思います。構成によっては、どちらも問題なくできることもあると思いますし、場合によっては、どちらも不可能なケースもあるかと思われます。現象を見ると明らかなんですが、単純に、ハードディスクのスピンアップが間に合っていないだけのようです。
これの対応方法としては、Raspberry Pi の公式サイト(Boot flow)にありました。以下の一行を /boot/config.txt に書き加えます。これによって、起動時の USB のタイムアウトが伸びるようです。

program_usb_boot_mode=1

※(2019/07/02 追記・訂正)--------
申し訳ありません、記事を書いているときにコピペする場所を間違えたみたいで、正しくは、下記の内容です。訂正させていただきます。

program_usb_boot_timeout=1

なお、この設定をすると、ターミナルより、下記、赤字のように入力したときに、

pi@raspberrypi-001:~ $vcgencmd otp_dump | grep 66:
66:03009eaa

結果の赤字反転で表した部分(下から 7 桁目)が奇数になるようです(OTP register and bit definitions)。

-------- 追記・訂正、以上。

ただし、これ、起動しなきゃ config.txt も読み込まれないので、意味がないです。これが書き込まれた状態で起動シーケンスを通過することにより、Raspberry Pi のハードウェアの設定が変わるということのようです。私の場合は、コールドスタートはできたので、一度、それで起動した後は、ホットでの再起動もできるようになりました。コールドスタートも不可能の場合は、一度、micro SD からの起動環境を作って、上記内容を micro SD 内の /boot/config.txt に加えて(再)起動を行えばいいのではないかと思います。
ただ、あくまでもタイミングの問題なので、これでどこまで対応できるのかはわからないですが。


安直な方法その 2 … micro SD からハードディスクにまるっとコピー


先のやりかたで、とりあえず、micro SD の内容そのままでもハードディスクから起動できることは確認できたので、だったら、とりあえず、一度、micro SD にごく普通にインストール、設定した上で、その micro SD をまるっとハードディスクにコピーすればいいんじゃないかと。
とりあえず、micro SD に普通にインストールして起動できる環境を作り、上記、config.txt の変更も行い、再起動した上で、USB にハードディスクを接続し、以下のようにしてみました(赤が入力部分)。

pi@raspberrypi-000:~ $ sudo dd if=/dev/mmcblk0 of=<出力デバイス> bs=4096 status=progress
30931685376 bytes (31 GB, 29 GiB) copied, 1394 s, 22.2 MB/s    
7557120+0 レコード入力
7557120+0 レコード出力
30953963520 bytes (31 GB, 29 GiB) copied, 1396.56 s, 22.2 MB/s

コピーが完了したら、シャットダウンし、micro SD を除去した上で、改めて起動します。

みごと成功でした。冒頭の写真です。UnixBench 実行中。
以前の記事にも書いたのですが、Raspberry Pi も、ハードディスク上にある程度の大きさの swap ファイルを設定すると、快適さが格段に向上します。上記方法でハードディスクから起動できるようにすれば、swap ファイルの設定もそのままハードディスクに移ります。簡単、快適なインストール方法はないものかと考えて、こんな方法となりました。


ハードディスクのパーティションについて


お気づきの方も多いとは思いますが、ここまでの状態だと、micro SD カードの内容をまるっとハードディスクにコピーしただけなので、以下の問題が残っています。

  • パーティションテーブルが MBR である(512 バイトセクターの場合、2TB を超える容量が扱えない)。
  • パーティションのサイズが micro SD のままである。

まず、パーティションテーブルの方ですが、一か八か GPT に変更してみたのですが、やっぱり、起動しなくなりました(笑)。現時点だと、起動できるのは、MBR だけのように見受けられます。ただ、ここについては、公式なドキュメントは見つけられていないのと、ハイブリッド MBR なんて方法もあるようなので、本格的に使う場合なら、調査が必要かと思います。

パーティションサイズの方は、「安直な方法その 1」の方で普通に fdisk とresize2fs でできるのは確認してますが、ま、とりあえず 32GB あるんで、テスト環境としては、このままでいいかな、と … ジャンクかなにかの容量の小さいハードディスクドライブが入手できたら、再び、まるっとコピーしようかという気もしているので、現時点で拡張しちゃわない方が都合がいい、っていうのもあります。






コメント

このブログの人気の投稿

ハードディスクへ Raspbian Strech をインストール [続報]

XCY X33J1900 というベアボーン PC … ルーターとして使用中

ハードディスクから Raspbian Buster を起動の予定が … Raspbian Stretch を入れ直す・詳細手順の紹介