DevStack設定メモ

# [DevStack - an OpenStack Community Production] (http://docs.openstack.org/developer/devstack/)

## <Font color="red">注意点</font>
+ ipv6は無効化しない(v6用のモジュールがエラーを返すのでインストールに失敗する)。
+ たとえstableなbranchでも上手くいかないことがあるが気にしない。
+ たとえBigTentでも必ずしもDevStackに全てが対応できているわけではない。
+ 心を折らない。

## 構成
+ ホストOSにCentOS 7.2
+ ゲストOS(DevStackのインストール先)にUbuntu 14.04

```
┌───────────────────┐
│                   │
│ Ubuntu (guest)    │
│  with devstack    │
│                   │
├───────────────────┴──────────────────┐
│                                      │
│ CentOS (host)                        │
│                                      │
└──────────────────────────────────────┘
```


## [ホストOSの設定] (http://qiita.com/tomo_n/items/4bab2a3c16812e89fa27)
## ゲストOSの設定
### ネットワークに関する設定

+ ネットワークインターフェースの設定

```bash:
# 設定ファイルの変更
$ vi /etc/network/interfaces
```

```bash:/etc/network/interfaces
# loopbackインターフェースの設定
auto lo
iface lo inet loopback

# eth0インターフェースの設定(IP固定の場合)
auto eth0
iface eth0 inet static
address x.x.x.x
network x.x.x.x
netmask x.x.x.x
broadcast x.x.x.x
gateway x.x.x.x
dns-nameservers x.x.x.x

# eth0インターフェースの設定(DHCPの場合)
auto eth0
iface eth0 inet dhcp

# ルーティングの設定
## サービス起動時にルーティングを追加
up route add -net x.x.x.x netmask y.y.y.y gw z.z.z.z　dev eth0
## サービス停止時にルーティングを削除
pre-down route del -net x.x.x.x netmask y.y.y.y gw z.z.z.z dev eth0
```

```bash:
# ネットワークサービスの再起動
$ sudo /etc/init.d/networking restart
```

+ DNSの設定

```bash:
# 設定ファイルの変更
$ vi /etc/resolvconf/resolv.conf.d/base
```

```bash:/etc/resolvconf/resolv.conf.d/base
nameserver 8.8.8.8
nameserver 8.8.4.4
```

```bash:
# DNS設定の反映
$ sudo resolvconf -u
```

### 念のためソフトウェアパッケージを最新状態に更新

```bash:
# パッケージリストを更新
$ sudo apt-get update
# パッケージを更新
$ sudo apt-get upgrade
```

### [sshのインストール] (http://qiita.com/rintarou/items/bef523c7c8f11097e577)

```bash:
# パッケージのインストール
$ sudo apt-get install openssh-server 
```

### [gitのインストール] (https://git-scm.com/book/ja/v1/使い始める-Gitのインストール)

```bash:
# パッケージのインストール
$ sudo apt-get install git
```

### NTP・タイムゾーンの設定
```bash:
# パッケージのインストール
$ sudo apt-get install ntp
# ntpサービスを停止
$ sudo /etc/init.d/ntp stop
# 設定ファイルの変更
$ vi /etc/ntp.conf
```

```bash:/etc/ntp.conf
# 例としてNICTのNTPサーバを追加
server ntp.nict.jp
```

```bash:
# 手動で時刻同期
$ sudo ntpdate ntp.nict.jp
# ntpサービスを起動
$ sudo /etc/init.d/ntp start
```

```bash:
# タイムゾーンを東京に変更
$ sudo mv /etc/localtime /etc/localtime.bak
$ sudo ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```

### [Windows->Ubuntuのリモートデスクトップ環境の構築] (http://wp.developapp.net/?p=4310) (if necessary)
+ Ubuntuのダッシュボードから「desktop sharing」を検索・起動し、「Allow other users to view your desktop」をチェック、他はチェックをはずす。
+ dconf-editorをインストール・起動し、org > gnome > desktop > remote-access > require-encryption のチェックをはずす。
+ WindowsにVNCビューワ(個人的には[UltraVNC Viewer](http://www.forest.impress.co.jp/library/software/ultravnc/)がおすすめ)をインストール・起動する。

### [コンソール接続の設定] (http://knqyf263.hatenablog.com/entry/2014/01/13/200509) (if necessary)

```bash:
# 設定ファイルの変更
$ vi /etc/init/ttyS0.conf
```

```bash:/etc/init/ttyS0.conf 
start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -L 115200 ttyS0 vt102
```
```bash:
# ttyS0を起動
$ sudo start ttyS0
```

```bash:
# 設定ファイルの変更
$ vi /etc/default/grub
```

```vi:/etc/default/grub
+GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
+GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
```


## DevStackのインストール

```bash:
# /optディレクトリに移動
$ cd /opt/
# gitリポジトリをマスタからクローン
$ sudo git clone https://git.openstack.org/openstack-dev/devstack.git
# stackユーザを作成
$ sudo devstack/tools/create-stack-user.sh
# devstackディレクトリの所有者を変更
$ sudo chown -R stack:stack devstack
# stackユーザに変更
$ sudo su - stack
# devstackディレクトリに移動
$ cd /opt/devstack
# DevStackの設定ファイルを編集用にコピー
$ cp samples/local.conf .
```

+ [local.confの編集] (http://docs.openstack.org/developer/devstack/guides/neutron.html)

```bash:
# 設定ファイルの変更
$ vi local.conf
```

```bash:local.conf
# Sample ``local.conf`` for user-configurable variables in ``stack.sh``
#@@@ local.confはstack.shによって使用されるユーザ定義変数を設定できる。

# NOTE: Copy this file to the root DevStack directory for it to work properly.
#@@@ 注意：このファイルをdevstack直下に配置する必要がある。

# ``local.conf`` is a user-maintained settings file that is sourced from ``stackrc``.
# This gives it the ability to override any variables set in ``stackrc``.
# Also, most of the settings in ``stack.sh`` are written to only be set if no
# value has already been set; this lets ``local.conf`` effectively override the
# default values.
#@@@ local.confはstackrcで定義される変数に関して、ユーザがメンテナンスするための設定ファイルである。
#@@@ つまり、stackrc内の値を上書きする。
#@@@ また、必要とされる値が記述されていなければ、stack.sh内に記述されているデフォルト値が利用される。

# This is a collection of some of the settings we have found to be useful
# in our DevStack development environments. Additional settings are described
# in http://devstack.org/local.conf.html
# These should be considered as samples and are unsupported DevStack code.
#@@@ このファイルはdevstack環境下で使用される設定のいくつかを集約したものである。
#@@@ 追加設定が必要であれば、以下を参照されたい。
#@@@ http://docs.openstack.org/developer/devstack/configuration.html
#@@@ 追加設定はサンプルであり、devstackコードをサポートしたものではない。

# The ``localrc`` section replaces the old ``localrc`` configuration file.
# Note that if ``localrc`` is present it will be used in favor of this section.
#@@@ localrcセクションは従来使用していたlocalrc設定ファイルに置き換わるものである。
#@@@ 注意：localrcファイルが存在しても、localrcセクションが優先して使用される。

[[local|localrc]]

##### Password #####
#-------------------
# If the ``SERVICE_TOKEN`` and ``*_PASSWORD`` variables are not set
# here you will be prompted to enter values for them by ``stack.sh``
# and they will be added to ``local.conf``.
#@@@ SERVICE_TOKENや*_PASSWORDが設定されていなければ、stack.sh実行時に入力を求められる場合もあり、local.confに追記される。

ADMIN_PASSWORD=stack
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
MYSQL_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=111222333444

#FIXED_RANGE=192.168.9.0/24
#FLOATING_RANGE=192.168.20.0/25

# ``HOST_IP`` and ``HOST_IPV6`` should be set manually for best results if
# the NIC configuration of the host is unusual, i.e. ``eth1`` has the default
# route but ``eth0`` is the public interface.  They are auto-detected in
# ``stack.sh`` but often is indeterminate on later runs due to the IP moving
# from an Ethernet interface to a bridge on the host. Setting it here also
# makes it available for ``openrc`` to include when setting ``OS_AUTH_URL``.
# Neither is set by default.
#@@@ HOST_IPやHOST_IPV6はインターフェースの設定が特殊な場合には設定すべきである。
#@@@ つまり、eth1がデフォルトルートだが、eth0がパブリックインターフェースの場合では、stack.sh内でこれらインターフェースは自動認識されるが、それらは不定なものとなり得る。つまり、IPアドレスはEthernetインターフェースではなくホストのブリッジと紐づくため、devstack管理下には必ずしもないからである。
#@@@ HOST_IPの設定はOS_AUTH_URL設定時にopenrcに含めることもできるが、共にデフォルトでは設定されない。

##### IPアドレス #####
#------------------
#@@@ 使用するIPアドレスを明示的に指定する場合(ローカルに閉じた環境であれば不要)
HOST_IP=192.168.9.129
#HOST_IPV6=xx:xx:xx:xx:xx:xx
#SERVICE_HOST=$HOST_IP

##### openrc #####
#-----------------
#@@@ プロジェクト名
OS_PROJECT_NAME=demo
#@@@ ユーザ名
OS_USERNAME=demo
#@@@ パスワード
OS_PASSWORD=password
#@@@　Keystoneエンドポイント
OS_AUTH_URL=http://$SERVICE_HOST:5000/v2.0

##### インストールオプション #####
#---------------------------
# devstackのインストールディレクトリ。デフォルトでは/opt/stack
#DEST=/opt/stack

# stack.sh実行時に都度git cloneを実行するかどうか。デフォルトではローカルリポジトリが存在すれば、recloneを実行しない。
#RECLONE=yes

# pipによるパッケージアップグレード
PIP_UPGRADE=True

# インターネットに接続したくない場合
#OFFLINE=True

##### Service Repos #####
#------------------------
GIT_BASE=https://git.openstack.org
VERSION=master
#VERSION=stable/mitaka

# Keystone
KEYSTONE_REPO=$GIT_BASE/openstack/keystone.git
KEYSTONE_BRANCH=$VERSION

# Horizon
HORIZON_REPO=$GIT_BASE/openstack/horizon.git
HORIZON_BRANCH=$VERSION

# Nova
NOVA_REPO=$GIT_BASE/openstack/nova.git
NOVA_BRANCH=$VERSION

# Neutron
NEUTRON_REPO=$GIT_BASE/openstack/neutron.git
NEUTRON_BRANCH=$VERSION

# Glance
GLANCE_REPO=$GIT_BASE/openstack/glance.git
GLANCE_BRANCH=$VERSION

# Cinder
#CINDER_REPO=$GIT_BASE/openstack/cinder.git
#CINDER_BRANCH=$VERSION

# Ceilometer
CEILOMETER_REPO=$GIT_BASE/openstack/ceilometer.git
CEILOMETER_BRANCH=$VERSION

# Aodh
AODH_REPO=$GIT_BASE/openstack/aodh.git
AODH_BRANCH=$VERSION

# Heat
#HEAT_REPO=$GIT_BASE/openstack/heat.git
#HEAT_BRANCH=$VERSION

# Swift
#SWIFT_REPO=$GIT_BASE/openstack/swift.git
#SWIFT_BRANCH=$VERSION


##### Services #####
#-------------------
#@@@ 不要なサービスを起動せず、早くデプロイするために、全サービスを停止した後、必要なサービスのみを起動
disable_all_services

##### Database Backend #####
#--------------------------
# Enable Database Backend MySQL(Default) or PostgreSQL
enable_service mysql
#enable_service postgresql

##### RPC Backend #####
#----------------------
# Enable RPC Backend RabbitMQ(Default) or Others
enable_service rabbit

##### Keystone - Identity Service #####
#--------------------------------------
enable_service key

# For Region One
#REGION_NAME=RegionOne

# For Region Two or Later
#disable_service horizon
#KEYSTONE_SERVICE_HOST=<KEYSTONE_IP_ADDRESS_FROM_REGION_ONE>
#KEYSTONE_AUTH_HOST=<KEYSTONE_IP_ADDRESS_FROM_REGION_ONE>
#REGION_NAME=RegionTwo
#KEYSTONE_REGION_NAME=RegionOne

# Disabling Identity API v2
#ENABLE_IDENTITY_V2=False

##### Horizon - Dashboard Service #####
#--------------------------------------
enable_service horizon

##### Nova - Cloud Computing Fabric Controller #####
# http://docs.openstack.org/developer/devstack/guides/nova.html
#--------------------------------------------------------------
# (必須)nova network serviceの停止
disable_service n-net

###### Neutron - Network Connectivity Service #####
# http://docs.openstack.org/developer/devstack/guides/neutron.html
#-----------------------------------------------------------------
enable_service neutron

# Neutron options
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
#enable_service q-fwaas
#enable_service q-lbaas
#enable_service q-vpn

Q_USE_SECGROUP=True
FLOATING_RANGE=192.168.9.0/24
FIXED_RANGE=10.0.0.0/24
Q_FLOATING_ALLOCATION_POOL=start=192.168.9.200,end=192.168.9.209
PUBLIC_NETWORK_GATEWAY=192.168.9.1
PUBLIC_INTERFACE=eth0
Q_USE_PROVIDERNET_FOR_PUBLIC=True

# Neutron ML2 with LinuxBridge
Q_PLUGIN=ml2
Q_AGENT=linuxbridge
LB_PHYSICAL_INTERFACE=eth0
PUBLIC_PHYSICAL_NETWORK=default
LB_INTERFACE_MAPPINGS=default:eth0

# Neutron ML2 with OpenvSwitch
#Q_PLUGIN=ml2
#Q_AGENT=openvswitch
#OVS_PHYSICAL_BRIDGE=br-ex
#PUBLIC_BRIDGE=br-ex
#OVS_BRIDGE_MAPPINGS=public:br-ex

# VLAN configuration
#Q_PLUGIN=ml2
#ENABLE_TENANT_VLANS=True
 
# GRE tunnel configuration
#Q_PLUGIN=ml2
#ENABLE_TENANT_TUNNELS=True
 
# VXLAN tunnel configuration
#Q_PLUGIN=ml2
#Q_ML2_TENANT_NETWORK_TYPE=vxlan

##### Glance - Image Registry Service #####
#------------------------------------------
IMAGE_URLS=http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-uec.tar.gz
enable_service g-api
enable_service g-reg

##### Cinder - Block Storage as a Service #####
#----------------------------------------------
#disable_service cinder
#VOLUME_BACKING_FILE_SIZE=8192M

##### Ceilometer - Data Collection Service #####
#-----------------------------------------------
enable_plugin ceilometer $CEILOMETER_REPO $CEILOMETER_BRANCH
enable_service ceilometer-acompute
enable_service ceilometer-acentral
enable_service ceilometer-notification
enable_service ceilometer-collector
enable_service ceilometer-api
#@@@ Aodhをオンにする場合はceilometer-alarmをdisableにする。
#enable_service ceilometer-alarm-notifier
#enable_service ceilometer-alarm-evaluator
#enable_service ceilometer-ipmi

##### Aodh - Alarming Service #####
#----------------------------------
enable_plugin aodh $AODH_REPO $AODH_BRANCH
enable_service aodh-evaluator
enable_service aodh-notifier
enable_service aodh-api

##### Heat - Orchestration Service #####
#-----------------------------
#enable_service heat
#enable_service h-api
#enable_service h-api-cfn
#enable_service h-api-cw
#enable_service h-eng
#HEAT_STANDALONE=True

##### Swift - Object Storage #####
#---------------------------------
#enable_service s-proxy
#enable_service s-object
#enable_service s-container
#enable_service s-account

##### Logging #####
#------------------
LOGFILE=$DEST/logs/stack.sh.log
LOGDIR=$DEST/logs
LOGDAYS=1
LOG_COLOR=False

##### Syslog #####
#-----------------
#SYSLOG=True
#SYSLOG_HOST=$HOST_IP
#SYSLOG_PORT=516
```
```bash:
# devstackの実行
## ダウンロードとインストールを実施するため、時間がかかるので注意
$ ./stack.sh
```
<Font color="red">※ここで再起動するとだいたい壊れるので、その場合はアンインストールして最初から</font>

## DevStackのアンインストール
```bash:
# ローカルリポジトリを含め完全削除
$ ./clean.sh

# インストールパッケージのみ削除
$ ./unstack.sh
```

## ダッシュボードにブラウザでアクセス
+ http://xx.xx.xx.xx/dashboard にインターネットブラウザでアクセス
    + ユーザ名：admin、パスワード：ADMIN_PASSWORDの設定値



[参考] (http://stackoverflow.com/questions/35273485/problems-with-devstack-configuration-with-ceilometer)