EclipseのPydevプラグインを使い、Keystoneをリモートデバッグできたので、記録を残します。Eclipseは以前Javaによる開発で使っていたので、Eclipseについては飛ばします。
環境
- Ubuntu Desktop 14.04.3
- Eclipse Mars (4.5)
- Keystone Liberty 開発サイクル
Eclipseインストール
EclipseはJava 開発者向けなどインストールに際するの選択肢が多いですが、 Eclipse Platform でよいです。Eclipseインストール後、Egit plugin、Pydev plugin をインストールします。
Keystone プロジェクト作成
Egit にて、Keystone を clone します。cloneした プロジェクトの Working directory を右クリックして Import Projects… をクリックし Import as general project を選択し、とりあえずインポートします。インポートできたらプロジェクトを右クリックし、Pydev から Set as Pydev Project を選択します。Python not configured が出た場合は、一番左にある Quick Auto-Config をクリックします。
Python package インストール
python-six アンインストール
debパッケージの six ではのちにエラーになるため、python-six パッケージを削除します。
$ sudo apt-get autoremove python-six
pip インストール
debパッケージでなく、最新の pip をインストールしないとのちにエラーになるため、最新の pip をインストールします。https://pip.pypa.io/en/stable/installing/から get-pip.py をダウンロードしてインストールします。
keystone の依存パッケージインストール
git がないとのちにエラーになるため、git をインストールします。
$ sudo apt-get install git
Keystone の開発ドキュメントに従い、以下を実行します。
$ sudo apt-get install python-dev python3-dev libxml2-dev libxslt1-dev libsasl2-dev libsqlite3-dev libssl-dev libldap2-dev libffi-dev $ sudo pip installl -r requirements.txt $ sudo pip installl -r test-requirements.txt $ sudo pip setup.py develop
keystone 設定ファイルコピー
Keystone の開発ドキュメントに従い、以下を実行します。
$ cp etc/keystone.conf.sample etc/keystone.conf
Eclipse設定
pysrc を PYTHONPATH にいれる
デバッグに必要な pydevd を python のパスに含めるため、pysrc を PYTHONPATH に含めます。pysrc の場所は以下コマンドで探します。
$ find ~/ -name 'org.python.pydev_*'
たとえば ./.p2/pool/plugins/org.python.pydev_4.3.0.201508182223 のようなものです。
実際にPYTHONPATHに含めるには、プロジェクトを右クリックしてPropertiesを選択。Pydev – PYTHONPATH をクリックし、External Libraries タブをクリックします。。Add source folder をクリックし、pysrc を選び、OK をクリックします。pysrc が . から始まるフォルダにある場合は、ホームディレクトリをクリック後、左上にある鉛筆アイコンをクリックし、直に入力する必要があります。
起動設定
プロジェクト – cmd – all.py を右クリックし、Run As – Run Configurations… を選択します。Name: を適切な名称に変更し、Main タブで Main Moduleに /usr/local/bin/keystone-all を入力し、Apply をクリックします。
Arguments タブをクリックし、Program arguments: に –standard-threads と入力し、Apply をクリックし OK をクリックします。
設定
デバッグが始まるように、keystone/controllers.pyのdef _get_versions_list(self, context):の下に以下のコードを入れます。
import pydevd pydevd.settrace('127.0.0.1', port=5678, stdoutToServer=True, stderrToServer=True)
デバッグサーバ起動
Debug Perspective に移動し、メニューからPydev – Start Debug Server をクリックします。左下の Console で Debug Server at port: 5678 と表示されたことを確認します。
Keystone 起動
Pydev Perspective に移動し、メニューから Run – Run Configurations を選択し、右下のRun をクリックします。Console に Started child が4行表示されたことを確認します。
デバッグ実行
ターミナルから以下を実行します。
$ curl http://127.0.0.1:35357/v3
戻り値がなく、Eclipse の画面を見ると、def _get_versions_list(self, context): の下に入れたコードのしたで止まっている(左側に右矢印が表示されてる)ことを確認します。
あとは、Debug Perspective に移動し、ステップ実行などができます。