Fabricでopenvswitch-2.0.0を自動インストールしてみる
概要
Fabricはsshを基本としたデプロイツールのようなものです。 Ansibleのshellとかrawだけで作業するようなアレ。
今回はopenvswitch-2.0.0の自動インストールをしてみます。
Fabricのインストール
Fabric: http://fabfile.org/
インストールした直後のUbuntu 12.04.3 を使います。
aptからインストールする場合
1
|
$ sudo apt-get install fabric
|
- aptからインストールする場合は、fabricのシナリオファイルを拡張する際に一部機能が使えないことで困るかもしれません。
pipからインストールする場合
1
2
3
|
$ sudo apt-get update
$ sudo apt-get install -y python-pip gcc python-dev
$ sudo pip install fabric
|
- pip install fabric にsudoをつけない場合、おそらく
error: could not create '/usr/local/lib/python2.7/dist-packages/fabric': Permission denied
と言われます。
自動インストール用のファイル作成
こんな感じでファイルを作ります。
1
2
|
+ openvswitch
- fabfile.py
|
fabfile.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# -*- coding: utf-8 -*-
from fabric.api import run, sudo, cd
def setup():
""" OpenvSwitch-2.0.0 userland install(Only common, switch) """
sudo('apt-get install -y build-essential fakeroot debhelper autoconf automake libssl-dev python-all python-qt4 python-twisted-conch')
with cd('/tmp'):
run('wget http://openvswitch.org/releases/openvswitch-2.0.0.tar.gz')
run('tar zxf openvswitch-2.0.0.tar.gz')
run('rm openvswitch-2.0.0.tar.gz')
with cd('/tmp/openvswitch-2.0.0'):
run('fakeroot debian/rules binary')
with cd('/tmp'):
sudo('dpkg -i openvswitch-common_2.0.0-1_amd64.deb openvswitch-switch_2.0.0-1_amd64.deb')
def setup_kernel():
""" OpenvSwitch-2.0.0 kernel module install """
sudo('apt-get install -y libtool autopoint')
with cd('/tmp/openvswitch-2.0.0'):
run('./boot.sh')
run('./configure --with-linux=/lib/modules/`uname -r`/build')
run('make')
run('ls -la ./datapath/linux/openvswitch.ko')
run('modinfo ./datapath/linux/openvswitch.ko')
sudo('mv /lib/modules/`uname -r`/kernel/net/openvswitch/openvswitch.ko /lib/modules/`uname -r`/kernel/net/openvswitch/openvswitch.ko.org')
sudo('mv ./datapath/linux/openvswitch.ko /lib/modules/`uname -r`/kernel/net/openvswitch/openvswitch.ko')
sudo('lsmod | grep "gre" || modprobe gre')
sudo('lsmod | grep "libcrc32c" || modprobe libcrc32c')
sudo('lsmod | grep "openvswitch" && rmmod openvswitch')
sudo('lsmod | grep "openvswitch" || modprobe openvswitch')
sudo('cat /etc/modules | grep "gre" || echo "gre" >> /etc/modules')
sudo('cat /etc/modules | grep "libcrc32c" || echo "libcrc32c" >> /etc/modules')
sudo('cat /etc/modules | grep "openvswitch" || echo "openvswitch" >> /etc/modules')
|
- 冪等性に対する考慮やエラー処理をちっとも実装してないので、aptとかは大丈夫でも、mvとか
setup_kernel()
の with cd('/tmp/openvswitch-2.0.0')
とかは例外吐く要因になるのが目に見えてます…
自動インストール実行
本来はリモートノードへのデプロイ作業で使うんだけど、ローカルホストに向けてfabricを実行してみます。
1
2
3
4
5
6
7
8
9
10
11
12
|
$ ls
openvswitch
$ cd openvswitch/
$ fab -l
Available commands:
setup OpenvSwitch-2.0.0 userland install(Only common, switch)
setup_kernel OpenvSwitch-2.0.0 kernel module install
$ fab -H 127.0.0.1 setup
[127.0.0.1] Executing task 'setup'
[127.0.0.1] sudo: apt-get install -y build-essential fakeroot debhelper autoconf automake libssl-dev python-all python-qt4 python-twisted-conch
[127.0.0.1] Login password for 'yuki':
|
後はログインパスワードを手入力したら、openvswitch-2.0.0のコンパイルとdpkgインストールまでをやってくれます。まぁOpenvSwitchのコンパイルは時間かかりますからね、この場合待ち時間はそこそこあります。
同じように、カーネルモジュールをインストールしたい場合は、
1
|
$ fab -H 127.0.0.1 setup_kernel
|
みたいな感じで使えます。
そもそも一度にやる場合は、並べて書けば順番に実行されます。
1
|
$ fab -H 127.0.0.1 setup setup_kernel
|
え?「シェルスクリプトでやるのと何が違うの?」ですか? ちょっと高機能になっただけで、コンセプトは大して変わりませんよー。