ミラーレス一眼カメラを 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 に Raspbian Strech をクリーンインストール - ハードディスクを接続して swap ファイルを設定 - 快適です

家では、3 台の Raspberry Pi Model 3B が、24 時間、稼働中。3 台とも同時購入したもので、Google Photo を遡って見てみたら、家に届いたのは、2017/02/18 っぽい。このうちの 1 台、DIY でこんな形に組み込んで使っていました。




その後、余ったサウンドカードを載せたりしてますが、2 年もの間、超安定稼働で、トラブルらしいトラブルは全くなし。もちろん、セキュリティの問題もあるので、OS の定期的なアップデートはしてきています。
ただ、セットアップ当時は、OS である Raspbian のバージョンが Jessie だったもので、これを、最新である Strech にバージョンアップしたというお話です。
ちなみに、これ、私が家で一番使う頻度の高い端末です。家には、他に 2 台の Windows パソコンが稼働してますが、圧倒的にこちらを触っている時間が多いです。ニュースサイトを観たり、料理のレシピを調べたりと、大活躍しています。YouTube 動画を含めた Web の閲覧なんかも、日常的には、こちらを使ってます。

悩んだ末、クリーンインストールを選択

安定稼働していたシステムなんで、悩みました。一応、Jessie から上書きでアップグレードをする方法なんかもあるみたいなのですが、上書きアップグレードの手順が複雑な上に、追加でインストールしていたアプリが Strech のデフォルトでの機能アップと被っていることもあり、クリーンインストールを選択しました。ただ、ユーザーデータの方は、写真でも見えるハードディスクの方と、NAS サーバーの方に入れてますので、引き継ぎは問題ないです。問題になるのは、OS 関連の設定の方ですが、新たに確認しながら、最初から全て設定しなおしました。
今回、バージョンアップしようと思い立った理由の 1 つでもあるのですが、2018/11/23 のバージョンでは、Raspbian が 3 タイプに分かれています。以前は、「with Desktop」と「Lite」の 2 種類だったのですが、新たに「with desktop and recommended software」というものが追加されており、今回入れたのは、こちらの「with desktop and recommended software」です。
ちなみに、家の Raspberry Pi Model 3B の残りの 2 台ですが、1 台は、Jessie の「Lite」で、NAS 兼 DNS 兼 DHCP サーバーみたいな(なんか、他にも使っていたかな …・笑)感じで動いています。こちらのアップグレードも考えたいのですが、こちらは、むしろ、ハード的に変更したい部分もあるので、そっちが先かな。もう 1 台は、ミュージックサーバーで、現状では Moode Player を動かしています。どちらも、ディスプレーモニターや、キーボード、マウスといったものがつながっていない、いわゆるヘッドレス運用です。なので、3 台あっても、デスクトップ環境で使っているのは、今回の 1 台のみです。

セットアップ自体はかなり進化している

ダウンロードサイトや手順の説明、その後、micro SD のメディアを作って挿入し、電源を入れると最初に出てくる画面など、英語が多いので、敬遠してしまう方もいるかもしれませんが、セットアップ自体は、かなり進化していました。初回の起動時に、micro SD のパーディションの拡張などを自動でやってくれますし、出てきた画面で、Country に「Japan」を選べば、セットアップが終了したときには、きちんと日本語で表示、入力もできる環境になっていました。英語のままセットアップした後に、別途、日本語環境を構築しなければならなかったのから比べると、だいぶ敷居が下がったように思います。IME として Mozc(Google が作ったもの)がインストールされます。


ただし、Country に Japan を選んだ場合、逆に、Language は Japanese の一択でした。ま、日本語がわかる我々は問題ないわけですが、日本に住む外国人の方は、逆に悩むかもしれませんね。日本人が英語圏以外の国でセットアップしようとしたときも一緒。ま、ロケール自体はセットアップ完了後にも変更できるので、認識できる言語のある Country で設定すればいいようにも思うのですが、セットアップ中にちょっと問題になりそうだと思ったのは、 WiFi の国別設定ですね。有線 LAN で接続の場合なら問題はないと思いますが、今回は WiFi での接続です。実際には、この WiFi の設定自体も、セットアップ中に検索された SSID の中から使うものを選択して、パスワードを入力入力するだけで、とても簡単でした。
ただ、セットアップには、結構な時間がかかります。これは、言語セットのダウンロード、インストールや、パッケージのアップデートまで行うからです。スキップすることもできるみたいなんですが、結局、後からやらなきゃいけないことになるんで、順番にやっていけばいいように思います。ハードが Model 3B なんで、ネットワークの速度が遅いのが影響しているかも知れないですね。最新の Model 3B+ なら、もっと短時間で終わるのでしょうか?

まずは boot/config.txt を設定

このファイル、特に設定を変更しなくても動くことが多いので、触ったことがない方も多いようなんですが、パソコンでいうところの BIOS の設定にあたる部分で、OS 起動以前のハードウェアの設定を書き込みます。最近のパソコンだと UEFI と言って、グラフィカルなユーザーインタフェースで設定できたりしますが、これだと、ディスプレーモニターや、キーボード、マウスを接続しないヘッドレス運用のときに悩みがでます。解決策として、シリアルコンソール(UEFI が一般的になった最近のパソコンでも使えるのでしょうか?)なんていう方法もあるわけですが、接続など、それなりのパーツが必要です。Raspberry Pi の場合は、SSH 経由で書き換えたり、いざとなれば、micro SD を引っこ抜いて、他のマシンから書き換えたりできるので、サーバー用には使いやすい方法です。
config.txt の詳細は、こちらにありますが、私が設定した内容は、以下のものです。

#dtparam=audio=on
dtoverlay=iqaudio-dacplus
disable_overscan=1
hdmi_blanking=1
gpu_mem=256
decode_MPG2=0x********
decode_WVC1=0x********

ちなみに、どうやって編集するか、ですが、デスクトップ版の Raspbian には Leafpad というテキストエディターが含まれているので、これを使うのが簡単です。ターミナルを開いて、

sudo leafpad /boot/config.txt

ってやれば、GUI を使って編集できます。vi エディターのコマンドとか、使ったのは昔のことなんで、もう、忘れてます(笑)。もちろん、nano とかも使えますが。
あと、この /boot ディレクトリは、micro SD の最初のパーティションで、vfat のフォマットになっているので、Windows や Macintosh パソコンからも読み書きできます。ただし、ファイルの文字コードや改行コードは要注意かもしれません。文字コードの方は、多バイト文字が使えるのかどうかとか、よくわからないですが、元からあるファイルは、ASCII 文字のみです。UTF-8 で英数字だけ使っていれば問題ないですが、UTF-16 はダメだと思われるので、Windows アプリで編集する場合は、注意が必要かと思います。改行コードの方ですが、元からあるファイルは UNIX 型の「LF」みたいです。これが、「CR」や「LF+CR」になったら、正常に読み込まれるのかどうかとか、やったことないのでわかりませんが、無難なのは、Raspberry Pi 自身から編集することのように思います。
あと、万が一、編集を間違えてると、立ち上がらなくなってしまうようなことも考えられるので、別の名前にコピーして、バックアップとしておきましょう。Windows パソコンなどから、間違えたファイルを削除し、バックアップをリネームして戻せば、元どおり立ち上がると思います。ただ、今後、他の設定で /etc の中のファイルの編集を間違えるなどしてしまった場合、復旧に ext4 のフォーマットを読み込めるマシンがあると便利なので、備えをしておくのは、悪い考えではないと思います。私の場合は、元のバージョンの Raspbian が入った micro SD を残しておけるので大丈夫でしたが、他に何も無い方は、この時点で micro SD をコピーしておくというのも手かと思います。既存の物でという場合、Android スマホからなら、問題なく編集できるのではないかと思います。
実際の /boot/config.txt には、デフォルトで多くのコメント行があるのですが、変更した部分のみ抜き出しました。それぞれ、説明しましょう。

#dtparam=audio=on

dtoverlay=iqaudio-dacplus

こちらは、追加で装着したサウンドカードを使うよ、って設定です。デフォルトのオーディオインタフェースを有効にしている行をコメントにし、装着したサウンドカードの情報を設定しています。装着していない場合は、変更の必要はありません。

disable_overscan=1

こちらは、ディスプレーモニターに関する設定です。デフォルトだと、CRT モニターなどを使うことを想定しているのか、画面の上下左右に黒い縁のような無表示部分が設定されます。これを無効にして、画面の規定のサイズいっぱいまで表示するようにするための設定です。液晶や OLED のディスプレーモニターを使っている場合は、通常、この設定でいいのではないかと思います。
ちなみに、最初の方の写真の状態のときは、まだ、この設定をしていなかったと思われ、画面の四方に黒い帯が残っていますね。

hdmi_blanking=1

Raspberry Pi の場合、一定時間経過すると、ハード的に画面出力を停止する機能が備わっているのですが、デフォルトの設定だと、画面が消えても HDMI としては ON になったままです。したがって、ディスプレーモニターは省電力モードに入ってくれません。この設定によって、画面が消えたときに、ディスプレーモニターが省電力モードに入ってくれるようになりました。ただ、こちらは、使っているディスプレーモニターの種類によるかもはしれませんね。

gpu_mem=256

内蔵の GPU に 256 Mbytes のメモリを割り当てるという設定です。デフォルトは 64 Mbytes のようです。

decode_MPG2=0x********

decode_WVC1=0x********

「*」の部分は伏せ字です。Raspberry Pi の GPU には、動画のハードウェアデコードを行う機能も備わっているのですが、実は、この機能を使うためのドライバーの部分に有料のコードが含まれているため、ライセンスを購入しないと一部の機能が使えないです。ARM 版 Linux の部分は無料で公開されているわけですが、GPU の機能を使ったデコード部分は、作った人が有償だと言っているようなので、仕方のないことなのかもしれません。ま、サーバーで使うような場合には必要ない機能なので、製品価格に上乗せされるよりは、ありがたいです。2 つ合わせても数百円程度なので、購入すれば問題はない話ではあるのですが、ただ、例によって、購入サイトが英語だったりします。このように、設定も自分でする必要があります。ちょっと敷居を高くしている部分かと思います。
で、このライセンス自体は、以前から購入してあったのですが、今まで、よく使われる「VLC メディアプレイヤー」がこれに対応していなかったんですよね。今回、バージョンアップしたもう 1 つの大きな理由が、この VLC メディアプレイヤーがハードウェアデコードに対応したとの情報でした。ま、この件に関しては、それが理由で OS ごと入れ替える必要があるのかどうか、という問題もあるわけですが、新しい Strech with desktop and recommended software のバージョンでは、この VLC メディアプレイヤーが標準でインストールされるということで、惹かれました。

ハードディスクを接続する

USB メモリとかも同じなんですが、ハードディスクに SATA - USB 変換ケーブルをつないで、Raspberry Pi の USB 端子に接続すれば、/media の下に勝手にマウントされて、とりあえず使うことができます。Windows パソコンなんかだと使えて当たり前なんですが、一昔前の UNIX システムなんかだと、メディアのマウントだのアンマウントだの必要で、それだけで敷居が高くなっていました。いまどきの Linux は、こんな感じで、Windows パソコンと変わらない使い勝手なんですよね。
ただ、このままだと、あくまでもリムーバブルメディアの扱いで、恒久的に接続されたファイルシステムとして使うには、いろいろな面で難があります。なので、手動で設定しています。
実際にハードディスクに入れているのは、/home と /var です。UNIX の流儀的には、それぞれ別のパティションに切ったりするわけですが、それぞれ、どのくらいの大きさにしたらいいのかとか、正直なところ、全く想像がつきません。私がよく UNIX を触っていた頃に比べると、メディアの容量自体が桁違いどころか単位違いくらいの勢いなんで、過去の経験なんか、全く役に立たず(笑)。ま、Raspberry Pi の micro SD カードなんて、/boot 以外は 1 パーティションなわけで、とりあえずは、ボリューム全体、1 パーティションで悪いこともないでしょう。
あと、現状では、micro SD を使わず、直接ハードディスクからブートすることもできるようになったようなのですが、この Raspberry Pi を当初セットアップした時点では、将来の対応としてアナウンスされていただけだったように思います。試してみたい気持ちもありますが、OS 本体や設定ファイルが micro SD の方に入っているというのは、ユーザーデータとの分離という意味では、逆に便利な部分なので、今回はそのまま同じ構成にします。
実際には、ハードディスクのボリューム全体を 1 つの ext4 パーティションにしてフォーマットしてあり、

.
└── local
     ├── home
     │    :
     └── var
          :

のようなディレクトリ階層にしていました。ま、これをそのまま新しいバージョンの OS で使うこともできるかとは思ったのですが、プレインストールされるアプリが変更されているなど、後々にゴミとして残る部分が出る可能性もあったのと、デスクトップなどの細かい部分での変更が、設定で無効になりかねないので、とりあえず、

.
└── local
     ├── @home
     │     :
     └── @var
           :

のようにリネームしておき、前のシステムのバックアップとしました。新たな /home と /var を micro SD の方から移動させ、

.
└── local
     ├── @home
     │     :
     ├── @var
     │     :
     ├── home
     │     :
     └── var
           :

のようなディレクトリ構成にした上で、後から必要なデータのみ、古いディレクトリの方から新しいディレクトリの方へ付け替えることにしました。
micro SD カードの方は、こんな感じで、root 下に空のディレクトリを作ってあります。

/
:
├── home
├── var
└── storage
     └── storage001

で、/etc/fstab の編集です。

proc                                        /proc               proc    defaults            0   0
PARTUUID=********-01                        /boot               vfat    defaults            0   2
PARTUUID=********-02                        /                   ext4    defaults,noatime    0   1
UUID=********-****-****-****-************   /storage/storage001 ext4    defaults,noatime    0   2
/storage/storage001/local/var               /var                none    bind                0   0
/storage/storage001/local/home              /home               none    bind                0   0
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

赤色の部分が、追加で記入した内容になります。「*」は伏せ字です。
ここでまず思ったのが、/boot と / の実体として、PARTUUID というのが使われていることです。Jessie のときは、/dev の中のデバイス名で指定されていました。デバイス名で指定すると、デバイスを追加したときなどにデバイス名が変わってしまうという問題もあるわけですが、micro SD 以外のデバイスからブートした時にも PARTUUID での指定ならそのまま使えるというのがあるかもしれませんね。
接続したハードディスクは UUID による指定で、/storage/storage001 にマウントし、その中にある先ほどのディレクトリを、bind を使って、それぞれ /var と /home にマウントしている形にしています。

swap ファイルの設定

そもそも、ローカルにハードディスクをつないだ一番の目的は、ここでした。ユーザーデータについては、NAS の方に入れられるので、特にローカルにハードディスクを持たなければいけない理由ではなかったです。結論から言ってしまえば、swap ファイルの効果は、絶大です。Jessie の時の比較にはなりますが、体感上の速さが違います。特に日本語入力 IME を使った時のもたつきが、解消されました。メモリ不足でシステムやブラウザが落ちたりすることも、経験していないです。Raspbian with Desktop を使っていて、「重くて使い物にならない」とか「頻繁に落ちる」とか感じている方は、ぜひ、試してみることをおすすめできます。
ま、swap 領域のためだけに 3 TBytes もの容量は必要なかったのですが、このハードディスクは、たまたま他のシステムから外して余っていたもので、テストで接続してみて、効果が絶大だったので、そのまま使い続けているという感じです。もう少し小容量のものが入手できたら、変更してもいいのですが、取り替えたところでこの 3 TBytes の方を使う要件も今のところ出ていないので、そのままって感じですね。
あと、swap 領域をハードディスクではなく、micro SD 内や、あるいは、USB メモリ上に作るとどうなるか、なんですが、かなり前に root 化した Andoroid タブレットに刺した micro SD に swap パティションを設定して使っていたことがあります。同様に効果は絶大だったのですが、やはり、micro SD の書き込み回数の関係で、1 年くらいかな … エラーが頻発するようになってしまいました。ただ、本当にかなり前の古い micro SD ですし、swap ファイルではなく swap パーディションによる設定だったので、パーティションサイズ自体をあまり大きくすることもできず、同じ場所への書き込みが多くなっていた可能性はあると思います。ま、micro SD や USB メモリに作成しても、効果は期待できるということと、どのくらいもつかはわからないにしても、いずれにしても寿命に影響があるということで覚えておけばいいと思います。
それから、SSD の場合なんですが、省電力にはなるのかなぁ、って気はしますが、速度の面では、インタフェースが USB 2.0 なんで、そっちがボトルネックになりますし、いずれにしても、書き込みが多くなると思われるので、もともとの速度が遅くなる上に、寿命にも影響がありそうで、あまりメリットはないような気がします。
ということで、上の /etc/fstab 内のコメントにも書いてある /etc/dphys-swapfile の編集になります。

# /etc/dphys-swapfile - user settings for dphys-swapfile package
# author Neil Franklin, last modification 2010.05.05
# copyright ETH Zuerich Physics Departement
#   use under either modified/non-advertising BSD or GPL license

# this file is sourced with . so full normal sh syntax applies

# the default settings are added as commented out CONF_*=* lines


# where we want the swapfile to be, this is the default
#CONF_SWAPFILE=/var/swap

# set size to absolute value, leaving empty (default) then uses computed value
#   you most likely don't want this, unless you have an special disk situation
#CONF_SWAPSIZE=100
CONF_SWAPSIZE=8192

# set size to computed value, this times RAM size, dynamically adapts,
#   guarantees that there is enough swap without wasting disk space on excess
#CONF_SWAPFACTOR=2

# restrict size (computed and absolute!) to maximally this limit
#   can be set to empty for no limit, but beware of filled partitions!
#   this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
#   but is also sensible on 64bit to prevent filling /var or even / partition
#CONF_MAXSWAP=2048
CONF_MAXSWAP=8192

例によって、赤色の部分が設定を変更した箇所です。8 GBytes に設定しています。ただ、現行の Raspbian は 32 bit カーネルなんで、もしかしたら、2 GByes より多くは使わないのかも知れません。説明コメントに「?」入れられたら、現状、どうなんだかわかんないですよね(笑)。ま、ディスクの使用量に影響を及ぼすようなサイズではないので、大きめにしておきました。

その他いろいろ設定し …

追加のユーザーを作成したり、バックアップしておいた方のディレクトリから Thunderbird(メールクライアント)のデータファイルを移動してきたり、そして、そのアプリを追加でインストールしたり …。ま、必要に応じて、いろいろなことをやらなきゃいけない - いろいろなことができるわけですが、個別のやり方については、別の機会や他の方にゆずることにして、とりあえず、今回は、Raspberry Pi にハードディスクを接続して、こんな設定をすれば、快適に使えるようになりました、ってことで報告させていただきました。
あと、ファイルのコピーなど、具体的な操作の方法ですが、個人的には、あまり決まった方法として覚える必要もないんじゃないかと思っています。コマンドの引数なんて、バージョンが変われば、結構、変わっているし。できるだけ、GUI とか使って、感覚的に作業した方が、今風でしょう。ただ、今回は、Raspberry Pi、特に、最新バージョン OS である Raspbian Strech 特有のことについて趣を置いて書いたため、権限の問題など、UNIX 系のファイルの扱い方には、特に触れることなく話をすすめてしまいました。なんか、いろいろ話を伺うと、Linux に苦手意識を持っている方が結構多いようなんですが、今どきの Linux、使ってみると本当に、Windows や Macintosh と変わらない感覚で使えるんじゃないかと思います。私自身、約 2 年前に Raspberry Pi を手にして、Linux がこんなにも変化していたのに驚いた状況でした。しかも、Windows よりずっと安定しているし。機会があれば、具体的な操作方法についても書いてみたい気はしますが、個人的には、そんな小難しいセットアップの手順を覚えようとして悩んでしまうより、誰かにセットアップしてもらってでもいいので、とりあえず、この小さくてコストパフォーマンスのいいシステムに触れてみることの方を、おすすめです。ファイル操作の方法や管理者権限のことなど、使っているうちにだんだんと身についてくるものだと思っています。
ちなみに、このブログ記事、実際にセットアップが完了した Raspberry Pi Model 3B からブラウザを立ち上げ、Blogger にログインして書いていますが、十分に実用レベルです。各種設定ファイルの実物を表示して、そのまま、ブログ記事にコピペして書きました。

Strech に変わって 1 つだけ悩ましいこと …

バージョンアップ作業自体は、無事に終わって、使い勝手も細かいところで良くなっている部分が見られるものの、悩ませるような変更はないので、違和感なく使えます。それから、VLC メディアプレイヤーのハードウェアデコードも、きちんと動いているようです。
ただ、1 つだけ、気になることと言えば、起動に時間がかかるようになったことでしょうか。これ、単純に Strech をセットアップした時点では、Jessie の時と特に変わった感じはせず、高速に立ち上がります。ハードディスクを単純にマウントしただけ(/storage/storage001 としてだけマウントした状態)なら、同様に高速に立ち上がります。時間がかかるようになったのは、/var をハードディスクの方に移動してからのようなのですが、具体的にどこに時間がかかっているのか、まだ、解明できていないです。エラーらしきものは、出ておらず、単純に待っていれば、正常に立ち上がります。なんか、デバイスのチェックかなにかやっているみたいなのですが、詳細は未解明。ま、幸い、このマシンの場合は、ほぼ 24 時間電源は入りっぱなし。メンテナンスや移動などの関係で必要とならない限り、シャットダウン - 起動という作業を行わないので、あまり気にならない、というか、必要なことならむしろやってもらってもいいわけですが、何をやっているかわからないので、具体的にどんな状況のときに必要となる作業なのかも、未解明です。OS のアップデートなどで、単純に再起動が必要になったような状況でも必要なことなどうか、必要ないケースにスキップして時間の消費を回避する方法があるのか、ないのか、とか、これから調べるという状況です。今後、また、何かわかったら、ご報告させていただきたいと思います。

コメント

このブログの人気の投稿

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

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

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