Windows
openstack
Pycharm
Keystone

OpenStack keystoneをwindowsで構築してみた

始め

KeystoneをcloneしてPycharmで開いてみた。色んなmissing packagesの警告が出た。
「これ嫌だな。」
この話はここから始まった。

何年か前にPycharmのmissing packagesを解消しようとしたことがあった。その時にはPyPIとwindows用wheelで解決しようとしたが、結局失敗。名前は思い出さないがWindows用のpackageがないものがあった。

それを今回はconda install -c conda-forgeを利用してやってみた。これだけ使っては上手くいけない場合もあったのでPyPIも使いながらインストールすると何となくdependencyを揃うことが出来た。(私はconda3をインストールしたのでpython3.6の環境だ。)
時には pip install "pysaml2<4.0.3,>=4.0.2" こんなコマンドも使った。

image.png

「へー、もし動ける?」

結果、動けた。

image.png

参考文書はやっぱりopenstack document。
https://docs.openstack.org/keystone/latest/install/keystone-install-rdo.html#install-and-configure-components

基本コンセプトは、以下をWindows上に実行すること

  • conda create -n openstack && activate openstack
  • cd c:\dev\keystone && pip install -e .
  • package 設置
  • mysqlをインストール
  • keystone-manage db_syncでテーブル自動生成する
  • keystone-manage bootstrapでテーブルに基本情報をInsertする
  • apache24をインストールする
  • mod_wsgiをインストールする
  • http.confを設定する
  • apache24を起動

conda create -n openstack && activate openstack

virtualenvも良いけどconda-forgeが提供するwindows用packageは最高。今はvirtualenvは使わない。pycharmもinterpreter設定画面でcondaをサポートしてくれてるし。

cd c:\dev\keystone && pip install -e .

keystoneをforkしてからcloneした。これから沢山のbranchを作りながらいじってみるから。

image.png

package 設置

ここはconda search <packagename>pip search <packagename>で何となく出来る

mysqlをインストール

image.png

一応最新をインストールした。「No thanks, just start my download」
設置したコンポネントはserver only

keystone-manage db_syncでテーブル自動生成する

keystone-manage bootstrapでテーブルに基本情報をInsertする

image.png

apache24をインストールする

image.png
apacheloungeで最新をインストールした。

mod_wsgiをインストールする

image.png
windows用precompiled wheelをダウンロードした。

http.confを設定する

image.png

LoadFile "c:/programdata/anaconda3/envs/openstack/python36.dll"
LoadModule wsgi_module "c:/programdata/anaconda3/envs/openstack/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
WSGIPythonHome "c:/programdata/anaconda3/envs/openstack"
Include conf/wsgi-keystone.conf

image.png

image.png
wsgi-keystone.confは最初はc:\dev\keystone\httpd\wsgi-keystone.confをcopyしてやってみた。失敗。

image.png

理由はWindows用のmod_wsgiには具現されてないfeatureがあったこと。
image.png

色々工夫して成功したのが以下の内容だ。

Listen 5000
Listen 35357

<VirtualHost *:5000>
    # WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    # WSGIProcessGroup keystone-public
    # WSGIScriptAlias / /usr/local/bin/keystone-wsgi-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public.py
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    # LimitRequestBody 114688
    #<IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    #</IfVersion>
    ErrorLog /var/log/apache2/keystone.log
    CustomLog /var/log/apache2/keystone_access.log combined

    # <Directory /usr/local/bin>
    <Directory /usr/bin>
        # <IfVersion >= 2.4>
            Require all granted
        # </IfVersion>
        # <IfVersion < 2.4>
        #    Order allow,deny
        #    Allow from all
        # </IfVersion>
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    # WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    # WSGIProcessGroup keystone-admin
    # WSGIScriptAlias / /usr/local/bin/keystone-wsgi-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin.py
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    # LimitRequestBody 114688
    #<IfVersion >= 2.4>
      ErrorLogFormat "%{cu}t %M"
    #</IfVersion>
    ErrorLog /var/log/apache2/keystone.log
    CustomLog /var/log/apache2/keystone_access.log combined

    # <Directory /usr/local/bin>
    <Directory /usr/bin>
        # <IfVersion >= 2.4>
            Require all granted
        # </IfVersion>
        #<IfVersion < 2.4>
        #    Order allow,deny
        #    Allow from all
        #</IfVersion>
    </Directory>
</VirtualHost>

# Alias /identity /usr/local/bin/keystone-wsgi-public
Alias /identity /usr/bin/keystone-wsgi-public.py
<Location /identity>
    SetHandler wsgi-script
    Options +ExecCGI

    # WSGIProcessGroup keystone-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
</Location>

# Alias /identity_admin /usr/local/bin/keystone-wsgi-admin
Alias /identity_admin /usr/bin/keystone-wsgi-admin.py
<Location /identity_admin>
    SetHandler wsgi-script
    Options +ExecCGI

    # WSGIProcessGroup keystone-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
</Location>

keystone-wsgi-public.pyとkeystone-wsgi-admin.pyはkeystone repositoryでは提供されてないので、ubuntuのやつをcopyしてshebangだけ#!/ProgramData/Anaconda3/envs/openstack/pythonにした。
image.png

apache24を起動

image.png
image.png
image.png

次やってみたいこと

一応、dbからではなくcsvファイルから認証するようにするにはことをいじればいいか調べたい。
以上。

後書き

image.png

Apacheなしで起動することもできた。

image.png

このファイルをPycharmでDebugモードで実行することもできる。