WebUI の Horizon(DashBoard) インストール手順を記載します。
はまりポイントが多いので一本道の手順にはなっていません。
エラーで検索した人を救済するようにエラーを記載しているのでちょっと見辛いです。
後日はまりポイントと分離します。
Github から Horizon(stable/diablo) を取得します。
$ cd /usr/local/src
$ sudo git clone https://github.com/openstack/horizon.git -b stable/diablo
$ cd horizon
$ git branch
* stable/diablo
Github からopenstackx(diablo) を取得します。
$ cd /usr/local/src
$ sudo git clone https://github.com/cloudbuilders/openstackx.git -b diablo
$ cd openstackx
$ git branch
* diablo
Github から openstack.compute(master) を取得します。
$ cd /usr/local/src
$ sudo git clone https://github.com/jacobian/openstack.compute.git
$ cd openstack.compute
$ git branch
* master
依存関係は特にありません。
$ sudo -i
# cd /usr/local/src/horizon/django-openstack
# python setup.py build
# python setup.py install --record installfile.txt
依存関係があります。horizon/openstack-dashboard/tools/pip-requires を編集し、pip でインストールを行います。
変更箇所 は以下の通りです。
# sed -i -e 's/\(^Django==\).*/\11\.3\.1/g' -e 's/^-e/#-e/g' /usr/local/src/horizon/openstack-dashboard/tools/pip-requires
# pip install -r /usr/local/src/horizon/openstack-dashboard/tools/pip-requires
# exit
$ sudo cp -r /usr/local/src/horizon/openstack-dashboard /var/lib
$ sudo mkdir /var/lib/openstack-dashboard/.blackhole/
この状態で Web サーバを起動して、アクセスした場合は /var/log/apache/error.log にエラーログが出力されます。
※ 配置場所が間違っている疑惑?
[error] [client 192.168.11.4] mod_wsgi (pid=18576): Exception occurred processing WSGI script '/var/lib/openstack-dashboard/dashboard/wsgi/django.wsgi'.
[error] [client 192.168.11.4] Traceback (most recent call last):
[error] [client 192.168.11.4] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 250, in __call__
[error] [client 192.168.11.4] self.load_middleware()
[error] [client 192.168.11.4] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 39, in load_middleware
[error] [client 192.168.11.4] for middleware_path in settings.MIDDLEWARE_CLASSES:
[error] [client 192.168.11.4] File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 276, in __getattr__
[error] [client 192.168.11.4] self._setup()
[error] [client 192.168.11.4] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 42, in _setup
[error] [client 192.168.11.4] self._wrapped = Settings(settings_module)
[error] [client 192.168.11.4] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 89, in __init__
[error] [client 192.168.11.4] raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
[error] [client 192.168.11.4] ImportError: Could not import settings 'dashboard.settings' (Is it on sys.path?): No module named dashboard.settings
/var/lib/openstack-dashboard/dashboard/wsgi/django.wsgi が dashboard.settings を見つけられないのでパスを通します。
$ sudo vim /var/lib/openstack-dashboard/dashboard/wsgi/django.wsgi
(6行目あたりに以下を追加)
sys.path.append("/var/lib/openstack-dashboard")
次に現れるエラーは「設定ファイルがない。」です。
[error] ImportError: No module named local_settings
[error] [client 192.168.11.4] mod_wsgi (pid=18575): Exception occurred processing WSGI script '/var/lib/openstack-dashboard/dashboard/wsgi/django.wsgi'.
[error] [client 192.168.11.4] Traceback (most recent call last):
[error] [client 192.168.11.4] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 250, in __call__
[error] [client 192.168.11.4] self.load_middleware()
[error] [client 192.168.11.4] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 47, in load_middleware
[error] [client 192.168.11.4] raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e))
[error] [client 192.168.11.4] ImproperlyConfigured: Error importing middleware django_openstack.middleware.keystone: "No module named django_openstack.middleware.keystone"
/var/lib/openstack-dashboard/local/local_settings.py.example をベースに設定ファイルを作成します。
$ sudo cp /var/lib/openstack-dashboard/local/local_settings.py.example /var/lib/openstack-dashboard/local/local_settings.py
$ sudo vim /var/lib/openstack-dashboard/local/local_settings.py
import os
DEBUG = True
TEMPLATE_DEBUG = DEBUG
PROD = False
USE_SSL = False
LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(LOCAL_PATH, 'dashboard_openstack.sqlite3'),
},
}
CACHE_BACKEND = 'dummy://'
# Send email to the console by default
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# Or send them to /dev/null
#EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
# django-mailer uses a different settings attribute
MAILER_EMAIL_BACKEND = EMAIL_BACKEND
# Configure these for your outgoing email host
# EMAIL_HOST = 'smtp.my-company.com'
# EMAIL_PORT = 25
# EMAIL_HOST_USER = 'djangomail'
# EMAIL_HOST_PASSWORD = 'top-secret!'
OPENSTACK_KEYSTONE_URL = "http://localhost:5000/v2.0/"
# FIXME: this is only needed until keystone fixes its GET /tenants call
# so that it doesn't return everything for admins
OPENSTACK_KEYSTONE_ADMIN_URL = "http://localhost:35357/v2.0"
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
# NOTE(tres): Available services should come from the service
# catalog in Keystone.
SWIFT_ENABLED = False
# Configure quantum connection details for networking
QUANTUM_ENABLED = True
QUANTUM_URL = '127.0.0.1'
QUANTUM_PORT = '9696'
QUANTUM_TENANT = '1234'
QUANTUM_CLIENT_VERSION='0.1'
# If you have external monitoring links
EXTERNAL_MONITORING = [
['Nagios','http://foo.com'],
['Ganglia','http://bar.com'],
]
# If you do not have external monitoring links
# EXTERNAL_MONITORING = []
# Uncomment the following segment to silence most logging
# django.db and boto DEBUG logging is extremely verbose.
#LOGGING = {
# 'version': 1,
# # set to True will disable all logging except that specified, unless
# # nothing is specified except that django.db.backends will still log,
# # even when set to True, so disable explicitly
# 'disable_existing_loggers': False,
# 'handlers': {
# 'null': {
# 'level': 'DEBUG',
# 'class': 'django.utils.log.NullHandler',
# },
# 'console': {
# 'level': 'DEBUG',
# 'class': 'logging.StreamHandler',
# },
# },
# 'loggers': {
# # Comment or Uncomment these to turn on/off logging output
# 'django.db.backends': {
# 'handlers': ['null'],
# 'propagate': False,
# },
# 'django_openstack': {
# 'handlers': ['null'],
# 'propagate': False,
# },
# }
#}
# How much ram on each compute host?
COMPUTE_HOST_RAM_GB = 16
パラメータ | 解説 | 今回設定する値 |
---|---|---|
DATABASES | データベース接続用設定 | 後述 |
OPENSTACK_KEYSTONE_URL | KeyStone 接続用URL(endpointTemplate) | http://192.168.0.2:5000/v2.0/ |
OPENSTACK_KEYSTONE_ADMIN_URL | KeyStone 接続用URL(管理)(endpointTemplate) | http://192.168.0.2:35357/v2.0/ |
QUANTUM_ENABLED | Quantum を有効にするか否か | False |
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(LOCAL_PATH, 'dashboard_openstack.sqlite3'),
},
}
↓(こんな感じ)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'horizon',
'USER': 'horizon',
'PASSWORD': 'y7u8i9YUI',
'HOST': 'localhost',
'default-character-set': 'utf8',
},
}
データベースを初期化します。はまりポインとはパスが通っていない。です。
ERROR:root:No module named local.local_settings
Traceback (most recent call last):
File "/var/lib/openstack-dashboard/dashboard/settings.py", line 123, in <module>
from local.local_settings import *
ImportError: No module named local.local_settings
ERROR:root:No module named local.local_settings
Traceback (most recent call last):
File "/var/lib/openstack-dashboard/dashboard/../dashboard/settings.py", line 123, in <module>
from local.local_settings import *
ImportError: No module named local.local_settings
Error: No module named django_openstack.templatetags
環境変数を渡した上で実行します。
$ cd /var/lib/openstack-dashboard
$ sudo PYTHONPATH=/var/lib/openstack-dashboard python dashboard/manage.py syncdb
DashBoard はマニュアルによると、with_venv.sh で起動するようになっていますが、今回は Apache 連携をします。
$ sudo vim /etc/apache2/sites-enabled/000-default
<VirtualHost *:80>
WSGIScriptAlias / /var/lib/openstack-dashboard/dashboard/wsgi/django.wsgi
WSGIDaemonProcess horizon user=ishikawa group=ishikawa processes=3 threads=10
SetEnv APACHE_RUN_USER ishikawa
SetEnv APACHE_RUN_GROUP ishikawa
WSGIProcessGroup horizon
DocumentRoot /var/lib/openstack-dashboard/.blackhole/
Alias /media /var/lib/openstack-dashboard/openstack-dashboard/static
#Alias /vpn /opt/stack/vpn
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/lib/openstack-dashboard/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
$ sudo /etc/init.d/apache2 restart
openstackx をインストールせずに、Webアクセスをすると、以下のようなエラーが出力されます。
[error] INFO:root:Running in debug mode without debug_toolbar.
[error] [client 192.168.11.4] mod_wsgi (pid=18577): Exception occurred processing WSGI script '/var/lib/openstack-dashboard/dashboard/wsgi/django.wsgi'.
[error] [client 192.168.11.4] Traceback (most recent call last):
[error] [client 192.168.11.4] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 250, in __call__
[error] [client 192.168.11.4] self.load_middleware()
[error] [client 192.168.11.4] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 47, in load_middleware
[error] [client 192.168.11.4] raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e))
[error] [client 192.168.11.4] ImproperlyConfigured: Error importing middleware django_openstack.middleware.keystone: "No module named openstackx"
opensrtackx をインストールします。
$ sudo -i
# cd /usr/local/src/openstackx
# python setup.py build
# python setup.py install --record installfile.txt
# exit
openstack.compute を配置せずに、Webアクセスをすると、以下のようなエラーが出力されます。opensrtack.compute を配置します。
$ sudo cp -r /usr/local/src/openstack.compute/openstack /var/lib/openstack-dashboard
ここまでくると Webアクセスは可能になります。エラー画面ですが。
ViewDoesNotExist at /
Could not import dashboard.views. Error was: No module named quantum.client
Request Method: GET
Request URL: http://192.168.11.2/
Django Version: 1.3.1
Exception Type: ViewDoesNotExist
Exception Value:
Could not import dashboard.views. Error was: No module named quantum.client
Exception Location: /usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py in _get_callback, line 167
Python Executable: /usr/bin/python
Python Version: 2.7.2
Quantum を使用しない設定にしていますが要求されます。空ファイルを作ってごまかします。
$ cd /var/lib/openstack-dashboard
$ sudo mkdir quantum
$ sudo touch quantum/__init__.py quantum/client.py
ここまでくると本当にログインできるようになります。
そして例のごとく現れるエラーです。
Unable to get usage info: This error may be caused by a misconfigured nova url in keystone's service catalog, or by missing openstackx extensions in nova. See the dashboard README.
47行目、コメントアウトされている箇所を有効化します。
$ sudo vim /etc/nova/nova.conf
#--osapi_extensions_path=/usr/local/lib/python2.7/dist-packages/openstackx-0.2-py2.7.egg/extensions
↓
--osapi_extensions_path=/usr/local/lib/python2.7/dist-packages/openstackx-0.2-py2.7.egg/extensions
$ sudo /etc/init.d/nova-api restart