ご無沙汰してます。
Markdownの素晴らしさに触れてしまって、はてなブログが良いらしいという話を聞いたので、なにかと編集関係に不満があるBloggerからお引っ越しします。
新しいブログでもよろしくお願いします。
http://li-feel.hatenablog.com/
2016年10月4日火曜日
2016年6月10日金曜日
Haskellのメモ
[備忘録]Trema & Open vSwitch をOpenFlowを使った実験のためにインストールするためのメモ
これなに?
りとるすです。ご無沙汰してます。OpenFlowのテスト環境のメモが発掘されてきたので、いろいろあったことだしメモしておきます。現在もこれで動くのかどうかは確認してませんが、たぶんバージョンが同じなら大丈夫なんじゃないですかね(適当)
作成する環境
- Virtualbox
- Ubuntu Server 14.04 LTS
- Trema 0.4.7
- Ruby 2.0.0-p643( with RVM )
- Open vSwitch 2.0.2
TremaとRubyのバージョンについて
ドキュメント量と、Trema側のソースコードが素直(ただしruby.h+C)なのでどうにかなりやすい
Rubyのバージョンは2.0.0-p647が、新しいモノの中でも一番安定して動くらしいため。
また、0.4.7は書籍のコードがまるっとそのまま使える最終版。それ以降はフォルダ構成が変わってるなどが原因でうまく動かない。ちなみに、Google検索に引っかかる一番新しいバージョンの情報は0.6.0。インストールのことだけ。
なお、Open vSwitchはVirtual networkingのときも必要(になることがある。)なので、とりあえず同じやつに入れておくことをおすすめする。
Ubuntu Server 14.04にVBoxAdditionのインストール
スペースを使ってSSH Serverだけ入るようにしてinstall
ネットワークアダプタの1つをNATにしておき、ポートフォワーディングでお好みのポートに「22(ssh)」を飛ばす
初期は思いっきり文字化けするので、ロケール情報を.bashrcに書いておく。
----
case $TERM in
linux)LANG=C ;;
*)LANG=ja_JP.UTF-8 ;;
esac
----
$ sudo
apt-get install build-essential module-assistant
$ sudo apt-get install xserver-xorg
xserver-xorg-core
ここで、CDドライブにGuest AdditionのディスクをGUI操作で挿入。
その後にマウント。
$ sudo mount /dev/cdrom /mnt
/mntに、VBoxAddition的なフォルダができるので、そのフォルダのlinuxと書かれたスクリプトを実行。
モジュールのコンパイルが始まる。
終了後、仮想マシンを再起動。
これで共有フォルダが使える。
rootはともかく、メインユーザーがマウントしたフォルダにアクセスできないから
$
sudo gpasswd -a takahiro vboxsf
として、権限をメインユーザーに与えておく。
Ruby(RVM)のインストール
$ curl -L https://get.rvm.io | bash -s stable
エラー出て死ぬので、gpgから始まるエラーではかれたコマンドを実行後、再度実行。このときSSHでないと死ぬほど面倒。
SSH設定しないなら、リダイレクトなどで取り出し。
.bashrcに追記。
-----
source
$HOME/.rvm/scripts/rvm
-----
その後、
source ~/.bashrc
で再読込。
$ rvm
requirements
すると、必要なモノを勝手にapt-getしてくれる。勝手にsudoする。
$ rvm
list known
すると、インストールできるrubyが一覧で出てくる。
2.0.0-p647あることが確認できるので、確認してから、
$ rvm
install 2.0.0-p643
すると、rubyが勝手にコンパイル始まって、インストールできる。
もちろんパスも前述のsourceさえ設定していれば勝手に通る。
Trema 0.4.7のインストール
必要なパッケージをapt-get
$ sudo apt-get install gcc make libpcap-dev libsqlite3-dev git libssl-dev pkg-config glib-2.0
バージョン指定のgemsであっさり入ってしまう。
$ gem
install trema -v 0.4.7
以上。
trema内蔵の仮想ネットワークもこの時点で使用できるようになる。
仮想環境上にOpenvswitchを設定
OpenvSwitch自体は実際あっさり入ってしまう。
$ apt-get
install openvswitch-switch
Ubuntu 14.04であれば、勝手に2.0.1が入る。
今回の環境でのネットワークの接続は次の通り。Virtualbox側で設定。
advexp_vnet_sw (OpenvswitchとTremaが動くマシン)
NIC1:NAT(SSH操作用)
NIC2:Host-only adapter(ホスト-ゲストマシン間)
NIC3:内部ネットワーク[internalA]
NIC4:内部ネットワーク[internalB]
advexp_vnet_srv (コンテンツを置いているサーバ)
NIC1:NAT(SSH操作用)
NIC2:内部ネットワーク[internalA]
内部ネットワークと名前はついているが、トンネル的な使い方をする。同じ名前をつけた内部ネットワークでマシン同士をつないであげればよい。つまり、マシンを増やすときはinternalBを設定してつないであげれば良い。
両方のマシンとも、
$ sudo vi
/etc/network/interfaces
で、NICを認識させる設定を書く。(Ubuntuは自動でNIC認識しない)
とりあえずサーバ(advexp-vnet-srv)に設定していく。
@advexp-vnet-srv
-----
(追記する)
auto eth1
iface eth0 inet static
address 192.168.56.11
network 192.168.56.0
netmask 255.255.255.0
-----
設定し終えたら、
$ sudo
/etc/init.d/networking restart
するか、
$ sudo
shutdown -r now
で再起動。
$
ifconfig -a
で、NICの状態を確認可能。GUIで設定されているMACアドレスと対応がとれてるか確認しておしまい。
ハマるポイント
もし、host-only
networkを使いたいときに、gatewayを書いてしまうとうまく動かない可能性がubuntu debianでは非常に多い。CentOSは大丈夫らしい。
また、後述のIPアドレスの範囲もhost-only
networkを含む場合は要注意。
Host-only networkが動かないとき
Kaspersky Internet Securityが動いている時も動かない。
この手順をやってからVirtualboxを再インストールするとうまくいった。
OpenVswitchにポートを設定
openvswitchにポートなどを設定する。
/etc/network/interfacesにも設定値を書いておく。
ただし、設定値が反映されないので、ポートの追加は別途行う。IPアドレスは振ってしまうとわけがわからなくなる上、動作しなくなる。
@advexp_vnet_sw
----
(追記)
allow-ovs br0
iface br0 inet
manual
ovs_type OVSBridge
ovs_ports eth1 eth2
eth3
allow-br0 eth1
iface eth1 inet
manual
ovs_bridge br0
ovd_type OVSPort
allow-br0 eth2
iface eth2 inet
manual
ovs_bridge br0
ovd_type OVSPort
allow-br0 eth3
iface eth3 inet
manual
ovs_bridge br0
ovd_type OVSPort
----
これは、Virtualboxで設定したNIC1~4に、eth0~eth3という名前が振られているから。
基本的にLinuxのネットワークは0 origin記述。
追記後、networkingを再起動。
再起動して、(マシン自体の方が望ましい)
$ sudo
ovs-vsctl show
したときに、eth1-eth3までが見えない場合はうまく動かないので、
$ sudo
ovs-vsctl add-port br0 eth1
$ sudo
ovs-vsctl add-port br0 eth2
$ sudo
ovs-vsctl add-port br0 eth3
して、再度確認を行う。
$ sudo
ovs-vsctl show
すると、追加されたポートとブリッジが見れる。
controllerのところにis_connectedとあれば接続ができている。
また、
$ sudo
ovs-ofctl show br0
とするとそれぞれのNICの稼働状況が見れる。
DOWN_LINKは動いていないので、
$ sudo
ifup ethx
などして起こす。
(なお、/etc/network/interfacesにbr0のポートについての記述がある場合は、sudo ifup br0としてもリンクアップできる)
tremaは推奨ポートではなくTCP:6653で動作するので、それについて設定を追加。
$ sudo
ovs-vsctl set-controller br0
:127.0.0.1:6653
ちなみに、tremaが起動してopenvswitchとの疎通がとれているかどうかは、sudo
ovs-vsctl showでコントローラーの設定値としてis_connectedが出ればOK。少々反映に時間がかかる。30秒くらい。
$ trema
run xxxxxx.rb
ただし、tremaでコンソールが一つつぶれるので、SSHなどをしてバックで動かせるように工夫するべき。
リアルタイムログがとれるので、末尾に&で別起動するのはあまり得策ではない。
tremaを起動して、別端末にて、
$ sudo ovs-ofctl show br0
$ sudo ovs-ofctl show br0
を実行すると、フローエントリの一覧が見える。
自動化したほうがいいけどやってないこと
NICの自動起動
UbuntuなどのDebianの場合は、結構NICの自動起動に失敗するとのこと。
このことから、基本動作前にNICをifupしなければならない手間があるので、省けるなら省くべき。
海外では、/etc/network/interfacesの中身を読み込んでNICをひたすらifupするだけのスクリプトがあるらしい。
ハマるポイント
Host-only adapterを持つネットワークで設定できるIPの範囲
192.168.56.1がhost-only adapterなら、192.168.56.2~99までが無難。それ以上だと、サブネットマスクに収まっていても危ない。
また、スイッチのポートとなるNICにIPアドレスを絶対に振らないこと。
下はPORT_DOWNしている構成。この状態では動かないので、eth0-eth3まで
sudo ifup ethxしないといけない。
(/etc/network/interfaceに何か書けばなんとかなるらしい?)
ちなみに
Controllerがconnectedすると、設定されているflow-tableはすべてリセット。disconnectしただけではリセットされない模様。
OpenVswitchがなんかおかしいなと思ったら
/var/log/openvswichの中身を眺める
/var/run/openvswitchの中身のpidでkillしまくってから、
$
/etc/init.d/openvswitch-switch stop
$
/etc/init.d/openvsiwtch-switch start
これで解決しなければ、明らかにシステムおかしいのでOSから入れ直した方が話が早い。
登録:
投稿 (Atom)