Fabricでopenvswitch-2.0.0を自動インストールしてみる

Posted on 2014/03/01(Sat) 15:35 in technical

概要

Fabricはsshを基本としたデプロイツールのようなものです。 Ansibleのshellとかrawだけで作業するようなアレ。 今回はopenvswitch-2.0.0の自動インストールをしてみます。

Fabricのインストール

Fabric : http://fabfile.org/

インストールした直後のUbuntu 12.04.3(方法は https://www.ainoniwa.net/pelican/2014/0301a.html 参照)を使います。

aptからインストールする場合

$ sudo apt-get install fabric

警告

aptからインストールする場合は、fabricのシナリオファイルを拡張する際に一部機能が使えないことで困るかもしれません。

pipからインストールする場合

$ 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" と言われます。

自動インストール用のファイル作成

こんな感じでファイルを作ります。:

+ openvswitch
    - fabfile.py

fabfile.py

# -*- 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を実行してみます。:

$ 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のコンパイルは時間かかりますからね、この場合待ち時間はそこそこあります。

同じように、カーネルモジュールをインストールしたい場合は、:

$ fab -H 127.0.0.1 setup_kernel

みたいな感じで使えます。

そもそも一度にやる場合は、並べて書けば順番に実行されます。:

$ fab -H 127.0.0.1 setup setup_kernel

え?「シェルスクリプトでやるのと何が違うの?」ですか? ちょっと高機能になっただけで、コンセプトは大して変わりませんよー。