困っていること
Dockerで起動したAlpineLinuxコンテナ上で、 phpenv
にて古いバージョンのPHPをインストールしようとしているのですが、うまくいきません。
CentOS等であればうまくインストールできるのですが、どうしても Docker+AlpineLinux でやりたく、ここ数日ずっと試しているのですが一向にうまくいかず、暗礁に乗り上げてしまいましたため、投稿いたしました。
皆様の知見を拝借できれば幸いです。
やったこと
まずは docker
コマンドでDocker上にまっさらなAlpineLinuxを立ち上げてシェルに入ります。
docker run -it alpine:3.7
次に、必要パッケージを apk
コマンドにてインストールします。
apk add --update \ coreutils \ curl \ git \ gcc \ g++ \ m4 \ autoconf \ automake \ apache2-dev \ re2c patch \ libxml2-dev \ bzip2-dev \ curl-dev \ libjpeg-turbo-dev libpng-dev \ icu-dev \ libmcrypt-dev \ readline-dev \ tidyhtml-dev \ libxslt-dev \ file \ make \ libevent-dev \ mariadb-dev
bison
は以下のコマンドでソースからインストールします。( apk
でインストールすると最新版が入ってしまい、PHP5.2.17コンパイルで警告がでるため)
Bison
1cd /tmp 2curl -O https://ftp.gnu.org/gnu/bison/bison-2.4.1.tar.gz 3tar zxfv bison-2.4.1.tar.gz 4cd bison-2.4.1 5./configure 6make 7make install
lemon
は以下のコマンドでソースからインストールします。
lemon
1cd /tmp 2curl -L -Ss -o lemon.c https://www.sqlite.org/src/raw/tool/lemon.c?name=33892e2a243865f73e6c6e7cecce3c6eb4bb95db4a3d9d86d146c8064feb92fd 3gcc -o lemon lemon.c 4mv lemon /usr/local/bin 5rm -f lemon.c
次に anyenv
から phpenv
をインストールします。
git clone https://github.com/riywo/anyenv ~/.anyenv echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(anyenv init -)"' >> ~/.bashrc . ~/.bashrc anyenv install phpenv bash . ~/.bashrc
phpenv install --list
でインストールできるPHPバージョンが出ますので、試しに PHP 5.3.3
をインストールしてみます。
phpenv install 5.3.3
すると、こんな画面で BUILD ERROR となって停止してしまいます。
上記ハイフン線で囲まれた空白のところは本来、足りないライブラリや警告が記録されるログファイルの末尾10行が表示されるんですが、ここがなぜか空っぽでした。ログファイル自体も0byteなので、一見何も問題が起きていないようにも見えますが、BUILD ERROR
と出てるし、 php -v
と打ってもコマンドは見つからないしで、正常にインストールされていないようでした。
ちなみに、全部は試してないですが、古いPHPバージョンはほとんどインストールに失敗してしまう状況です。
phpenv install バージョン | 結果 | ログファイル(一部)、結果 |
---|---|---|
PHP 5.2.17 | BUILD ERROR | configure: warning: flex versions supported for regeneration of the Zend/PHP parsers: 2.5.4 (found: none) |
PHP 5.3.2 | BUILD ERROR | (空っぽ)※上記キャプチャ画像同様 |
PHP 5.3.3 | BUILD ERROR | (空っぽ)※上記キャプチャ画像 |
PHP 5.4.0 | BUILD ERROR | configure: WARNING: unrecognized options: --enable-phpdbg |
PHP 5.5.0 | BUILD ERROR | configure: WARNING: unrecognized options: --enable-phpdbg |
PHP 5.6.0 | BUILD ERROR | (空っぽ)※上記キャプチャ画像同様 |
PHP 7.0.0 | BUILD ERROR | (空っぽ)※上記キャプチャ画像同様 |
PHP 7.1.0 | Success | 成功! |
PHP 7.2.0 | Success | 成功! |
また、上記 BUILD ERROR で終了後、php versions
と打つと、失敗してるのにもかかわらずそのバージョンがリストに出てきます。
この状態で phpenv global x.x.x
として選択しようとすると、 /root/.anyenv/envs/phpenv/libexec/phpenv-global: line 47: php-config: command not found
といったエラーが出ます。
ログ詳細モードに気づく
ここまで書いてて phpenv install
コマンドに --verbose, -v
モードがあったことに気づき(汗)、PHP 5.3.3
のみ、-v
でインストールしてみました。
phpenv install -v 5.3.3
すると詳細な問題点がログに記録されるようになりました。
やはりコンパイルでエラーになってましたね・・。
この問題はここを参考に、以下のコマンドを打ってから再度インストールをすることで解消しました。
sed -i 's/buffio.h/tidybuffio.h/' /tmp/php-build/source/5.3.3/ext/tidy/*.c
ところが今度は、以下の問題で止まります。
しかたがないので環境変数を指定してFPMを無効にします。
CONFIGURE_OPTS="--disable-fpm" phpenv install -v 5.3.3
するとこう。
libltdl
を入れてから再度。
apk add --update libltdl
またエラー。
OpenSSL パッケージをインストールすれば解決そうな気がしたので、以下のコマンドを打ってみたのですが、LibreSSL というパッケージとぶつかってるといったエラーが出てダメでした。
apk add --update openssl openssl-dev
LibreSSLを消そうとしても消えず、最初からやり直す際にOpenSSLを先にインストールしてみたりしたのですがApache2でLibreSSLに依存してるとかで怒られたり、あれこれ試したのですが、もうお手上げっぽいです・・。
これ以上インストールが進みません・・。
m(_ _)m
できればPHPのマイナーバージョンまでは一通り網羅したいと考えています。(5.2.x
, 5.3.x
, 5.4.x
, 5.5.x
, 5.6.x
, 7.0.x
, 7.1.x
, 7.2.x
)
どうかお知恵を下さい・・。
追記 2018.7.23
t_obara 2018/07/23 13:30
こちらは参考になりませんかね? https://github.com/josjos7/phpenv-alpine
ご連絡ありがとうございます!
このDockerファイルの通りにやると途中でコンパイルエラーがでます。気にせず最後まで実行させ、 phpenv install 5.3.3
したのですが、コンパイルエラーになりました。
DockerHubにこのイメージが上がっていたので、コンテナを立ち上げて同じく phpenv install 5.3.3
したのですが、それもコンパイルエラーになりました。
docker run -it josjos7/phpenv-alpine phpenv install 5.3.3
ただ、私が試した時のエラーと違っているので、何かしら参考になるかもしれません。
パッケージを差し替えたりして色々また試してみようと思います。
回答1件
あなたの回答
tips
プレビュー