VirtualBox UbuntuにNervesをインストールしてみる

軽~い乗りで…

何故か福岡界隈で流行っているElixir。その組込み版/IOT版のNervesを、軽~い乗りでVirtualBox下のUbuntuにインストールしてみようと始めたが…その備忘録(涙)

超個人的な難所

いきなり個人的な難所の話である(汗)

Nervesのビルドツールのインストールは、個人的には3度目の作業なので予定通りスイスイ。。 が、想定内とは言え、VirtualBoxに周辺デバイスを繋ぐ設定で躓き転びまくった(>_<)。VirtualBoxウィザードにとっては何でもないissueなんだろうなぁ。残念ながら、こちとらVirtualBox初心者でい。

Nervesは、今の所 Raspberry PiシリーズとBeagleBoneシリーズのボードと共に遊べる。手元にレトロな Raspberry Pi Bが転がっていたので、これを使うことにしたのだが…

  1. Pi Bのシステムとして SDカードにNervesを焼く必要がある
  2. Pi BとホストPCを繋いで遊ぶために、ホストPC内臓の有線LANアダプタを使いたい[*1]

↑これってVirtualBoxにどう設定すれば良いのよ(- -;)

[*1] "WifiでHome内LANに参加すれば良いじゃないか"と言う親切なご意見は、我が家の劣悪な無線環境ならびに適当な無線LANドングルが無いと言うことで却下である

VirtualBoxゲストOSの基本設定

VirtualBoxデフォールトの設定のままでゲストOSを使うと、あまりにもレスポンスが遅い。「おや、僕の(あたしの)PCは、仮想マシンを動かすにはパワー不足なのね。買い換えなきゃ」と間違った納得をする前に[*2]、VirtualBoxゲストOSのシステム/ディスプレイの設定をチューニングすべしd( ̄▽ ̄)

  1. Oracle VM VirtualBox マネージャー]でゲストOSをマウス選択。
  2. 右クリックでコンテキストメニューから[設定]を選び、設定ダイアログを開く。
  3. [システム]の[マザーボード]タブでメイメモリーの容量(2GBぐらい)、[プロセッサー]タブでプロセッサー数(2つぐらい)を、
  4. [ディスプレイ]の[スクリーン]タブでビデオメモリー(128MBいっちゃえ)を好みにチューニングしよう。

つまり、リッチなPCではより贅沢に、プアーなPCでは我慢できる所まで贅肉を落としてと言うことねd(^^)

[*2]久しぶりにVirtualBoxにゲストOSをインストールしたので、危うく間違った納得をするところだった(^^;)

f:id:MrShoz:20190713122436p:plain f:id:MrShoz:20190713122737p:plain f:id:MrShoz:20190713122816p:plain

Nervesのビルドツールをインストール

ここはサラッと…いやホント、一点を除き嵌る所がない。基本的に、Nerves Projectに掲載のInstallationに沿って作業を進めればオッケー。

あっ、その前に。Nervesのビルドツールはasdf-vmと言うCLI Version Managementユーティリティ(?)の中にインストールする。そうその通り、裸のUbuntuへのErlangやらElixirやらのインストールは不要…より正確には無駄( ̄▽ ̄;)[*3]

[*3]つい最近までそのことに気付かなかった、わ・た・く・し orz

さぁ、VirtualBoxUbuntuを起動して、Nervesをインストールしよう。デスクトップで端末を一つ開き、後はひたすら下のコマンドを実行するのだ。

> sudo apt install build-essential automake autoconf git squashfs-tools ssh-askpass

> sudo apt install libssl-dev libncurses5-dev bc m4 unzip cmake python

おっと、fwupCLIでサクッとインストールできないので、debパッケージをダウンロードしてからインストールすることになる

> git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.7.1

> echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc 
> echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc
> source ~/.bashrc

↑ここが唯一の落とし穴(^_-)。

Nerves-Installationでは、asdfの起動スクリプトを .bash_profileに追記せよとなっているが、Ubuntuは .bash_profileを無視しているのだ。.bash_profileに追記した場合は、新たな端末を開く度に、「mixぅ、そんなの知らねぇよ」と言われてしまう。小まめな人は、毎回sourceほにゃららを実行するかも知れないが、あたしゃそんなのまっぴら御免

で、正解は .bashrcに追記。なにせ asdf-vm本家のInstallationにはそう書いてある。きっと、やさしく書いてある2次、3次...n次情報ばかりに頼って、1次情報を調べようとしない我々への戒めだなd( ̄▽ ̄)

> asdf plugin-add erlang
> asdf plugin-add elixir

> asdf install erlang 22.0.4
> asdf install elixir 1.9.0-otp-22
> asdf global erlang 22.0.4
> asdf global elixir 1.9.0-otp-22

> mix local.hex
> mix local.rebar

> mix archive.install hex nerves_bootstrap

これでNervesのビルドツールのインストールは完了。おつかれさまぁ~(^^)/

ん? いつの間にかNervesのバージョンがv1.5.0(erlang 22.0.4/elixir 1.9.0-otp-22?)に上がってる!!

難所を攻略する

わたくし的には、ここからが本題(汗)

難所1. VirtualBoxゲストOSからSDカードリーダーを使える様にするにはどうすりゃいいの?

ノートPCにはSDカードリーダーが付いている。故に、きっとこれを使うんだ、そうに違いない、間違いない、と思うのは人情である。

で、あれこれ調べて、VirtualBox付属のVBoxManageと言うツールを使って SDドライブのvmdkを作れば、ゲストOSにHDDとしてマウントすることが出来るということを突き止めた。早速、手順書通りにやってみたが…何だかおかしい。SDカードをリーダーから外すと2度と認識しなくなる??? そう、察しの良い人は気付いたと思うが、どうやらvmdkは固定ドライブを追加する為のものの様だ(間違ってるかも汗)。頻繁にSDカードを抜き差しする今回の用途には使えないらしい(T_T)

結局、見つけた対策は、USBポートに外付けでSDカードリーダを繋ぐことだった(- -;)
素のVirtualBoxではUSB 1.1しか扱えないので、まず最初にVirtualBox Extension Packをインストールしておく。バージョンを間違えないよーに。

  1. SDカードをセットしたSDカードリーダーをUSBポートに挿入する
  2. ゲストOSの設定から[USB]を選び、使用するUSBバージョン(2.0以上)のラジオボタンをチェックする
  3. USBデバイスフィルター・ペインの右にあるボタンのうち、フィルター追加のボタンを押す
  4. 認識済みのデバイスの一覧が表示されるので、SDカードらしきものを選択して登録する
  5. ゲストOSを起動し、メニューの[デバイス][USB]からSDカードに選択チェックを入れる

f:id:MrShoz:20190713145718p:plain f:id:MrShoz:20190713150656p:plain

SDカードをリーダーに挿入すると、ゲストOSが自動的に認識/マウントする上に、mix burnもちゃんとSDカード見つけてくれる。賢いなぁ(≧▽≦)

難所2. PCのWifiはそのままで、もう一つの有線LANを Pi Bとクロスケーブルで繋ぎ、ローカルなネットワークにしたいんだけど?

そう、いたって個人的でわがままな要求である。こんなクライアントは、「システムは出来るだけシンプルにした方が、初期費用もランニング・コストも安くなるので、Wifiに統一しましょう」とやんわりと誘導する対象である。だが今回は不幸なことに、クライアントとデベロッパーが同一人物なのである。行く所まで行ってしまうのだ( ̄▽ ̄)v

ネットワーク系は造語(?)だらけで苦手なのだが…
VirtualBoxでは、ゲストOSは仮想ネットワークアダプターを経由して、ホストOSの実ネットワークアダプターに繋がっているらしい。デフォールトでは、仮想アダプターが一つ登録されており、これがNATによって実アダプターに繋がっている様だ。と言うことは、もう一つ仮想アダプタを用意し、有線LANアダプタに専属的に繋いでしまえば良いではないか…解決。楽勝(^^)
とはいかなかった(汗)。方向性はあっていたものの、NAT/NATネットワーク/ブリッジアダプター/内部ネットワーク/ホストオンリーアダプター/汎用ドライバーと、苦手とする造語らの攻撃。名前からは何者かよく分からない選択子が待ち構えていた。負けてなるものかと歯を食いしばって、いろいろ調べたり試行錯誤したりの結果、どうやらブリッジアダプターが今回の要求(わがまま)を満たすようだとわかった。わがままの勝利!!!

f:id:MrShoz:20190713155342p:plain


こうしてみると、Nervesのインストールと言うよりも、VirtualBoxと戯れていると言う結果となった。「なんだかなぁ」と思う今の気持ちを忘れないように、この備忘録にしたためておこう(^_-)

労多くして…