PHP

【PHP】CentOSにPHPをソースからインストールする

2018年4月19日


Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548

こんにちは!

 

LAMPの開発環境を EC2 上に作っているのですが、特定の PHP のバージョンがインストールする事ができませんでした。

そこで方法を見つけたので、備忘録的に書き残しておこうと思います。

また細かいのですが、自分の為にライブラリなどの説明なども書いております。これも備忘録的なものになります。

 

開発環境に必要な PHP のバージョンは 5.6.29 になっておりまして、現在、2018 年 4 月ですと、最新のバージョンは 5.6.34 以上になっているようです。

Unsupported Historical Releases | PHP

http://php.net/releases/

 

 

背景と問題

 

特定のバージョンが必要なのは、仕事で本番環境と合わせる必要がある為になります。

私が使った Amazon Linux の場合、既存でインストールされているパッケージとの関係があって、 特定の PHP のバージョンをインストールできませんでした。

 

どうやら、PHP 5.6.29 には、libpcre.so.1 (pcre-8.32-17.el7.x86_64.rpm) という共有ライブラリというものが必要らしいのです。

これをインストールしようとすると、既にこれより古い共有ライブラリ (pcre-8.21-7.7.amzn1.x86_64) がインストールされており、競合してインストールに失敗してしまいます。

このライブラリについて調べたところ、分かり易い情報が見当たりませんでしたが、どうやら正規表現のライブラリのようです。

 

そこで、この共有ライブラリのパッケージである、 pcre を入れ替えようと試してみましたが、私ではどうにもなりませんでした。。。汗;

忘れずに、やってみた手順を書き残しておきます。

 

1. まず、OS のバージョンの確認をします。Amazon Linux は Redhat 系のディストリビューションなんですね。

また、Amazon Linux のバージョン確認についてはこちらになります。

 

※ Amazon Linux AMI についての詳細は AWS のサイトを見ていただければと思います。

Amazon Linux AMI | AWS
https://aws.amazon.com/jp/amazon-linux-ami/

 

2. PHPがインストールされていない事を確認します。

 

3. remiリポジトリを追加します。

 

リポジトリについてのまとめが Qiita にあったのでリンクを貼っておきますね。

yumリポジトリ追加リスト 完全版 | Qiita

https://qiita.com/bezeklik/items/9766003c19f9664602fe

 

ちょっと上のリンクのサイトを読んでいたのですが、こんな事が書いてありました。今知りました。。。汗;

Remi's RPM repository
比較的新しい PHP を利用したい場合などに利用する。

 

4. yumで任意バージョンのPHPをインストールしたいので、リポジトリからインストール可能なパッケージを検索します。
ここに5.6.29が無い事がわかりました。

 

5. 指定のバージョンを探したところ IUS リポジトリにあったので、rpmでインストールを試みました。

しかし、依存性の関係でインストールが中断しました。「libpcre.so.1 と php56u-common が必要だ」と言われました。

 

6. そこで、libpcre.so.1 のパッケージ pcre のインストールを試したところ、以下のパッケージと競合しておりインストールに失敗してしまいます。

 

7. パッケージを入れ替えれば解決するのではないかと思い、既存の pcre をアンインストールを試したところ、既にインストール済みの以下のパッケージが依存しており、アンインストールに失敗してしまいます。

 

ここまでやってみて考えたところ、別の環境で試しるのはどうかと思いまして、一旦ここで諦める事にしました。

 

 

対応方法

 

という事で、別の環境で試してみようと思ったのですが、どういう環境が良いのか考えてみました。

限りなく、素の状態というか、最小構成に近いイメージが欲しくて探してみましたところ、AWS Marketplace で CentOS が AMI として使える事がわかり、それにしました。

(外からもアクセスができる必要もある為に、レンタルサーバーを使っております。)

 

詳細はこちらの記事を見て頂ければと思います。

 

【AWS】CentOSをAWS上で使う

【AWS】AMIの種類について

 

OS のバージョンの確認

 

 

1. libxml2 と libxml2-devel と gcc をインストールします。

 

・libxml2 とは、XML を扱うための基本ライブラリで、PHPやPerlを使う場合に必要になります。

詳細は以下のサイトをご覧ください。

Libxml2 を使う | OSDN Magazine

https://mag.osdn.jp/03/10/07/1427238

 

・libxml2-devel とは、libxml2 の開発版で、一緒にインストールする必要があるようです。

ちなみに -devel の意味は、develop(開発する)を指します。

 

・gcc とは、フリー のコンパイラになります。詳細はよく理解できていないので、適切なリンクが貼れないです。(笑)

コンパイラでコンパイルするのですが、コンパイルという用語については以下のサイトをご覧ください。

 

コンパイルって何? | エン転職

 

2. wget をインストールします。

 

・wget とは URL指定でファイルをダウンロードするコマンドになります。

詳細は以下のサイトをご覧ください。

【 wget 】コマンド――URLを指定してファイルをダウンロードする | @IT

http://www.atmarkit.co.jp/ait/articles/1606/20/news024.html

 

 

3. httpd と hpptd-devel をインストールします。

・httpd とは Web サーバーソフトウェアの Apache の事を言います。Apache プロセスや実行ファイルを使う際は httpd と指定します。

また、Apache をインストールする時は、httpd を指定します。例えば yum install httpd といった感じになります。

詳細は以下のサイトをご覧ください。

 

初心者でもできる!Apacheをインストールする方法 | TECHACADEMY Magazine

https://techacademy.jp/magazine/1846

 

4. pcre と pcre-devel と perl と perl-devel をインストールします。

 

・pcre とは Developers.io 様の説明が分かり易いので引用させていただきます。pcre-devel は pcre の開発版になります。

Perlの正規表現と互換性のある正規表現を他の言語でも実現するために作られたライブラリで、現在はCentOSやFedora, RHEL等のLinux系のOSには標準でインストール出来る他、Apache,nginx等のミドルウェア、flash,mySql等のソフトウェア、PHP等このライブラリに依存しているパッケージは多く

【速報】ヤバい?問題ない?エンジニアが知っておくべき「PCRE Heap Overflow / CVE-2015-3210」 | Developers.io

 

・perl とは Wikipedia 様の説明が分かり易いので引用させていただきます。

ウェブ・アプリケーション、システム管理、テキスト処理などのプログラムを書くのに広く用いられている。

Perl(パール)とは、ラリー・ウォールによって開発されたプログラミング言語である。実用性と多様性を重視しており、C言語やsed、awk、シェルスクリプトなど他のプログラミング言語の優れた機能を取り入れている。ウェブ・アプリケーション、システム管理、テキスト処理などのプログラムを書くのに広く用いられている。

 

5. カレントディレクトリを移動します。

 

6. PHP 5.6.29 の tar.gz をダウンロードします。

 

7. tar コマンドで、ダウンロードした ファイルを解凍します。

 

・tar コマンドで、複数のファイルを1つに圧縮したり、圧縮ファイルを解凍したりする事ができます。zip などと同じイメージになります。

【 tar 】コマンド(応用編)――アーカイブファイルの内容を確認する | @IT

http://www.atmarkit.co.jp/ait/articles/1608/18/news021.html

 

8. 解凍したフォルダのカレントディレクトリに移動します。

 

9. configure コマンドを実行します。ここで MySQL や Apache のモジュールを有効にします。

この時に必ず --with-... を指定します。

指定しないと、PHP に関連する Apache のモジュールである libphp5.so がインストールされず、やり直しになってしまう可能性があります。

どうやら PHP5 のバグらしいです。調べてみると色々でてきます。

 

 

・configure や 下の make も含めて、以下のサイトが参考になります。

 

./configure;make;make installにはどんな意味がある? | ITMedia エンタープライズ

http://www.itmedia.co.jp/help/tips/linux/l0302.html

 

10. make コマンドを実行します。ちなみに make と make test の実行中あたりでメモリが足らないとエラーが発生し、中断されました。(その際はメモリは 500MB でしたので、余裕を持って 2GB に変更したら問題なく完了しました。)

 

11. make test コマンドを実行します。ここで少し時間がかかります。

 

12. make install コマンドを実行します。

 

13. PHP がインストールされたので、PHP のバージョンを確認してみます。

 

14. php.ini を作成します。確か yum でインストールすると /etc/ 直下に php.ini は生成されるかと思うのですが、ソースからインストールすると、作成されないんですかね。

php.ini-development 或いは php.ini-production ファイルを /etc/ 直下にファイル名 php.ini としてコピーします。

 

15. apache の設定ファイルを以下のように変更します。

 

 

16. PHP の設定ファイルを変更します。

 

以下の short_open_tag を Off から On に変更します。

 

17. Apache を再起動し、サービスが正常である事を確認します。

 

CentOS 7 なので、Service コマンドではなく、systemctl コマンドを使っております。

詳細は以下のサイトが参考になります。

 

systemctl コマンド | Qiita

https://qiita.com/sinsengumi/items/24d726ec6c761fc75cc9

 

18. テスト用の php ファイルを作成します。

 

[root@localhost php-5.6.29]# cd /var/www/html/
[root@localhost html]# vi test.php
[/code]

 

[code language="php"]
<?php
phpinfo();
?>
[/code]

 

19. ブラウザからアクセスして、phpinfo が表示されたら OK です。

 

以上です。いかがでしょうか。

 

ソースからインストールするのは、rpm や yum でインストールする事と比べると気にしなければならない点が多いかなと思います。

うまくいかない時は、考えてから困ったときの Google 先生に聞くしかないですよね。

今回も本当に色んな方のブログを見て参考にさせて頂きました。ブログや@IT 様含めて様様です。

 

では最後までお読みいただきありがとうございました!

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りな性格です。

人気記事

1

こんにちは!そーまんです。 今回は、PC に適用されている GPO を確認する方法について書きました。 本題に入る前に、一応参考までにGPOの適用タイミングについての記事をここに貼りましたので、必要に ...

2

こんにちは!そーまんです。 今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは前置きからです。 まずはじめに 組織では PC のラ ...

3

こんにちは!そーまんです。 今回は、グループポリシー (GPO) を使って、特定のコンピューターに対して、ドメインユーザーに ローカル管理者権限 (以下は特権と記載) を付与する方法について書きました ...

4

こんにちは!そーまんです。 今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 Windows 10 の検証環境をいじってたらサイン ...

5

こんにちは!そーまんです。 今回は、ユーザープロファイルを削除する方法について書いてみました。 企業の場合よくあることですが、1 台の PC を共有 PC として複数人で使ったり、また余り無いかもしれ ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!そーまんです。 今回は、Windows Server 2019 で NTP サーバーと同期する方法について書きました。 NTP サーバーの必要性や時刻同期の重要性を理解することは社内のシス ...

-PHP
-, ,


Warning: Trying to access array offset on value of type null in /home/r5652521/public_html/soma-engineering.com/wp-content/plugins/amazonjs/amazonjs.php on line 637

Warning: Trying to access array offset on value of type null in /home/r5652521/public_html/soma-engineering.com/wp-content/plugins/amazonjs/amazonjs.php on line 637

Warning: Trying to access array offset on value of type null in /home/r5652521/public_html/soma-engineering.com/wp-content/plugins/amazonjs/amazonjs.php on line 637