VirtualBox

提供:yonewiki

言語と開発環境へ戻る。

概要

仮想端末のアプリです。Oracleが無償で提供してくれているものです。ありがたく使わさせていただいております。 VM Wareというアプリも有名でして、それと同じようなものです。


Vagrantというツールで、.box形式として仮想端末のスナップショット(ほぼ同じ設定の端末)を共有できるところが特徴です。vagrantはコマンド制御でVirtualBox内の仮想端末の起動・停止・ssh接続を実現できます。


自分はUbuntu12.04というLinux端末にrubyやpythonを入れchefやcookbookあるいはjupter notebookでIPythonを利用してPython2スクリプトを手軽に動かしたり、Rubyによるソーシャルデータアプリケーションの学習。Linuxの動向を知ったり、操作に慣れたりする訓練。Apacheによるwwwサーバやperlスクリプトの勉強をしています。


公式サイト

VitualBox公式ダウンロードサイト


インストール

自身が使っているOS用のインストールアプリを上記の公式サイトからダウンロードして、目的にもよりますが、インストールアプリのDefault設定で[OK]ボタンを押下していくだけのインストール方法で特段の問題はおこらないかと思います。


設定

■パス設定

Windows10の場合は以下パスを環境設定のシステム変数pathに追加します。スタートボタンを右クリックして表示されるコンテクストメニューから[システム(y)]を選択→[システムの詳細設定]→[環境変数]ボタンを押下→システム環境変数からpathの欄を選択して→[編集]ボタンを押下して→一番下の空白に以下パスを記述して→[OK]ボタンをたくさん押下しまくって全てのダイアログウィンドウを閉じる感じです。

  • C:\program file\oracle\VirtualBox\

上記パスはインストールしたディレクトリによって変化しますが規定値でインストールした場合は上記のとおりになると思います。

うまく設定できていれば

VBoxManage --version
コマンド結果
5.1.16r113841

というようなコマンドがコマンドプロンプトから実行できて、インストールしたVirtualBoxのバージョンが確認できます。


■ホスト(Windows10)→ゲスト(VirtualBox Ubuntu12.04)へのネットワーク接続

アダプタのNAT設定といえるポートフォワーディングっていうのは、中から外、つまりはUbuntuからWindows10へのポート設定ということらしく、外から中、外部から内部に接続するにはホストオンリー(Host-Only)アダプタってのをあたらしく作る必要があるということらしい。設定するには

1.ゲストOSの停止した状態でVirtualBoxのコンピュータ一覧から設定したいコンピュータを選択した状態で右クリックして表示されるコンテクストメニューから[設定]を選択します。 2.表示された設定ダイアログから[ネットワーク]のアイコンを選択して、[アダプター2]タブを選択する。[ネットワークアダプタを有効化]のチェックボックスをONにします。割り当て欄の値は[ホストオンリーアダプタ]を選択。高度という項目を展開した所にあるアダプタタイプ欄の値は、適当に[Inter Pro/1000 MT]とかのオーソドックスなのを選択すると良いと思います。これで [OK] で全てを確定する

すると、ホスト側のネットワークアダプタにホストオンリーアダプタが出来上がります。このアダプタを介して、ゲストにネットワークでアクセスできるようになります。


※未解決の問題※

自分はゲストOSに立ち上げたWebサーバのポート8888を使ったアドレスにアクセスしたかったんですけど、80しかアクセスできていません。ホスト側に元から存在するネットワークアダプタのダイアログを開いたところにある共有タブにチェックボックスをOnにしてICS(インターネット接続共有)というのを有効にしたらポート80の接続はできるようになったのですが、8888はダメなんすよね。設定っていうボタンからポート設定できる欄があるので8888を追加してみたけどダメでした。意味がわからん。こんな設定いじったこともないし、しばらく理解できなさそう。VMおそるべし。

→未解決の問題の対処決定:ICSの仕組みを調べてポートを開けるのは、分析解析に時間がかかりそうなので、調べるのはやめてjupyter notebookを80番ポートで動作するように変更することにしました。自分的にはサーバを分ける必要もないのですが、あえてわけておくとしても、もともとのApacheサーバと交互に使えば良いことなのです。なぜなら、VMの中のLinuxでPerlとjupyterの勉強ができればそれでいいのです。VMは動作が鈍いので外からアクセスしたいだけですし、起動するサーバを切り替えるコマンドを発行するのは、簡単だし、切り替え自体もそれほど時間はかからない。作業効率に大した影響がないということです。目的と達成したいことと問題の解決と理想。いろいろなことを天秤にかけて優先するべきことを決めた方が良いです。わからないことを追いかけ続ける必要性は無い。全部を攻略しようとしないのが大事ですね。結局は人が作ったものを使ってるわけですし、よくわからないことを教えてくれる人もいない場合は、このあたりのあきらめは肝心です。ほんとは知りたい。けど、時間がない。いつかわかるといいなという課題として眠らせておくということです。理解できなかった課題リストに追加しておかなくちゃね。


→未解決の問題の対処決定だめでした。:ICSの設定にあるポート指定でインターネットのアクセスに使うポートは増やせているみたいで、制御しているのはjupyterの動作側で8888ポートを外界からの接続を許さないみたいな設定になっているようです。localhostで接続するのがデフォってことですね。なぜならjupyterでは、公開したディレクトリ以下のファイル操作もできるし、そこを起点としたプログラムをWeb上から動作させることもできるため、割かし危ない操作がいっぱいできるからです。利用者の意図するところとは異なる操作を第三者が実行できるというのはまさに危険なわけです。どうやらjupyter設定ファイルで制御できるみたいな匂いがします。もうちょっと試してみます。そんなに自分のPCを狙ってjupyterが乗っ取られる予感はしませんが、パスワードの設定やら、SSL通信を使うような仕組みにしているので、VirualBox内にある仮想マシンのjupyterを外部から動かす設定にしてみたいと思います。確かにMobilePCなのでうっかりFreeWiFiなんかをつかっているときにやられる可能性はあるのかもしれません。いや、外では仮想マシンまで立ち上げませんけどね。それに、MobileWiFiルータを使ってるので、自分のPCのプライベートネットに侵入されること自体も少ないんすけど。まぁ、なんつうか絶えず外で他人の機器に侵入しようと待ち構えている人がいるかもしれないということを気にしないといけないってことなんですね。あんまし危機感をもっていないのですが、やられることはあるんでしょうか。むしろ、こういう当たり前のセキュリティ保護の裏に潜むバグからしか、強烈なVirusってやってこないような気がしています。芸能人とか有名な資産家や企業家になると、狙われそうですが、一般社会人男性として生きている中では、狙われる気がしません。女の人でちょっと美人だとかストーカーのひとりふたりはつく自信のある人は気を付けていただければとは思います。


jupyter_notebook_config.pyの編集については、意外と情報は少なく、暗号化するとか証明書を発行するとかという情報は見つかりましたが、localhost以外で利用するという情報は少ない。一番関係がありそうな設定のc.ConnectionFileMixin.ipという項目で検索しても日本語の情報が一件しかありませんでした。やっぱjupyterを使う人はVirtualBoxを使ってwindowsの中にあるUbuntuのjupyterを使ってやろうという、そういう特殊な人はいないのかもしれませんね。なんだか、この広い宇宙の中で一人だけという、宇宙人👽になった気分です。condaつまりはanaconda(minicondaもあるらしい)のインストールもしようかなとは思っていますが、もろもろ解決してからですね。condaはデータサイエンスに特化したプラットフォームとなっているpythonと思えば良いそうな。これにはRやscalaといった統計ツールも含まれているそうです。道のりは遠い。だって、そもそもはソーシャルデータのデータマイニングの勉強をしようかなぁっていうのがとっかかりだったわけで、何やってんだオレ的な。メンドクサクなってきて1週間にちょこっと問題解決方法や、その手順を考えてみて実行してみるという探り探りなあほなことをちまちまとやっているという。よくわかりもしないくせに、ややこしい方法でjupyterを動かし始めた自分。遠回り好きだなぁオレ♪。無論すでに、VirtualBox内のブラウザでは、jupyterは使えているわけで、このカクカクな画面を使ってjupyterの勉強を進めた方が目的は達成できたような気もする。フフフ。ここまで遠回りしたのだ。あきらめずに頑張ってみようかな。っていつまでかかんねんオレw。こんなに時間かかるとは思わなんだ。あなこんだ。そうなんだ。なんなんだ。あなこんだって大蛇のアレですよね。なんでこんな名前なんだろ。condaは有名なのかな。anacondaっていったらみんなわかるん?今どきの統計学者はanacondaあたりまえなん。今回、RやらMaxima以来のデータサイエンスツールっていうかプラットフォームの登場に驚きです。ipythonやらjupyterも有名なん?どれくらいの人が知ってるんだろう。気になる。なんで、みんな教えてくれなかったんだろ。誰一人として教えてくれなかったけどなぁ。どういう系統の学問を先行している人の誰がこういうの詳しいんだろね。これを開発している知的集団もおそるべしだよな。


→未解決の問題は結局、解決しました。:一気にいろいろな設定を変更したので何が決め手になっているかまでは掴んでいませんが解決しました。ネットで検索した情報ではc.ConnectionFileMixin.ipに関する設定の必要性を明記した記事を見つけられませんでしたが、自分はこれにゲストOSに付与した固定のIPアドレス(つまりはホストオンリーアダプタで設定したIP)を設定したところ、ホストのWindows10のブラウザから、ゲストのubuntu12.04のjupyter notebookにアクセスできるようになったと感じています。他にも以下のような設定をしていますので、これらの設定も関係している可能性はあります。動作するようになった要因の絞り込み確認は、暇があったら確認してみようと思います。


その他のjupyter_notebook_config.pyの設定
  • c.NotebookApp.ipは0.0.0.0を設定。これは接続の制限をしないという意味。これとc.ConnectionFileMixin.ipを設定していないときは動かなかったのは確実。
  • c.ConnectionFileMixin.(control_port/hb_port/iopub_port/shell_port/stdin_port)の5項目の利用ポートをrandomではなく固定化。例えば18880~18884までの5つをそれぞれに割り振るとかです。予約されていないport番号で好きな数字使ってください。予約されているport番号については、自分で調べてみてね。


その他の設定
  • 上記で追加で設定したportをVitualBoxのゲストOSのネットワーク設定アダプタ1のNATに追加。8888と302と404も追加したよ。302と404がどうも使われているっぽいという解析結果より。あとHTTPの80とSSLのポートですね。関係ないかもですね。無駄にportを開きすぎてるんかな。で、ホスト側の通常使っているネットワークアダプタのICSの設定つまりプロパティを開いたときにある共有のタブから開く設定のとこのポートにも追加したよ。
  • 腕でもちょっと触れましたがSSLの設定をしましたkeyファイルとpemファイルのパス設定もしたなぁ。c.NotebookApp.certfileとc.NotebookApp.keyfileっすね。c.NotebookApp.passwordにもですよね。
  • c.NotebookApp.portはデフォだと。8888だよね。


ま、いろいろ設定した結果できるようになったので、良かったよ。あとはゲストOS起動時にjupyter notebookが起動するように設定しようかなとは思ってますが、jupyter notebook --ip=0.0.0.0って起動するのは、面倒でもないし、滅多には使わないので、その都度、手動で起動すればいいかなとは思ったりもします。


SSL認証対応にしてEdgeでjupyter notebookを開いたサンプル

 

言語と開発環境へ戻る。