鶏口牛後な日々

魔法使い(なんでも作れるエンジニア)を目指してます。ブログは発散中

AWSにLaravelをインストールしようとするのだが必要なphp関連モジュールがないと怒られまくる

Laravelのインストールに必要なモジュールがない!

開発環境で開発していたプロジェクトは、composerでライブラリ管理をしていました。 Laravelも、 composer.json というファイルで必要なモジュール含めて管理していて、 composer install すれば一気にインストールされる予定でした。 しかし、この composer install コマンドが通らない。

というのも、依存性のあるライブラリがありません、と出てしまうのでした。 調べてみると、上でインストールしたPHPのパッケージのみならず、Laravelを動かすために必要な関連モジュールが他にもいくつかインストール必要なことがわかりました。

様々なサイトを見比べてみると、いくつもあったのですが、類似のモジュールをrepoで探してインストールして少しずつ解消して行きました。 こんな感じです。

sudo yum --enablerepo=remi-php71 --disablerepo=amzn2-core install php-pdo php-mbstring php-pecl-zip php-fpm

  • yumはOSに必要なライブラリ管理ですね。
  • install の後ろは、モジュール名ですね。これらのモジュールは、上記コマンドでインストールできました。
  • --enablerepo=remi-php71 は、 remi-php71 というrepoを優先的に使ってね、というオプションです。
  • --disablerepo=amzn2-core は、 amzn2-core というrepoは使わないでね、というオプションです。

この2つの長ったらしいオプションは、つけないと、 amzon2-core というrepoを優先的に使ってしまうからです。
このrepoは、必要なphpのモジュールがなかったり、すごくバージョンが古いものが入っていたりすることが多かったです。
また、 --enablerepo=remi-php71 だけすればいいかと思いましたが、 --disablerepo しないと、 amzn2-core が優先されてしまったので、注意が必要です。

そもそも、最初は、必要なモジュールが入っているrepoを探して、repoをダウンロードするところからやりました。

頑固にインストールされてくれないモジュール

最後まで残ったのが, php-xmlphp-dom です。 その時に使ったコマンドはこれ。

sudo yum install --enablerepo=remi-php71 --disablerepo=amzn2-core php-xml php-dom

これらをインストールしようとすると、これらが依存する libxslt.so.1というモジュールがない! というエラーが出続けました。

こんな奴です。

Resolving Dependencies
--> Running transaction check
---> Package php-xml.x86_64 0:7.1.21-1.el7.remi will be installed
--> Processing Dependency: libxslt.so.1(LIBXML2_1.0.24)(64bit) for package: php-xml-7.1.21-1.el7.remi.x86_64
--> Processing Dependency: libxslt.so.1(LIBXML2_1.0.22)(64bit) for package: php-xml-7.1.21-1.el7.remi.x86_64
--> Processing Dependency: libxslt.so.1(LIBXML2_1.0.18)(64bit) for package: php-xml-7.1.21-1.el7.remi.x86_64
--> Processing Dependency: libxslt.so.1(LIBXML2_1.0.13)(64bit) for package: php-xml-7.1.21-1.el7.remi.x86_64
--> Processing Dependency: libxslt.so.1(LIBXML2_1.0.11)(64bit) for package: php-xml-7.1.21-1.el7.remi.x86_64
--> Processing Dependency: libxslt.so.1()(64bit) for package: php-xml-7.1.21-1.el7.remi.x86_64
--> Processing Dependency: libexslt.so.0()(64bit) for package: php-xml-7.1.21-1.el7.remi.x86_64
--> Finished Dependency Resolution
Error: Package: php-xml-7.1.21-1.el7.remi.x86_64 (remi-php71)
           Requires: libxslt.so.1(LIBXML2_1.0.18)(64bit)
Error: Package: php-xml-7.1.21-1.el7.remi.x86_64 (remi-php71)
           Requires: libxslt.so.1(LIBXML2_1.0.24)(64bit)
Error: Package: php-xml-7.1.21-1.el7.remi.x86_64 (remi-php71)
           Requires: libexslt.so.0()(64bit)
Error: Package: php-xml-7.1.21-1.el7.remi.x86_64 (remi-php71)
           Requires: libxslt.so.1(LIBXML2_1.0.13)(64bit)
Error: Package: php-xml-7.1.21-1.el7.remi.x86_64 (remi-php71)
           Requires: libxslt.so.1()(64bit)
Error: Package: php-xml-7.1.21-1.el7.remi.x86_64 (remi-php71)
           Requires: libxslt.so.1(LIBXML2_1.0.22)(64bit)
Error: Package: php-xml-7.1.21-1.el7.remi.x86_64 (remi-php71)
           Requires: libxslt.so.1(LIBXML2_1.0.11)(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

libxslt.so とかでググってもなんも出てこないんで、これはマジでハマりました。。。

詳しい方に相談したら、 sudo yum install libxml2-devel libxslt-devel やってみて、と言われて、これでちゃんと通ったんです。

参考:CentOSにlxmlをインストールするときにlibxml/xmlversion.hがないと怒られる場合の対処法

聞くところによると、CやOSの知識がある人でないと、そのライブラリが何を指していてどんなものを入れればいいのか、感覚的にわかりにくいものなんだとか。 libxslt を入れるのに、yum installするときは、 libxslt-devel と読み替えないといけないけど、経験がある人にはわかるというのは、素人にはきつい話です。 環境構築を最初にやる初心者が誰しも通る道のりなのだとか・・・ 勉強の仕方だけでも明らかにしてほしい・・・

その辺のOSやインフラの感覚はまだまだ勉強不足です。

この libxslt をインストールしてから、php-xmlphp-dom を入れ直すコマンドを打ってみると、これは通りました。

以上。