VMwareでPHP(symfony)開発環境作るまでのメモ

作業メモ。すっげー長いよ。
VMWareに設定。

# CentOSのインストール
## CentOSのイメージファイルを手に入れる
参考：[http://www.server-world.info/query?os=CentOS_7&p=download](http://www.server-world.info/query?os=CentOS_7&p=download)

最小構成(minimal)ではなくDVD.iso入れます。
のでDL。

## VMWareにインストール
普通に新規作成でやる。
やってみてわかんなかったこと↓

* Linuxのパーソナライズの「フルネーム」がよくわからん。(とりあえずユーザー名と同じにした)
* rootは使えない(rootユーザーは存在するので、別ユーザーを入れないといけないっぽい)
* 仮想ディスクは単一ファイルとして格納
* キーボードは「日本語」がいい

これで起動してみる。
VMwareから起動する。
できた。

※追記
フルネームはWindowsでいうところのアカウント名みたいなやつだそうです。
(人から聞きました)

### 追記
#### Linuxのパーソナライズについて
[http://linux.oboe-gaki.com/archives/000372.html](http://linux.oboe-gaki.com/archives/000372.html)

フルネームはユーザー名につけられる名前っぽい。
ユーザー名で設定できるのは一般ユーザーだそうな。
なるほど。

#### 仮想ディスクの単一ファイル
分けるとコピーするときコピー漏れが出ちゃったりして大変なのでこっちを選ぶ方がいいらしい。
分割のメリットまでは不明。


# Apacheのインストール
参考：[http://weblabo.oscasierra.net/installing-apache-with-yum/](http://weblabo.oscasierra.net/installing-apache-with-yum/)

```
yum install httpd
```

* 何にも設定してないのに外に取りにいけるのは、ネットワークのアダプタ[^1]が自動で出来てるから。
* アダプタはNAT[^2]が1個のみ。外にいけるけど入れない状態。
* H/WもVMWareが自動認識してくれる。

## 問題発生？(CentOSの問題)
一旦パワーオフ、それで続きをやろうとしてこんなメッセージが出る

```
対応するデバイスがホストに存在しないため仮想デバイスide1.0に接続できません
```

よくわからないので「いいえ」→もっかい起動し直す→起動時にカーネルを選択する画面が出てくる。
とりあえず適当に選択したら前まで英語表記だったのに日本語で出るようになったよ！
しかもなんか知らんけど前まで英語名でしか表示しなかったのに

### エラーメッセージについて
参考：[http://ameblo.jp/hitomazu-kyuukei/entry-10958890508.html](http://ameblo.jp/hitomazu-kyuukei/entry-10958890508.html)

どうやら光学ドライバにつながらないよ！ってことらしい。
まあ使わないし「いいえ」でいいか……。
使うことになったら調べる。

### カーネルの選択画面について
参考：[http://knowledge4linux.blogspot.jp/2014/11/centos7rhel7kernel.html](http://knowledge4linux.blogspot.jp/2014/11/centos7rhel7kernel.html)

参考サイトの一番上と下のカーネルだけあるっぽい。
たぶん下の方が英語のカーネル……？？
→起動してみたらそんなこともなかった
resqueモードのやつっぽいな…。
これは毎回出るのかな？？
でもほかのVM(人からもらったやつ)だと出ないなあ。

とりあえず起動はできるので放置。
あとでまた調べる機会あったら調べる。
→やってみたけどまだ選択画面出る。

# httpdの自動起動設定
とりあえず続き！
起動時に自動で起動できるようにする。

```
chkconfig httpd on
```

再起動して確認→自動起動OK！
細かい設定はあとで。

# Apacheをソースコードからビルドする
参考：[http://weblabo.oscasierra.net/install-apache24-1/](http://weblabo.oscasierra.net/install-apache24-1/)
そういえば**「Apachはソースコードからビルドしてね」**って指示だったんだ。
てへへ。

## yumでインストールしたApacheをアンインストール
`yum remove httpd`で一旦インストールしていない状態に戻す。

## インストールに必要なモノをインストール
```
yum install gcc make pcre pcre-devel wget
```

## APRのインストール
> APR (Apache Portable Runtime) というものをインストールする必要があります。 APR は OS の違いを吸収してくれるライブラリです。
というわけで入れてみましょう。

今は1.5.2が最善のバージョンっぽい。

```
# cd /usr/local/src
# wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//apr/apr-1.5.2.tar.gz
# tar -xvzf apr-1.5.2.tar.gz
# cd apr-1.5.2
# ./configure --prefix=/opt/apr/apr-1.5.2
# make
# make test
# make install
```

`cd /usr/local/src`→インストールしたいディレクトリへ移動
`wget`→URLからデータをダウンロード
`tar -xvzf`→解凍して展開
`./configure`→インストール時のMakefile作成スクリプト
`make`→Makefileとかのコンパイルとか自動でしてくれる
`make test`→動作検証
`make install`→インストール

## APR-utilのインストール
1.5.4が最新ぽい。

```
# cd /usr/local/src
# wget http://ftp.jaist.ac.jp/pub/apache//apr/apr-util-1.5.4.tar.gz
# tar -xvzf apr-util-1.5.4.tar.gz
# cd apr-util-1.5.4
# ./configure --prefix=/opt/apr-util/apr-util-1.5.4 --with-apr=/opt/apr/apr-1.5.2
# make
# make test
# make install
```

コマンドの詳細は前項でやったので略。

## Apacheのインストール
### ソースコードのダウンロード
最新版は2.4.20な模様。

```
# cd /usr/local/src
# wget http://ftp.jaist.ac.jp/pub/apache//httpd/httpd-2.4.20.tar.gz
# tar -xvzf httpd-2.4.20.tar.gz
```

### コンパイルとインストール

```
# cd /usr/local/src/httpd-2.4.9
# ./configure --prefix=/opt/httpd/httpd-2.4.20 --with-apr=/opt/apr/apr-1.5.2 --with-apr-util=/opt/apr-util/apr-util-1.5.4
# make
# make install
```

この時`make test`はできない。→よくわからず？？

### 起動
# /opt/httpd/httpd-2.4.20/bin/apachectl start

→これでできた！
が、↓のメッセージが出る。

```
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
```
確実にサーバー設定してないからlocalhost.localdomainが取れないよ！設定して！みたいなことか。

`/opt/httpd/httpd-2.4.20/conf/httpd.conf`で設定する。

### httpd.configの設定
参考：[http://kazmax.zpp.jp/apache/apache1.html](http://kazmax.zpp.jp/apache/apache1.html)

#### ①UserとGroupを設定する
デフォルトだとUser, Groupに`deamon`が設定されている。
セキュリティ的には専用のものを用意した方が良いらしい。
(他のシステムでもdeamonを使う可能性があるので)

※deamonグループ：Linuxのサーバー用グループ

作ろうとしたら`apache`さんが既にいるみたいなので、設定。
　

#### ②ServerNameを設定する。

`localhost:80`と設定してみる。

　
#### ③Options Indexesの設定
`Directory "/うんちゃら/htdocs/"`の下にある`Options`から'Indexes'を削除する。

ディレクトリにアクセスしたときに中身が見えちゃうApacheのアレを抑制するため。
CentOSをDLするときに見えるやつ。
あれApacheだったんか。

`-Indexes`でもよい模様。今回は消しました。

`wget -d localhost:80`で確認できる。

　
#### ④ServerTokensの設定
サーバーの応答ヘッダに表示する内容の設定。

`ServerTokens Prod`を追加。(ファイルになかったので)

これを追加すると、Apacheであることぐらいしか相手に伝わらなくなる。

`wget -d localhost:80`で確認できる。

#### confファイルがちゃんと書けたか確認
`/opt/httpd/httpd-2.4.20/bin/apachectl configtest`

これで`Syntax OK`が出たらOK。

# Serviceへの登録

長いの打つの大変じゃね？
`service うんちゃら`でやりたい。

参考：[http://kazmax.zpp.jp/apache/apache2.html](http://kazmax.zpp.jp/apache/apache2.html)

shell作るのか…。

```
cd /etc/init.d/
vim apache ※shell作成は別途
chmod 755 apache
chkconfig --add apache
```

## 最終的に作ったshell
```
#!/bin/sh
#
# chkconfig: 35 85 15
# descripution: apache 2.4.20

apachectl="/opt/httpd/httpd-2.4.20/bin/apachectl"

case "$1" in
        start|stop|restart|graceful|graceful-stop|configtest|help)
                $apachectl $@ ;;
        *)
                ;;
esac
```

status系とstartsslは後で調整するので入れてない。
`chkconfig: 35 85 15`の部分はデーモン制御スクリプトの実行順らしいです。
→あとで調べる。


# mysqlインストール
## yumを使ってインストール
`yum install mysql-server`で**入らない。**

理由判明→[http://www.kakiro-web.com/linux/mysql-install.html](http://www.kakiro-web.com/linux/mysql-install.html)

> CentOS7になり、標準リポジトリからMySQLはインストールできなくなっています。MySQLの公式サイトからRPMをダウンロードすることで、新しいバージョンのインストールを行うことができます。

マジですか。ないんですね。
これはまたソースコードから取り込むやつっぽい。

## ソースコードからインストール
参考：[http://eeggs.hatenablog.com/entry/2015/12/21/111438](http://eeggs.hatenablog.com/entry/2015/12/21/111438)

rootユーザーで実施。

### ユーザー作る

```
groupadd mysql
useradd -g mysql -s /sbin/nologin mysql
```

実はこの方法に至るまで七転八倒してたので、`cmake`、`ncurses-devel`、`mariadb-libs`は既に入れてた。
この辺入れてないと次の工程でエラーになるだけなので、まあめんどくさいけどエラー見ながら後で入れてもいい。

### インストールする

```
cd /usr/local/src
wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.12.tar.gz
tar xvzf mysql-5.7.12.tar.gz
cd mysql-5.7.12
cmake . -DDEFAULT_CHARSET=utf8mb4 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/src
make
make install
```

この手順を基に別のものを作成してたんだけど、`make`の前にこんなエラーが発生した。

```
CMake Error: your CXX compiler: “CMAKE_CXX_COMPILER-NOTFOUND” was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
```


```
yum install gcc-c++
```

でかいけつした。

### my.cnfの設定

```
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
vim /etc/my.cnf
```

viよりvimが好き。
下記設定追記。

```
[client]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
explicit_defaults_for_timestamp = 1
default_password_lifetime = 0
```

### 初期化

`mysql_install_db`は5.7から非推奨。
元々5.7から使ってるのでむしろ`mysql_install_db`使ったことない。

```
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 
--user=mysql
```

### パスワード変更
`--initialize-insecure`がパスワードを設定しないオプションなので、パスワード設定する。

```
su mysql
/usr/local/mysql/bin/mysqld_safe --user=mysql &
/usr/local/mysql/bin/mysql -u root
```

ここでmysqlユーザーにsuしてからやってみたけど、rootでも普通に起動できるの確認したった。

```
mysql> use mysql; 
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'
mysql> exit

```


エラーでた
解決策：[http://certate.dip.jp/?p=478](http://certate.dip.jp/?p=478)

```
[root@localhost mysql-5.7.12]# /usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
[Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
[Warning] 'NO_AUTO_CREATE_USER' sql mode was not set.
[ERROR] --initialize specified but the data directory has files in it. Aborting.
[ERROR] Aborting

```




### 自動起動できるようにする
参考：[http://qiita.com/dribble13/items/20c769f1e94eceac0186](http://qiita.com/dribble13/items/20c769f1e94eceac0186)

```
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on
```

`chkconfig --list`を打って下みたいになればOK

```
mysql          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
```

または、`service mysql status`と打って下みたいになってればOK

```
SUCCESS! MySQL running (XXXX)
```

パスワード設定後は下記のコマンド入力後、パスワードを入力する。

```
/usr/local/mysql/bin/mysql -u root -p
```

リブートで確かめる。
失敗。起動しない。
手動起動するとこうなる

```
Starting MySQL.The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).
```

`/etc/my.cnf`に下記内容追加

```
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
```

もっかいリブートして確認！→できた☆

# PHPのインストール

現時点でsymfony3.0.5が最新の安定バージョンみたいなので、これに合わせてPHPをインストールしようず！

[https://packagist.org/packages/symfony/symfony](https://packagist.org/packages/symfony/symfony)で確認すると、
phpは5.5.9以上ならOKらしい。
7.0.6をいれてみまんぼ。

以下、参考：[http://docs.hatenablog.jp/entry/php7](http://docs.hatenablog.jp/entry/php7)

## ソースダウンロード→展開

`/usr/local/src`へ。

```
wget http://jp2.php.net/get/php-7.0.6.tar.gz/from/this/mirror -O php-7.0.6.tar.gz
tar zxvf php-7.0.6.tar.gz
```

いまいちこういうURLってどうやって知るのかわからんぞう。

移動。

```
cd php-7.0.6/
```

[http://www.phppro.jp/phpmanual/install_linux.php](http://www.phppro.jp/phpmanual/install_linux.php)

> 今回は、Apacheのモジュールとして組み込む、日本語環境が使用できて、PostgreSQLとMySQLが使用できるようにします。下の例はApache2がインストールされている場合のものです。

とりあえず最低限はこれでいいのかな？

下記コマンドを打つ

```
./configure --with-apxs2 --enable-mbstring  --enable-zend-multibyte --with-pgsql --with-mysql
```

エラー

```
Configuring SAPI modules
checking for Apache 2.0 handler-module support via DSO through APXS... 

Sorry, I cannot run apxs.  Possible reasons follow:

1. Perl is not installed
2. apxs was not found. Try to pass the path using --with-apxs2=/path/to/apxs
3. Apache was not built using --enable-so (the apxs usage page is displayed)

The output of apxs follows:
./configure: line 6208: apxs: command not found
configure: error: Aborting
```

`APXS`がないって出る。

[http://tazakazushi.net/apache_no_apxs.html]
(http://tazakazushi.net/apache_no_apxs.html)

`http-devel`入れればよいぽい。

```
yum install httpd-devel
```

もう一回`./configure `やります。
はいエラー。

```
configure: error: xml2-config not found. Please check your libxml2 installation.
```

(http://d.hatena.ne.jp/yohei-a/20100426/1272275098)
[http://d.hatena.ne.jp/yohei-a/20100426/1272275098]
より、
`libxml2-devel`を入れればよいぽい。

```
yum install libxml2-devel
```

もっかい。
はいエラー。

```
configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
```

そもそも元のコマンドで`--with-pgsql`いらんやん。
と気づく。

```
./configure --with-apxs2 --enable-mbstring  --enable-zend-multibyte --with-mysql
```

うまくいったけど、警告で
`WARNING: unrecognized options: --enable-zend-multibyte, --with-mysql`
と出る。
mysqlないのん？

[http://php.net/manual/ja/configure.about.php]
(http://php.net/manual/ja/configure.about.php)

調べたら
`./configure --with-apxs2 `
でいいっぽい？

後で追加できる。→後でコンパイルすればOK
でもこのときは、すべてのオプションを書く必要あり。

削除の場合は`make clean`でキャッシュ消してからもっかいやる。

成功すると`config.nice`ができる。
追加する場合は`config.nice [オプション]`で追加できちゃったりする。

```
make
make test
make install
```

こういう書き方できるらしい。
てか`make test`飛ばしても問題ないそうな。

```
./configure && make && make install
```

`&&`使うと失敗すると止まるらしい。
パイプは標準出力だけど、これはコマンドの実行結果をみてやってくれる。

確認する。

```
php -v
```

おｋ

```
PHP 7.0.6 (cli) (built: May  9 2016 02:39:54) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
```


設定が抜けてる場合→iniファイルを変更してApache再起動
ライブラリが抜けてる場合→コンパイルをし直す。


# symfony3のインストール

公式：[http://symfony.com/download#symfony1](http://symfony.com/download#symfony1)
参考：[http://qiita.com/ma2saka/items/2cd6cb3a8007fdf9fe2e](http://qiita.com/ma2saka/items/2cd6cb3a8007fdf9fe2e)

```
sudo curl -LsS http://symfony.com/installer -o /usr/local/bin/symfony
sudo chmod a+x /usr/local/bin/symfony
symfony --verion
```

エラー。

```
Fatal error: Uncaught PharException: zlib extension is required for gz compressed .phar file "/usr/local/bin/symfony" in /usr/local/bin/symfony:9
Stack trace:
#0 /usr/local/bin/symfony(9): Phar::mapPhar('default.phar')
#1 {main}
  thrown in /usr/local/bin/symfony on line 9
```

必要な物が足りないようだ……。

```
yum search zlib
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
===================================== N/S matched: zlib =====================================
jzlib.noarch : Re-implementation of zlib in pure Java
jzlib-demo.noarch : Examples for jzlib
jzlib-javadoc.noarch : API documentation for jzlib
perl-Compress-Raw-Zlib.x86_64 : Low-level interface to the zlib compression library
perl-IO-Zlib.noarch : Perl IO:: style interface to Compress::Zlib
zlib-devel.i686 : Header files and libraries for Zlib development
zlib-devel.x86_64 : Header files and libraries for Zlib development
zlib-static.i686 : Static libraries for Zlib development
zlib-static.x86_64 : Static libraries for Zlib development
zlib.i686 : The compression and decompression library
zlib.x86_64 : The compression and decompression library

```

調べてみたら入ってた。(`zlib-devel.x86_64`)


オプションどうつければいいかチェック

```
./configure --help | grep zlib
```


```
  --with-zlib=DIR         Include ZLIB support (requires zlib >= 1.0.9)
  --with-zlib-dir=<DIR>   Define the location of zlib install directory
  --with-zlib-dir=DIR     GD: Set the path to libz install prefix
  --with-zlib-dir=DIR     PDO_MySQL: Set the path to libz install prefix
  --with-zlib-dir=DIR     ZIP: Set the path to libz install prefix
  --with-zlib-dir=DIR     mysqlnd: Set the path to libz install prefix
```

こんな感じに。

どれやねん……。
とりあえずこうしてみる。
ちなみにこれな、phpがあるディレクトリの下じゃないとアカンねんて！
てかmakeコマンドとかその辺めっちゃわけわからん。
ちな、ここな→`/usr/local/src/php-7.0.6`


```
./configure --with-apxs2 --with-zlib --with-zlib-dir=/usr
```

```
make && make install
```

確認

```
symfony --verion
```

```
 Symfony Installer (1.5.1)
 =========================

 This is the official installer to start new projects based on the
 Symfony full-stack framework.

 To create a new project called blog in the current directory using
 the latest stable version of Symfony, execute the following command:

   symfony new blog

 Create a project based on the Symfony Long Term Support version (LTS):

   symfony new blog lts

 Create a project based on a specific Symfony branch:

   symfony new blog 2.3

 Create a project based on a specific Symfony version:

   symfony new blog 2.5.6

 Create a demo application to learn how a Symfony application works:

   symfony demo

 Updating the Symfony Installer
 ------------------------------

 New versions of the Symfony Installer are released regularly. To update your
 installer version, execute the following command:

   symfony self-update

```

できた？
ここから新規プロジェクトとか作るときにインストールされる？っぽい。

これはインストーラっぽい。
ここから新しいの作るよーって感じか

あ、でもdemo以外だとバージョン指定できるぽいね。
それはおいおい。


# 追記
別サーバーで構築しようとしてたらこんなエラー

```
[GuzzleHttp\Exception\RequestException]                                                            
  Error creating resource: [message] fopen(): Unable to find the wrapper "https" - did you forget t  
  o enable it when you configured PHP?                                                               
  [file] phar:///usr/local/bin/symfony/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php        
  [line] 406                                                                                         
  [message] fopen(https://get.symfony.com/symfony.version): failed to open stream: No such file or   
  directory                                                                                          
  [file] phar:///usr/local/bin/symfony/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php        
  [line] 406                                                                                         
  [message] Undefined variable: http_response_header                                                 
  [file] phar:///usr/local/bin/symfony/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php        
  [line] 407
```

openssl入れる。
develってのが足りない場合がおおいらしい。

```
yum install openssl-devel
```

```
make && make install
```


[^1]: [http://www.weblio.jp/content/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF](http://www.weblio.jp/content/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF)


[^2]: [http://www.itbook.info/study/nat3.html](http://www.itbook.info/study/nat3.html) IPアドレスを変換してお外のネットワークにつなげるようにしてくれる。

# 追記2

pdoが足りなかった。

```
php -i | grep configure | sed -e 's/ /\n/g'
```

これでチェックしたけどやっぱり足りなかった。
もっかい。

```
./configure --with-apxs2 --with-zlib --with-zlib-dir=/usr --with-openssl --with-pdo-mysql
```

これでまた`make`する。