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

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

ただいまの
回答率

90.49%

  • PHP

    20379questions

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

  • Docker

    717questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 291

kotatsu_hal

score 20

 困っていること

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コンパイルで警告がでるため)

cd /tmp
curl -O https://ftp.gnu.org/gnu/bison/bison-2.4.1.tar.gz
tar zxfv bison-2.4.1.tar.gz
cd bison-2.4.1
./configure
make
make install

lemon は以下のコマンドでソースからインストールします。

cd /tmp
curl -L -Ss -o lemon.c https://www.sqlite.org/src/raw/tool/lemon.c?name=33892e2a243865f73e6c6e7cecce3c6eb4bb95db4a3d9d86d146c8064feb92fd
gcc -o lemon lemon.c
mv lemon /usr/local/bin
rm -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.x5.3.x5.4.x5.5.x5.6.x7.0.x7.1.x7.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


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

回答 1

check解決した方法

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.17 や 5.3.3 はインストールできませんでした。
ちょっと残念ですが、大抵のマイナーバージョンは押さえてるので良しとします。

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20379questions

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

  • Docker

    717questions

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