python版gobgpdクライアントを試します

以下のサイトを参考にpythonからgobgpdを動かすことをしました。

GoBGPの共有ライブラリ関数を利用するPython版gobgpdクライアント - Qiita

当方の検証環境は、ubuntu16 on virtualbox on windows7です。時間が経過していくらか変更になっている点があったので、以下に現時点における手順例(差分)を残しておきます。

ubuntu16では、golangは、apt-getで入ってくれました。そのときのgolangではGOROOT=/usr/lib/go-1.6が設定されてます。GOPATHはユーザーが設定するので以下例ではGOPATH=/usrとして書き進めます。

$ sudo apt-get install golang
...
$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/usr/lib/go-1.6"
GOTOOLDIR="/usr/lib/go-1.6/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT="1"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

ProtocolBufferは(元記事中はv3.0.0-beta-2)今時点の最新は3.1.0のようです。gRPCにバンドルされているthird_party/protobufを使えばよいです。gRPCをgit cloneして、そのあとgit submodule updateしてprotobuf/gRPC一式ビルドできる準備が整います。third_party/protobufを使う点を除くとコマンドラインも元の記事と同じです。

$ git clone https://github.com/grpc/grpc.git
...

$ cd gprc

$ git submodule update --init
...

$ cd third_party/protobuf
$ ./autogen.sh
...

$ ./configure && make
...

$ sudo make install
...

$ sudo ldconfig
$ cd python/
$ sudo python setup.py install
...

$ cd ../../..
$ make
...

$ sudo make install

$ sudo pip install -rrequirements.txt

$ sudo GRPC_PYTHON_BUILD_WITH_CYTHON=1 python setup.py install

・GoBGPのgRPCサーバと通信するPythonクライアント用のスタブの作成

gRPCが更新されてスタブ生成手順が変わっています。(http://www.grpc.io/docs/quickstart/python.html #Generate gRPC code)*1

以下ではgobgpd/gobgpのインストールでGOPATH=/usrとしてます。

$ sudo GOPATH=/usr go get github.com/osrg/gobgp/gobgpd
$ sudo GOPATH=/usr go get github.com/osrg/gobgp/gobgp
..
$ cd gprc
$ git submodule update --init
..
$ sudo python -m pip install grpcio
$ sudo python -m pip install grpcio-tools
$ python -m grpc_tools.protoc -I/usr/src/github.com/osrg/gobgp/api --python_out=. --grpc_python_out=. /usr/src/github.com/osrg/gobgp/api/gobgp.proto

・共有ライブラリをビルド

$ export GOPATH=/usr
$ cd $GOPATH/src/github.com/osrg/gobgp/gobgp/lib
$ go build --buildmode=c-shared -o libgobgp.so *.go


python版gobgpdクライアントを試します
GitHub - tamihiro/gobgp_grpc_demo: Yet another gobgpd grpc client written in Python

1例、getrib.pyの動作をみることができます。

まずgobgpdを立ち上げておく、動作確認なので超簡易なgobgpd.confを用意

$ sudo gobgpd -f gobgpd.conf
..
$ pyhton getrib.py -l
$

たとえばgobgpdをあげておかなければgetrib.pyはちゃんとエラーあげてきます。


2017/02/17追記:python protobuf(google.protobuf)のバージョン違いが原因か、getrib.pyが直近の自分環境で正しく動きませんでした。詳細はまとまったら別ページで書くことにします。

*1:pythonスタブ生成方法が以前と変わっているのに注意です