Network engineering Advent Calendar 2018の1日目の記事.一年以上前にQiitaでns-3.26の環境構築に関する記事を書いた.この一年で私も少しだけ成長して,Vagrantを使えるようになった1ので,コマンド一発でns-3.27の環境を構築できるよう,Vagrantfileを作成した.これからns3で遊びたいという方のお役に立てれば幸い.

なお,diogomg/vagrant-ns-3-setup - GitHubを大いに参考にさせて頂いた.

前提

ns-3

ns-3は,オープンソースの離散事象ネットワークシミュレータ.前職ではこれを使って独自のプロトコルを実装し,実験結果を論文化する仕事をしていた.基本的にLinux上でしか動かず,また環境構築がやや煩雑なので,一般ユーザにとっては敷居が高い2.ns-3で何ができるかについては,ns-3でTCPの輻輳制御を観察する - Memotaroを参照されたい.

今回は,VirtualBoxとVagrantを使うことで仮想マシン上にns-3.27環境を自動構築できるようにし,敷居を下げたいと考えている.こんな風に書くとns-3の達人のように捉えられてしまうかもしれないが,私はコントリビューターでも何でもなく,ペーペーの素人であることは強調しておきたい.

Virtualbox

Oracle VM VirtualBoxは,言わずと知れたx86仮想化ソフトウェア・パッケージ.ホストOSとして,Windows,Linux,Mac OS X,そしてSolarisに対応している.ホストOS上で実行できるゲストOSとして,Windows,Linux,OpenSolaris,OS/2,そしてOpenBSDに対応している.Webエンジニアがサーバ/クライアントの検証環境として使っていたり,ネットワークエンジニアが検証用ネットワークの構築に使っていたりする.

今回は,ゲストOSとしてUbuntu 16.04を立ち上げ,そこにns-3.27環境を構築する.

Vagrant

Vagrantは仮想環境の設定自動化ツール.Rubyで実装されており,Debian,Windows,Centos,Linux,macOS,Arch Linux上で動作する.Vagrantを使うと,超簡単に仮想マシンを構築できるようになるし,検証環境を統一化できる.詳細はVagrant + VirtualBoxでWindows上に開発環境をサクッと構築する - Qiitaが参考になる.

ns-3のインストールは事前準備が多くとにかく面倒3.Vagrantのシェルスクリプトによるプロビジョニング機能を使い,依存ライブラリのインストール,ns-3のインストール,テストまで一気に自動化する.

事前準備

VirtualBoxVagrantのインストールが必要.逆に言えば,これさえ入っていれば,WindowsでもMacOSでもLinuxでも,ns-3の環境が構築できる.それぞれ,公式ページの指示に従ってインストーラーをダウンロードすれば簡単にインストールできる.

実験

環境構築

私のGitHubレポジトリからVagrantfileを任意のディレクトリにダウンロードして,以下のコマンドを打てば,依存パッケージのインストールからns-3のテストまで全部やってくれる.便利すぎる.私の環境だと,ns-3のテストが完了するまでに1時間ほどかかった.

$ vagrant up

ssh

Vagrantなら,仮想マシンへのSSH接続も簡単.

$ vagrant ssh

ちなみに,デフォルトでvagrantユーザ(パスワードはユーザ名と同じ)でログインする形になる.root化(su)する際にパスワードは不要.

感想

今までセットアップに苦労していたのがバカみたいだ.さっさと使えばよかった.

  1. いくらなんでも今更すぎるが,ご容赦いただきたい. 

  2. 少なくとも私はそうだった. 

  3. bakeが導入されてだいぶマシになったらしいが.