Ubuntu 20.10 に PHP 8.0.1 をインストールして Symfony CLI を使う
前記事で Symfony CLI が anyenv & phpenv に対応していなさそうなことがわかりました
Parallels Desktop for Mac with Apple M1 chip (Apple Silicon)
をインストールし Ubuntu Server for ARM 20.10
で PHP を動かそうと思います
目的は Symfony 5 The Fast Track の作業環境整備を終えることです
余談 Parallels Tools が ARM に対応していない
執筆時点(2021/01/30)では Parallels Tools をインストールしようとすると aarch64 はサポートしていない
とメッセージがでます
ホストOSとのファイル共有も、クリップボード共有もできず、長いコマンドをいちいち打たなければならないのか…と思いましたが、ひらめきました
Ubuntu 内の Firefox で 本記事の下書きのプレビューを開くことでクリップボードの代わりとしました
phpenv のインストール
anyenv による phpenv だと問題が発生すると推測し、今回は phpenv 単体をまずインストールします
phpenv-installer を使えば簡単に導入できました
余談 `.bash_profile` が読み込まれない
phpenv インストール後、パスを通すために .bash_profile
を作って記述していましたが exec $SHELL -l
してもパスが通りませんでした
原因はホームディレクトリにある .profile
が .bashrc
は読み込むけれど .bash_profile
についての処理は無かったことのようです
.profile
は Ubuntu のデフォルトのままにしたかったので .bashrc
にパスを通すコマンドを追記しました
厳密には .bash_profile
と .bashrc
の役割/意味は異なります。おそらくスジとしては .profile
にパスを通すコマンドを追記するべきと思います
まずは前記事と同じオプションで PHP をビルドを試す
前記事のインストールコマンドは macOS 用なので brew などの macOS 向けのものを取り除いて叩いてみます
macOS 用
PHP_BUILD_CONFIGURE_OPTS="--with-bz2=$(brew --prefix bzip2) --with-iconv=$(brew --prefix libiconv) --with-tidy=$(brew --prefix tidy-html5) --with-external-pcre=$(brew --prefix pcre2) --with-sodium --with-zip --enable-intl --with-pdo-pgsql=$(brew --prefix postgresql) --with-pear" \
PHP_BUILD_EXTRA_MAKE_ARGUMENTS="-j$(sysctl -n hw.logicalcpu_max)" \
phpenv install --ini development 8.0.1
macOS 用を取り除いたもの
PHP_BUILD_CONFIGURE_OPTS="--with-bz2 --with-iconv --with-tidy --with-external-pcre --with-sodium --with-zip --enable-intl --with-pdo-pgsql --with-pear" \
PHP_BUILD_EXTRA_MAKE_ARGUMENTS="-j$(grep processor /proc/cpuinfo | wc -l)" \
phpenv install --ini development 8.0.1
(CPU論理コア数を取得するところは書換えました)
これを実行して、不足しているライブラリ等を確認しつつインストールしていきます
不足ライブラリ/パッケージのインストール
sudo apt-get install -y build-essential
sudo apt-get install -y libxml2-dev
sudo apt-get install -y libssl-dev
sudo apt-get install -y libpcre2-dev
sudo apt-get install -y libsqlite3-dev
sudo apt-get install -y zlib1g-dev
sudo apt-get install -y libbz2-dev
sudo apt-get install -y libcurl4-openssl-dev
sudo apt-get install -y libpng-dev
sudo apt-get install -y libjpeg-dev
sudo apt-get install -y libonig-dev
sudo apt-get install -y libpq-dev
sudo apt-get install -y libreadline-dev
sudo apt-get install -y libsodium-dev
sudo apt-get install -y libtidy-dev
sudo apt-get install -y libxslt-dev
sudo apt-get install -y libzip-dev
sudo apt-get install -y autoconf
1行で
sudo apt-get install -y build-essential libxml2-dev libssl-dev libpcre2-dev libsqlite3-dev zlib1g-dev libbz2-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libonig-dev libpq-dev libreadline-dev libsodium-dev libtidy-dev libxslt-dev libzip-dev autoconf
ビルド/インストール
(前掲と変わらず)
PHP_BUILD_CONFIGURE_OPTS="--with-bz2 --with-iconv --with-tidy --with-external-pcre --with-sodium --with-zip --enable-intl --with-pdo-pgsql --with-pear" \
PHP_BUILD_EXTRA_MAKE_ARGUMENTS="-j$(grep processor /proc/cpuinfo | wc -l)" \
phpenv install --ini development 8.0.1
後から気付いた Pear の導入で ~躓いてる~ 躓いていた内容
Pear も前記事と同様に
pecl.php.net
に接続できなかったので原因を調べたところ php.ini
に openssl.cafile = /etc/ssl/certs/ca-certificates.crt
と設定してみました
pecl channel-update pecl.php.net
// それでもできない
// 前記事で出来ていたはずのホストマシンでもできなくなっているので pecl.php.net の問題のように思えました
2021/01/31 13:29 追記
pecl.php.net
が落ちてただけだったみたい…?
2021/01/31 13:38 追記
やはりインストールできないので -vvv
を付けて詳細を確認します
pecl -vvv install redis
Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in PEAR/Proxy.php on line 183
Warning: fsockopen(): Failed to enable crypto in PEAR/Proxy.php on line 183
Warning: fsockopen(): Unable to connect to ssl://pecl.php.net:443 (Unknown error) in PEAR/Proxy.php on line 183
No releases available for package "pecl.php.net/redis"
Cannot initialize 'channel://pecl.php.net/redis', invalid or missing package file
Package "channel://pecl.php.net/redis" is not valid
install failed
下記の stackoverflow に行き着いたので、参考にして対応します
php -r "print_r(openssl_get_cert_locations());"
Array
(
[default_cert_file] => /usr/lib/ssl/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /usr/lib/ssl/certs
[default_cert_dir_env] => SSL_CERT_DIR
[default_private_dir] => /usr/lib/ssl/private
[default_default_cert_area] => /usr/lib/ssl
[ini_cafile] =>
[ini_capath] => /etc/ssl/certs/ca-certificates.crt
)
昨夜設定した php.ini
の openssl.capath
を無効にし(コメントアウト)
openssl.cafile=/usr/lib/ssl/cacert.pem
に書き換えて cacert.pem
を以下のように取得します
sudo wget -O /usr/lib/ssl/cacert.pem "https://curl.haxx.se/ca/cacert.pem"
これで pecl install
が進むようになりました!
この時点での openssl_get_cert_locations()
の結果は以下の通り
php -r "print_r(openssl_get_cert_locations());"
Array
(
[default_cert_file] => /usr/lib/ssl/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /usr/lib/ssl/certs
[default_cert_dir_env] => SSL_CERT_DIR
[default_private_dir] => /usr/lib/ssl/private
[default_default_cert_area] => /usr/lib/ssl
[ini_cafile] => /usr/lib/ssl/cacert.pem
[ini_capath] =>
)
前記事同様に PECL パッケージのインストールをします
Redis
pecl install igbinary
echo 'extension=igbinary.so' > ~/.phpenv/versions/8.0.1/etc/conf.d/pecl-igbinary.ini
sudo apt-get install -y libzstd-dev
pecl install redis
echo 'extension=redis.so' > ~/.phpenv/versions/8.0.1/etc/conf.d/pecl-redis.ini
AMQP
sudo apt-get install -y librabbitmq-dev
git clone https://github.com/php-amqp/php-amqp.git
cd php-amqp
phpize
./configure
make && make test
make install
echo 'extension=amqp.so' > ~/.phpenv/versions/8.0.1/etc/conf.d/pecl-amqp.ini
cd .. && rm -rf php-amqp
PHP インストール完了
phpenv global 8.0.1
php -v
PHP 8.0.1 (cli) (built: Jan 30 2021 15:38:20) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.1, Copyright (c) Zend Technologies
with Zend OPcache v8.0.1, Copyright (c), by Zend Technologies
with Xdebug v3.0.2, Copyright (c) 2002-2021, by Derick Rethans
Symfony CLI のインストールと動作確認
Docker
, docker-compose
もインストールしておきます
余談 `docker-compose` は `virtualenv` & `pip` でインストールする
- Linux 向けのインストールコマンドを叩いても
aarch64
向けのビルドは配布されていない -
Alternative install options
に記載されているvirtualenv
&pip
を使ったインストールを行う
pipenv 内の docker-compose へのエイリアス
echo "alias 'docker-compose'='pipenv run docker-compose'" >> ~/.bash_aliases
2021/01/31 14:44 追記
この方法だと Symfony CLI が docker-compose
を認識しないので、記事の下部で回避策を講じています
Node.js, Yarn をインストール
nodenv
でよしなにインストールします
Symfony CLI をインストール
動作確認
symfony book:check-requirements
[OK] Git installed
[OK] PHP installed version 8.0.1 (/home/chatii/.phpenv/versions/8.0.1/bin/php)
[OK] PHP extension "session" installed - required
[OK] PHP extension "openssl" installed - required
[OK] PHP extension "redis" installed - optional - needed only for chapter 11
[OK] PHP extension "gd" installed - optional - needed only for chapter 23 (Imagine)
[OK] PHP extension "json" installed - required
[OK] PHP extension "xml" installed - required
[OK] PHP extension "amqp" installed - required
[OK] PHP extension "zip" installed - optional - needed only for chapter 17 (Panther)
[OK] PHP extension "tokenizer" installed - required
[OK] PHP extension "mbstring" installed - required
[OK] PHP extension "ctype" installed - required
[OK] PHP extension "intl" installed - required
[OK] PHP extension "pdo_pgsql" installed - required
[OK] PHP extension "xsl" installed - required
[OK] PHP extension "sodium" installed - required
[OK] PHP extension "curl" installed - optional - needed only for chapter 17 (Panther)
[OK] Composer installed
[OK] Docker installed
[KO] Cannot find Docker Compose, please install it https://docs.docker.com/compose/install/
[OK] Yarn installed
You should fix the reported issues before starting reading the book.
余談
docker-compose
はvirtualenv
&pip
でインストールする
で導入した docker-compose
が認識されていないようなので、さらに回避策を講じてみます
余談 `pipenv` の `docker-compose` を `symfony` に認識させる
.bash_alias
に書くことで docker-compose
を走らせられるようにしましたが、これでは認識しないので、このエイリアスを削除します
その上で、以下のようなシェルスクリプトを用意しました
#!/bin/bash
pipenv run docker-compose "$@"
そして、これに実行権限を与えて /usr/local/bin
に移動します
chmod +x docker-compose
sudo mv docker-compose /usr/local/bin/
動作確認します
docker-compose version
docker-compose version 1.28.2, build unknown
docker-py version: 4.4.1
CPython version: 3.8.6
OpenSSL version: OpenSSL 1.1.1f 31 Mar 2020
以上を踏まえて改めて symfony book:check-requirements
で確認
[OK] Git installed
[OK] PHP installed version 8.0.1 (/home/chatii/.phpenv/versions/8.0.1/bin/php)
[OK] PHP extension "xml" installed - required
[OK] PHP extension "mbstring" installed - required
[OK] PHP extension "sodium" installed - required
[OK] PHP extension "redis" installed - optional - needed only for chapter 11
[OK] PHP extension "curl" installed - optional - needed only for chapter 17 (Panther)
[OK] PHP extension "zip" installed - optional - needed only for chapter 17 (Panther)
[OK] PHP extension "json" installed - required
[OK] PHP extension "intl" installed - required
[OK] PHP extension "xsl" installed - required
[OK] PHP extension "openssl" installed - required
[OK] PHP extension "gd" installed - optional - needed only for chapter 23 (Imagine)
[OK] PHP extension "session" installed - required
[OK] PHP extension "tokenizer" installed - required
[OK] PHP extension "pdo_pgsql" installed - required
[OK] PHP extension "amqp" installed - required
[OK] PHP extension "ctype" installed - required
[OK] Composer installed
[OK] Docker installed
[OK] Docker Compose installed
[OK] Yarn installed
[OK] Congrats! You are ready to start reading the book.
Congrats!! お疲れ様でした。今から Symfony に入門します。
Discussion