SoftLayerの無料ベアメタルでOpenStackの学習をする(2) - サーバー環境の確認とDevStack環境の用意

[前回はこちら](http://qiita.com/orz/items/88be5659f8993bce9070) - [次回はこちら](http://qiita.com/orz/items/4629577032a1a0f77d53)
***
#これはなに
[「OpenStackクラウドインテグレーション オープンソースクラウドによるサービス構築入門」](http://www.shoeisha.co.jp/book/detail/9784798139784)の実習をSoftLayerの無料ベアメタルで行う記録である。
![OpenStackクラウドインテグレーション オープンソースクラウドによるサービス構築入門](http://www.seshop.com/static/images/product/17681/L.png)

# サーバー環境の確認
[前回](http://qiita.com/orz/items/88be5659f8993bce9070)はSoftLayerにベアメタルのオーダーをした。今回は、オーダー後、2時間ちょっとで「Your SoftLayer Bare Metal Server (test.os.local) has been provisioned」というメールが来た。「test.os.local」が今回サーバーにつけた名前。ポータルから確認して、サーバー名の右側に時計のアイコンが消えていれば、プロビジョニングは完了している。
![02-01.png](https://qiita-image-store.s3.amazonaws.com/0/71995/314fbb6c-3707-2fc6-67be-12f7f36a44e5.png)
アニバーサリーデート(月締め日)を越えてサーバーを維持すると、2ヶ月目以降は1日使うだけでも1ヶ月分の料金がかかる。私のような小心者はここでActionからCancelしてしまう。月額の仮想サーバーは、即時キャンセルとアニバーサリーデート・キャンセルが選べるが、月額ベアメタルはアニバーサリーデート・キャンセルの予約のみ。これで、アニバーサリーデートに自動キャンセルされ、来月は料金がかからない。もし、予算がつくとか、来月も使いたいという場合は、キャンセルのキャンセルができる。
デバイス名をクリックして詳細を確認すると、HWの詳細やrootのパスワードが確認できる。**root?ubuntuなのに?** はい。SoftLayerのubuntuは、rootでのログインが可能になっている。
***
sshで入って、中身を確認する。
CPUはXeon 1270 3.40GHzをオーダーしたけれど、ひとつ上の3.50GHz($10高い)になっている。

```
root@test:~# cat /proc/cpuinfo
～～～
model name      : Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz
～～～
```

メモリーはオーダーどおり32GB。

```
root@test:~# cat /proc/meminfo
MemTotal:       32908248 kB
～～～
```

DISKは500GBのオーダーに対して1TBのものがついている。SoftLayerでは、在庫がない場合、無料でグレードアップしてくれることが多いらしい。

```
root@test:~# fdisk -l /dev/sda

Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
～～～
```

環境に問題なさそうなので、作業を始めよう。

# 第1章　OpenStackの概要
読むだけの章で、作業なし。

# 第2章　クイックスタート
作業環境を構築する章。「2.1 HP Helion Public Cloud」「2.2 SUSE Cloud」「2.3 RDOによる環境構築」に続き「2.4　DecStackによる環境構築」。今回は、DevStackでやるので、2.4へ移動。

## 2.4 DecStackによる環境構築
2.4.1は環境全体像の説明、2.4.2はubuntuの導入。今回は済んでいる。

### 2.4.3 ホストLinuxの環境設定
書籍は、ubuntu DesktopなのでGUIからTerminalを開いているけれど、今回はサーバーなので操作は基本的にsshで行う。79ページで「sudo apt-get」をしているけれど、もともとrootでログインしいるので、sudoはつけなくて「apt-get」でOK。つけてももちろん問題ない。open-sshサーバーは導入・起動済みなので作業は不要。

### 2.4.4 ホストLinuxの環境設定
この本では、[GitHub上のサポートサイト https://github.com/josug-book1-materials/](https://github.com/josug-book1-materials/)に設定ファイルや構築スクリプトを用意していて、入力が面倒な人(私)や入力ミスが多い人(私)に備えている。そのため「git clone」して、設定されているスクリプトを流せば、基本的に問題なく作業ができるようになっている。
当項のGitHubのディレクトリーはこちら。

[https://github.com/josug-book1-materials/ubuntu-virtinst](https://github.com/josug-book1-materials/ubuntu-virtinst)

まず、[openstack.xml](https://github.com/josug-book1-materials/ubuntu-virtinst/blob/master/network/openstack.xml)を元にKVMの仮想ネットワークを設定する。192.168.100.0/24が設定される。
次に、KVMのVMを3台立てる。用意されている作成スクリプトと自動導入用のpreseed設定ファイルは下記のとおり。

| 仮想マシン          |ホスト名| IPアドレス    |作成スクリプト|preseed.cfg|
|:------------------:|:-----:|:------------:|:------------:|:------------:|
| コントローラーノード |stack01|192.168.100.10|[virtinst-stack01.sh](https://github.com/josug-book1-materials/ubuntu-virtinst/blob/master/virtinst-stack01.sh)|[preseed.cfg](https://github.com/josug-book1-materials/ubuntu-virtinst/blob/master/stack01/preseed.cfg)|
| コンピュートノード#1 |stack02|192.168.100.11|[virtinst-stack02.sh](https://github.com/josug-book1-materials/ubuntu-virtinst/blob/master/virtinst-stack02.sh)|[preseed.cfg](https://github.com/josug-book1-materials/ubuntu-virtinst/blob/master/stack02/preseed.cfg)|
| コンピュートノード#2 |stack03|192.168.100.12|[virtinst-stack03.sh](https://github.com/josug-book1-materials/ubuntu-virtinst/blob/master/virtinst-stack03.sh)|[preseed.cfg](https://github.com/josug-book1-materials/ubuntu-virtinst/blob/master/stack03/preseed.cfg)|

VMの作成スクリプトを確認すると、ftp.riken.go.jpからhttpでubuntuを取得している。時間がかかりそうなのと、依存関係はないはずなので、本では順番に作成しているが、sshを3セッションはって平行して3台立ててしまう。
IPアドレスの設定は、preseed.cfgに指定されている。
メモリーやDISKのサイズを変更するなら、作成スクリプトのパラメーターを変更するが、今回はメモリー32GB、DISK 1TBなので、そのまま実行する。

stack01のみ「--network」が2回指定され、仮想NICが2枚ついている。preseedで構成されなかった[eth1の設定](https://github.com/josug-book1-materials/ubuntu-virtinst/blob/master/stack01/interfaces)を/etc/network/interfacesに追加しrebootする。
stack02/stack03には「--disk」の指定が2回ある。追加ディスクはCinder用である。

### 2.4.5 DevStackのインストールと設定
ubuntuを導入したVMにDevStackを導入する。当項のGitHubのディレクトリーはこちら。

[https://github.com/josug-book1-materials/quick-devstack](https://github.com/josug-book1-materials/quick-devstack)

まず、**コントローラーノード stack01**の導入をする。
[./stack01/setup.sh](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack01/setup.sh) を流す。下記があるので、今回の環境はjunoということらしい。

```
git clone -b stable/juno git://git.openstack.org/openstack-dev/devstack.git $DEVSTACK_DIR
```

[./stack01/setup.sh](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack01/setup.sh) は構成情報の [local.conf](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack01/local.conf)、[extras.d/99-demo.sh](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack01/99-demo.sh) を用意する。
[local.conf](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack01/local.conf) を見ると、起動させるサービスとかauth_urlとかの情報が入っている。

git://git.openstack.org/openstack-dev/devstack.git から持ってきたstack.shを実行して、DevStackをstack01に導入する。

次に**コンピュートノード stack02/03**の導入をする。
コンピュートノードの導入は、コントローラーノードの導入に依存するので、stack01の導入完了を待つのが安全である(エラーになっても、再実行すれば適当なところからやってくれるはずだから、という考え方もある)。

[./stack02/setup.sh](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack02/setup.sh) も同様に、構成情報の [local.conf](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack02/local.conf)、[extras.d/99-demo.sh](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack02/99-demo.sh) を用意する。[local.conf](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack02/local.conf) を見ると、起動させるサービスが、[stack01用](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack01/local.conf)よりかなり少ないなど、中身がずいぶん違う。stack02はアベイラビリティゾーンaz1用なので、az1の情報しかない。

[./stack03/setup.sh](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack03/setup.sh) も同様に [local.conf](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack03/local.conf)と[extras.d/99-demo.sh](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack03/99-demo.sh) を用意する。[local.conf](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack03/local.conf) を見ると、[stack02用](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack02/local.conf)とほぼ同じだが、stack03はアベイラビリティゾーンaz2用なので、az2の情報しかない。

各々で、git://git.openstack.org/openstack-dev/devstack.git から持ってきた、stack.shを実行して、DevStackを導入する。stack02/03は互いに独立なので、同時に導入しても問題ない(と思う)。

3台へのDevStackの導入が終わったら、stack01で [post-stack](https://github.com/josug-book1-materials/quick-devstack/blob/master/stack01/post-stack.sh) を実行して、環境を整える。
実行しすると、25行目の「neutron net-create Ext-Net --router:external=True」でエラーになった。

```
ubuntu@stack01:~/quick-devstack$ neutron net-create Ext-Net --router:external=True
usage: neutron net-create [-h] [-f {html,json,shell,table,value,yaml}]
                          [-c COLUMN] [--max-width <integer>]
                          [--prefix PREFIX] [--request-format {json,xml}]
                          [--tenant-id TENANT_ID] [--admin-state-down]
                          [--shared] [--router:external]
                          [--provider:network_type <network_type>]
                          [--provider:physical_network <physical_network_name>]
                          [--provider:segmentation_id <segmentation_id>]
                          NAME
neutron net-create: error: argument --router:external: ignored explicit argument u'True'

```
「--router:external」に明示的に「=True」がついているのが嫌らしい。[junoのinstall-guideのneutronのところ](http://docs.openstack.org/juno/install-guide/install/apt/content/neutron_initial-external-network.html)を見ると「**--router:external True**」と「**=**」が無い。

```
$ neutron net-create ext-net --router:external True \
  --provider:physical_network external --provider:network_type flat
```
これで実行すると「Invalid values_specs True」とエラー。

```
ubuntu@stack01:~/quick-devstack$ neutron net-create Ext-Net --router:external True
Invalid values_specs True
```
[havanaのガイド](http://docs.openstack.org/havana/install-guide/install/apt/content/install-neutron.configure-networks.html)に「**--**」を指定する方法が書いてあったので、

```
# neutron net-create ext-net -- --router:external=True SPECIAL_OPTIONS
```
「**--**」をつけたところ成功。「router:external」も「True」になっている。 

<pre>
ubuntu@stack01:~/quick-devstack$ neutron net-create Ext-Net -- --router:external=True
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | 339243b9-a885-4cf2-9652-b5ebdc5f33a9 |
| name                      | Ext-Net                              |
| provider:network_type     | vxlan                                |
| provider:physical_network |                                      |
| provider:segmentation_id  | 1002                                 |
| router:external           | True                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 66c635f0be9646e6856bfa8319a1bf1d     |
+---------------------------+--------------------------------------+
</pre>

それ以外は問題なし。gitしたスクリプトを単純に流すのもいいけれと、設定ファイルもあるので、gitはしておいて、スクリプトは1行づつコピペでコマンド、パラメーター、出力を確認しながら、実行するのがいいと思う。何をやっているか、少しは想像できるようになる。


### 2.4.6 DevStackのインストールと設定
この項は、ここまで作った環境の確認。「コマンド XXXX-list」を、nova、cinder、neutron に対して発行して、問題ないか確認する。

### 2.4.7 作業用端末とCentOS6イメージの準備
この本では「新人エンジニアがOpenStack上のクラウドにアプリケーション環境を構築する」というストーリー仕立てになっている。ホストLinuxは、このエンジニアのデスクトップ環境用に設定する。

当項のGitHubのディレクトリーは引き続きこちら。

[https://github.com/josug-book1-materials/quick-devstack](https://github.com/josug-book1-materials/quick-devstack)

[install_cli.sh](https://github.com/josug-book1-materials/quick-devstack/blob/master/install_cli.sh)でクライアントツールを導入し、再ログオンする。これでnovaとかに対するサブコマンドにTAB補完が利くようになる。
記載どおり、環境設定ファイルopenrcを用意し、sourceコマンドで読ませる。内容は[こちら](https://github.com/josug-book1-materials/quick-devstack/blob/master/openrc-infra-user)のサブセット。
今回は、novaのゲストOSにはCentOS6が使われる。ガイドに従い、CentOS6のイメージを作成し、Glanceにアップロードする。
KVMゲストのディスクを操作するlibguestfs-toolsとapache2を導入する。apache2は、CentOS6のイメージをGlanceにアップロードするときに、イメージを提供するhttpサーバーの役割を果たす。
```
 sudo apt-get -y install libguestfs-tools apache2
```
CentOS6の導入とイメージ化は[build_image.sh](https://github.com/josug-book1-materials/quick-devstack/blob/master/build-image/build_image.sh)を使う。使われる[ks設定はこちら](https://github.com/josug-book1-materials/quick-devstack/blob/master/build-image/centos6-ks.cfg)。
「System halted.」が表示されたら[Ctrl]+[]]を押す。qcow2形式への変換が自動的に行われ、apache2で公開される。
「glance image-create」でインポートして「glance image-list」で「active」になっていることを確認する。
今回のサーバーは公開されているので、速やかにapache2を停止する。

```
root@test:~# service apache2 stop
 * Stopping web server apache2 
 * 
```

## 2.5 OpenStack用仮想マシンイメージの作成
ここは「2.4.7 作業用端末とCentOS6イメージの準備」とかでやった、イメージ作成の解説。特に、作業はない。

***
今回は、ベアメタルの環境を確認して、DevStackの環境を構築した。
***
[前回はこちら](http://qiita.com/orz/items/88be5659f8993bce9070) - [次回はこちら](http://qiita.com/orz/items/4629577032a1a0f77d53)