やりたいこと
- 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に追加します。
[[ -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
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の権限を変えることで調整は可能なのかなと思いました。