Packstackを使ってCentOS7.7にOpenstack SteinのAll in One環境を立ててみる

##目次
- OpenstackのAll in One環境
- 環境
- 手順
- やらかしたこと
- 参考サイト

##OpenstackのAll in One環境
私のOpenstackのイメージはコンピュートノードとそれを制御するコントローラがバラバラのマシンに乗っているイメージだったのだが、RDOにて用意されているPackstackを使うことで、一つのマシン上に全てを立ち上げるAll in Oneという構成が作れるようだ。
https://www.rdoproject.org/install/packstack/
Qiitaの先輩方の記事を参考に私も自宅にOpenstack環境を作ってみようとチャレンジしてみる。

##環境
Windows10にインストールしたVMWareplayer上にCentOS7を用意した。
OSはyum update後にver7.7
リソースはCPU4コア、MEM4GB、HDD80GBを振った。
（ネタバレになるが、失敗したのでメモリを8GBに増量した。）
今回はお試しに立ち上げるので、NICは1つのみ用意。
NICはブリッジの設定にし、192.168.1.20/24を設定。
デフォルトゲートウェイはWindowsに合わせ、192.168.1.1
DNSは過去の成功例に倣い、8.8.8.8

##手順
手順は以下を参考に進めた。
https://qiita.com/mfujita/items/ee2da9d1e241926fc790
https://www.rdoproject.org/install/packstack/

ファイアウォールの無効化とNetworkManagerの無効化。
RDOの推奨です。

```console
# systemctl disable firewalld
# systemctl stop firewalld
# systemctl disable NetworkManager
# systemctl stop NetworkManager
# systemctl enable network
# systemctl start network
```
SE Linuxも無効化します。
リブート、忘れずに。

```console
# vi /etc/sysconfig/selinux
SELINUX=disabled  ←書き換える

# shutdown -r now
```
アップデートと、必要なものをインストールしていきます。

```console
# yum update -y
# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
```

```console
# yum install -y centos-release-openstack-stein
# yum update -y
# yum install -y openstack-packstack
```

answer.txtの作成・編集
packstack構築時の読み込ませる設定ファイルがこのanswer.txt

```console
# packstack --gen-answer-file=answer.txt
# vi answer.txt
```

以下の項目を変更
ダッシュボード画面のパスワードをhoge12345に変更

```
CONFIG_KEYSTONE_ADMIN_PW=hoge12345
```


タイムアウトの時間設定を300→0に変更

```console
# cd /usr/share/
# grep -Ri "timeout = 30"
```

以下の4つの"db_sync timeout = 300"を"db_sync timeout = 0"にviで編集する。

```
openstack-puppet/modules/nova/manifests/db/online_data_migrations.pp:  $db_sync timeout = 300,
openstack-puppet/modules/nova/manifests/db/sync.pp:  $db_sync_timeout = 300,
openstack-puppet/modules/nova/manifests/db/sync_api.pp:  $db_sync_timeout = 300,
openstack-puppet/modules/neutron/manifests/db/sync.pp:  $db_sync_timeout = 300,
```

編集したら念のため、0になっていることを確認しましょう。

```console
# grep -Ri "timeout = 0"
```

いよいよ肝が冷えるpackstackコマンド。ディレクトリはrootに戻ります。

```console
# cd
# packstack --answer-file=answer.txt --timeout=0 --debug
```


下の画面で10分ほど固まります。本当に冷や冷やします。
![2020-02-14 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519662/87685ee4-48d7-dd9e-79c9-f1bd5dc3e870.png)

***...どーん！***
>ERROR : Error appeared during Puppet run: 192.168.1.20_controller.pp
>Error: Cannot allocate memory - fork(2)

どうやらメモリ不足で失敗しました。

一度、VMを落として、メモリを8GBにしてみます。なぜ最初にケチった？

```console
# cat /proc/meminfo
MemTotal:        7990124 kB
```
もう一度流してみましょう。

```console
# packstack --answer-file=answer.txt --timeout=0 --debug
```
![2020-02-14 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519662/45c1c356-b102-a172-bff6-ff96ffd81db8.png)

***Installation completed successfully!***

どうやら成功したようです。
成功すると(しなくても)Horizonと呼ばれるダッシュボードのアドレスを教えてくれます。
answerファイルで設定したパスワードでログインできます。
answer.txtを弄らなくても、adminパスワードは/root/keystonerc_adminというファイルの中に入っています。

HORIZONの画面はこのような感じです。
![2020-02-14 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519662/0869b198-8f27-e08d-0cd7-3efea988cc94.png)

これで、インスタンスを立ち上げたり、ネットワークを構築したりする最初の**土台の部分**が作れました。
もう少し進めたかったのですが、予想外にトラブったのでここまでとします。

次回は、この上にインスタンスを立ち上げます。
[自宅に構築したOpenStack環境にインスタンスを立ち上げてみるまでの話…]
(https://qiita.com/A0yama_anpl/items/126dfdaffe884c0bd6cf)

##やらかしたこと
・SELINUXを無効化しようとして、違う箇所を書き換える。
　結果、カーネルパニックを起こす。
　以下を参考に起動DISKからレスキューモードに入り、救出。
[SElinuxの無効化に失敗してOSが起動しなくなった話](https://qiita.com/daisuke0115/items/4b0ed3a5888cf81efd0a)

##参考サイト
非常にお世話になりました。
[【OpenStackチャレンジ】 第1回 OpenStackインストール編](https://www.adoc.co.jp/blog/e000247.html)
[DbsyncのエラーでOpenStackがインストールできない。トラブルシュートを備忘録](https://uncle-atsushi.com/openstack_manualinstall_error/)
[OpenStack Mitakaの導入 (Win7, Virtual Box, CentOS 7, RDO)](https://qiita.com/mfujita/items/ee2da9d1e241926fc790)