phpbrewのphpをユーザ間で共有する

# やりたいこと

- phpbrewを使って、複数バージョンのPHPをインストールして、各ユーザで共有できるようにしたい。（ユーザ毎にインストールしなくていいようにしたい）

# やり方概要

.phpbrewを~/.phpbrewではなく、/opt/phpbrewに置くことでユーザ毎にインストールしないでいいようにした。

# 環境
- Ubuntu 16.10
- シェルはzsh

# phpbrewのインストール

```
$ curl -L -O https://github.com/phpbrew/phpbrew/raw/master/phpbrew
$ chmod +x phpbrew
$ sudo mv phpbrew /usr/local/bin/phpbrew
```

# 初期設定

## phpbrewの初期化
```
$ sudo -i
$ mkdir -p /opt/phpbrew
$ phpbrew init --root=/opt/phpbrew
```

これで/root/.phpbrewが作成されます。.phpbrew内は下記のようになります。

```
├── bashrc
├── build/
├── .metadata_never_index
├── php/
└── phpbrew.fish 
```

## zshの設定

```
$ cd
$ vim .zshrc
```

下記を.zshrcに追加します。

```.zshrc
[[ -e ~/.phpbrew/bashrc ]] && source ~/.phpbrew/bashrc
```

sourceします。

```
$ source .zshrc
```

## .phpbrew/initの作成

```
$ vim .phpbrew/init
```

.phpbrew/initを作成して下記1行を書きます。

```
export PHPBREW_ROOT=/opt/phpbrew
```

.phpbrew/bashrcをsourceします。

```
$ source .phpbrew/bashrc
```

# phpをインストール

## php-5.6.30をインストール

```
$ phpbrew -d install 5.6.30 +default +dbs +mb +fpm +debug +cgi +hash +json
```

これで`/opt/phpbrew`内に作成されます。

```
$ tree -aF -L 2 /opt/phpbrew
/opt/phpbrew
├── build/
│   └── php-5.6.30/
├── distfiles/
│   └── php-5.6.30.tar.bz2
├── .metadata_never_index
├── php/
│   └── php-5.6.30/
├── php-releases.json
└── register/
```

## php-7.1.4をインストール

```
$ phpbrew -d install --stdout 7.1.4 like php-5.6.30 
```

-dはデバッグモードで、インストール中の処理内容が出力されます。通常だと途中の細かい内容はログファイルに出力されますが、--stdoutとすることで、標準出力に出力されます。また、likeを使うことで、php-5.6.30のvariantsを適用できます。

追記：どうもlikeでインストールしたらfpmがなかったので、like使わずにインストールした方がいいかもです。

## 標準バージョンを7.1.4にする

```
$ phpbrew list
* (system)
  php-7.1.4
  php-5.6.30
$ phpbrew switch php-7.1.4
$ php -v
PHP 7.1.4 (cli) (built: May  3 2017 06:55:49) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
```

# ユーザ間共有設定

上記までやれば、とりあえずPHPは入るので、Nginxで使う場合とかは、各バージョンのphp-fpmを使う設定にすればいいだけなのかなと思った。下記はCLIでユーザ毎に個別に切り替えたい場合にやればいいのかなと思った。試行錯誤中にせっかくやったのでメモです。

## /opt/phpbrew/bashrcを作成
```
$ cp /root/.phpbrew/bashrc /opt/phpbrew/bashrc
```

## /etc/profile.d/phpbrewを作成

```
$ vim /etc/profile.d/phpbrew.sh
```

```/etc/profile.d/phpbrew.sh
export PHPBREW_ROOT=/opt/phpbrew
source /opt/phpbrew/bashrc
```

## zprofileを編集

```
$ vim /etc/zsh/zprofile
```

zprofileの中身。/etc/profileの中身の一部をコピペする。bashの場合、~/.bashrcの前に、/etc/profileによって、/etc/profile.d/*.shが全て実行されるが、zshだと実行されないので、zprofileに同じことを書いて実行してもらえるようにする。

```
if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
```

### ついでにEDITORも登録しておく

```
$ vim /etc/zsh/zshenv
```

下記を書くと、phpbrew configなどで開くエディタがvimになる。

```
export EDITOR=vim
```

これで、誰もがzshでログインしたときに、zprofileが動いて、zprofileが/etc/profile.d/phpbrew.shを動かして、PHPBREW_ROOTを設定した上で、phpbrew/bashrcをsourceするので、phpbrew initしてなくても、/opt/phpbrewを使ったphpbrewの利用ができるようになったはず！確かにどのユーザでも、phpbrew listとかは正常に動く。phpbre useとかは、/opt/phpbrewがroot権限だから、sudo権限ない人は切り替えられない。/opt/phpbrewの権限を変えることで調整は可能なのかなと思いました。



参考：[system-wide環境のPHPBrewインストール](https://github.com/phpbrew/phpbrew/wiki/PHPBrew-JA-%E6%97%A5%E8%AA%9E%E6%8C%87%E5%BC%95#system-wide%E7%92%B0%E5%A2%83%E3%81%AEphpbrew%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)