質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

5620閲覧

Docker+AlpineでphpenvによるPHPインストールがコケる

kotatsu_hal

総合スコア34

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2018/07/05 15:08

編集2018/07/23 05:40

困っていること

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.17BUILD ERRORconfigure: warning: flex versions supported for regeneration of the Zend/PHP parsers: 2.5.4 (found: none)
PHP 5.3.2BUILD ERROR(空っぽ)※上記キャプチャ画像同様
PHP 5.3.3BUILD ERROR(空っぽ)※上記キャプチャ画像
PHP 5.4.0BUILD ERRORconfigure: WARNING: unrecognized options: --enable-phpdbg
PHP 5.5.0BUILD ERRORconfigure: WARNING: unrecognized options: --enable-phpdbg
PHP 5.6.0BUILD ERROR(空っぽ)※上記キャプチャ画像同様
PHP 7.0.0BUILD ERROR(空っぽ)※上記キャプチャ画像同様
PHP 7.1.0Success成功!
PHP 7.2.0Success成功!

また、上記 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

ただ、私が試した時のエラーと違っているので、何かしら参考になるかもしれません。
パッケージを差し替えたりして色々また試してみようと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

とりあえずこれが一番近いソリューションっぽいです。
Alpine上で以下のバージョンのPHPが phpenv でインストール済みのDockerになります。
https://hub.docker.com/r/conchoid/docker-phpenv-builtins/

5.3.29 5.4.45 5.5.38 5.6.34 7.0.28 7.1.15 7.2.3

https://github.com/conchoid/docker-phpenv-builtins/blob/master/5.6-alpine3.6/Dockerfile

これ色々いじってみたんですが、なぜか 5.2.175.3.3 はインストールできませんでした。
ちょっと残念ですが、大抵のマイナーバージョンは押さえてるので良しとします。

ありがとうございました。

投稿2018/07/31 07:08

kotatsu_hal

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問