openDCIMインプレッション（インストール編）

プログラマがデータセンターの管理を兼務するのはDevOpsなんでしょうか。よくわかりませんが、オープンソースのデータセンター管理ツール、openDCIMを評価してみました。

#動作環境

Linux, Apache, MySQL, PHP の古き良き伝統的LAMPです。Linuxが推奨ですが、Cygwinで動かしてみたら一応動きました。[公式](http://opendcim.org/)にはSSLが必要と書いてありますが、無暗号HTTPでも動きます。

PHPには[mbstring](http://php.net/mbstring), [gettext](http://php.net/manual/book.gettext.php), [PDO_MySQL](http://php.net/manual/pdo.installation.php)モジュールが必要です。[SNMP](http://php.net/manual/book.snmp.php)モジュールも必要と書いてありますが、なくても一応動きます。

Apacheには[mod_rewrite](http://httpd.apache.org/docs/current/mod/mod_rewrite.html)が必要です。また、今回のインストールではApacheの機能を使ってBasic認証しますので、[mod_auth_basic](http://httpd.apache.org/docs/current/mod/mod_auth_basic.html)もインストールします。また、``.htaccess``を使いますので、Apacheの設定でAllowOverrideを指定します。

MySQLは、my.cnfのsql-modeでSTRICT_TRANS_TABLESを__使わない__設定にする必要があります。

意外と物入りですね！そんなわけですので、LAMPなら既存の環境があるという場合でも、そこに相乗りインストールするのはちょっとしんどいかもしれません。

#インストール手順

インストール手順自体は[オープンソースのデータセンター管理ツール『openDCIM』をインストールしてみた](https://orebibou.com/2015/06/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC%E7%AE%A1%E7%90%86%E3%83%84%E3%83%BC%E3%83%AB%E3%80%8Eopendcim/)の通りでおおむね構いませんが、phpには__PDO_MySQLが必須__です。これがないことにはセルフテストにすら入れず空白画面とApacheのエラーログが出て終わりになってしまいますので、まずはPDOを確保します。

##ダウンロードと展開
[ダウンロードページ](http://opendcim.org/downloads.html)からopenDCIM-4.3.tar.gzをダウンロードして適当な場所に展開します。次に、``db.inc.php-dist``ファイルを``db.inc.php``という名前に書き換えます。これが設定ファイルですので、インストール先の環境に合わせて書き換えます。

MySQLのホスト名、データベース名、ユーザ名、パスワードといった項目を設定していきます。MySQLのポート番号が3306以外だとかUNIXドメインソケットを使いたいとかいう場合は[PHPマニュアル](http://php.net/manual/ja/ref.pdo-mysql.connection.php)でも見て何とかして下さい。

```php
	$dbhost = 'localhost';
	$dbname = 'dcim';
	$dbuser = 'dcim';
	$dbpass = 'dcim';
```

認証方式も指定できます。今回はデフォルトのApacheをそのまま使いますが、OauthやLDAPも使えます。

```php
	if ( !defined( "AUTHENTICATION") ) {
		define( "AUTHENTICATION", "Apache" );

	/* If you want to use Oauth authentication, comment the above 3 lines, uncomment the next 4 lines
	   and place your authentication handler in login.php (create symbolic link). 
	   ex.  cp oauth/login_with_google.php oauth/login.php
	*/
		// define( "AUTHENTICATION", "Oauth" );

	/* 	LDAP authentication and authorization, which is far from simple.
		Don't even try to enable this unless you know how to query
		your LDAP server.  */
		// define( "AUTHENTICATION", "LDAP" );
	}
```

#Basic認証の設定

.htpasswdでユーザーIDとパスワードを設定します。ここで設定するユーザーIDは、そのままopenDCIMのユーザーIDになります。管理者っぽいかっこいい名前をつけましょう！

```bash
$ touch .htpasswd
$ htpasswd.exe ./.htpasswd dcimadmin
New password:
Re-type new password:
Adding password for user dcimadmin
```

##MySQLのアカウント作成

MySQL上でユーザーとデータベースを作ります。

```mysql
> CREATE DATABASE dcim;
> CREATE USER dcim IDENTIFIED BY 'dcim';
> GRANT ALL PRIVILEGES ON dcim.* TO 'dcim';
```

ここまでやれば大丈夫。``CREATE TABLE``はopenDCIMに内蔵されているインストーラがやってくれます。

#初回アクセス

ここまで来たらさっそくアクセス！私の場合は``http://localhost/openDCIM-4.3/``とかそんなURLです。これでインストーラが起動します。

![opendcim-setup1.png](https://qiita-image-store.s3.amazonaws.com/0/99231/0b869289-7cf8-fd64-bdc9-c334134dca13.png)

``Pre-flight environment checks``という題名の画面が出てきたら、たぶんFAILという赤字がぞろぞろ出て来ると思うので、一つ一つ順番に潰していきます。もっとも全部GOOD（緑字）にしないと先へ進まないという話でもないらしく、私の場合はOS（LinuxではなくCygwin）、SNMP（PHPのsnmp拡張が入っていない）の２項目がFAILでしたが通りました。

この段階を過ぎると、最初のDepartment（部署）を作るように促されます。

![opendcim-setup2.png](https://qiita-image-store.s3.amazonaws.com/0/99231/aae57927-8290-ce84-fc6e-a3d17edb0b31.png)

ちょっと分かりにくいのは、Departmentの選択肢が空白になっているところです。プルダウンを開くと「New Department」というのが一つあるのですが、それを選択するとページの再読み込みが始まり、せっかく選んだ「New Department」が消え去って空白に戻ってしまいます。何のこっちゃという気分になりますが、この場合は、Departmentの選択肢は空白のままで放っておいて構いません。そのまま「Department Name」欄に書き込んでCreateボタンを押してしまえば大丈夫です（他の欄は後から訂正できますので、今は空欄のままで構いません）。

これと同じ要領で、データセンターとラックを一つずつ作ります。

すると、サイドバーにCompleteというタブが現れます。

![opendcim-setup5.png](https://qiita-image-store.s3.amazonaws.com/0/99231/86802864-fb22-290d-502f-f0eccfdf2678.png)

ここまで来たらインストールは完了ですので、Apache上のopenDCIMフォルダからinstall.phpファイルを削除してください。

改めてopenDCIMのURL（例えば``http://localhost/openDCIM-4.3/``）にアクセスすると、openDCIMが動いています。

![opendcim-setup6.png](https://qiita-image-store.s3.amazonaws.com/0/99231/335b428d-9f95-738a-8a7a-2922e072b507.png)

#Q&A

##日本語はないのか。

アゼルバイジャン語、カタロニア語（アンドラ公国）、ドイツ語、英語（米国）、スペイン語、フランス語、ガリシア語（スペイン）、韓国語、ポルトガル語（ブラジル）、ロシア語、スロベニア語、ウクライナ語、中国語が用意されていますが日本語がありません。

誰か翻訳してみませんか。1,092項目ありますので、なかなか根性が要りそうです。

##nginxにインストールできないか。

そのままでは無理です。
mod_rewriteを使っているのは[REST API](http://wiki.opendcim.org/wiki/index.php/API)なので、そこは何とかするにしても、httpdから渡される環境変数をあっちこっちで使っているので、かなり大幅な改造が必要になると思います。

##openDCIMはセキュアか。

残念ながらセキュアとは言い難いです。XSSとかいろいろあってお世辞にも褒められた作りではありません。社内の限られた範囲で使うに留めるべきでしょう。

以上！幸運を祈る。
続きは気が向いたら書きます。

#参考文献

openDCIM（公式）
openDCIM Foundation, Inc.
http://opendcim.org/

blacknon (2015)
オープンソースのデータセンター管理ツール『openDCIM』をインストールしてみた
俺的備忘録 〜なんかいろいろ〜
https://orebibou.com/2015/06/%E3%82%AA%E3%83%BC%E3%83%97%E3%83%B3%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%B3%E3%82%BF%E3%83%BC%E7%AE%A1%E7%90%86%E3%83%84%E3%83%BC%E3%83%AB%E3%80%8Eopendcim/