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

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

ただいまの
回答率

87.95%

【CentOS/Docker/M1 Mac】php7.1とapacheを導入の際、[error14]404エラーが発生する

解決済

回答 2

投稿 編集

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

score 1

6/11

ご意見、回答ありがとうございます。
M1チップのmacだとremiリポジトリのパッケージをダウンロードする方法が現状見つかっておりません。
引き続き回答を募集させて頂きます。

前提・実現したいこと

Dockerを用いてphp7.1、apacheの環境構築をしたいです。目的としてはLaravelの開発環境を用意したいと考えております。
その後MySQLなど準備したいものはあるのですが初手でつまづいてしまいました。
自分なりに色々と調べてみたのですが手詰まりとなってしまったので、知見をお借りできれば幸いです。

M1チップ搭載のMacを使用しているのが原因のようです。
色々試してはいるのですが解決には至ってないため、何かありましたらご提示いただけますと幸いです。

発生している問題・エラーメッセージ

CentOS 7 に PHP 7.1 を yum でインストールする手順
https://weblabo.oscasierra.net/centos7-php71-install/

こちらのページを参考にインストールを進めていたのですが、apacheとphp7.1を検索する段階で大量のエラーが発生します。

#コンテナ作成
$ docker run -it -d --name test centos:centos7

#コンテナ内部へ移動
$ docker exec -it test /bin/bash

# EPELのリポジトリ情報を取得
$ yum -y install epel-release

# Remiのリポジトリ情報を取得
$ yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

# ここで大量のerror[14]404が発生。インストールに失敗
$ yum search httpd php71

エラーメッセージ一部

# yum search httpd php71
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
epel/aarch64/metalink                                                                                                                          | 9.2 kB  00:00:00
 * base: ftp.yz.yamagata-u.ac.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.yz.yamagata-u.ac.jp
 * remi-safe: ftp.riken.jp
 * updates: ftp.yz.yamagata-u.ac.jp
base                                                                                                                                           | 3.6 kB  00:00:00
extras                                                                                                                                         | 2.9 kB  00:00:00
http://ftp.riken.jp/Linux/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
Trying other mirror.
To address this issue please refer to the below wiki article

https://wiki.centos.org/yum-errors

If above article doesn't help to resolve this issue please use https://bugs.centos.org/.

http://repo1.sea.innoscale.net/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
Trying other mirror.
http://mirrors.thzhost.com/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
Trying other mirror.
http://mirror.bebout.net/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
[…省略…]
Trying other mirror.
https://remi.mirror.digitalpacific.com.au/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
Trying other mirror.
http://mirror.innosol.asia/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 12] Timeout on http://mirror.innosol.asia/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: (28, 'Connection timed out after 30006 milliseconds')
Trying other mirror.
http://mirrors.mediatemple.net/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.mediatemple.net/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: (28, 'Connection timed out after 30006 milliseconds')
Trying other mirror.
http://remi.xpg.com.br/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: remi.xpg.com.br; Unknown error"
Trying other mirror.


 One of the configured repositories failed (Safe Remi's RPM repository for Enterprise Linux 7 - aarch64),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.

     2. Reconfigure the baseurl/etc. for the repository, to point to a working
        upstream. This is most often useful if you are using a newer
        distribution release than is supported by the repository (and the
        packages for the previous distribution release still work).

     3. Run the command with the repository temporarily disabled
            yum --disablerepo=remi-safe ...

     4. Disable the repository permanently, so yum won't use it by default. Yum
        will then just ignore the repository until you permanently enable it
        again or use --enablerepo for temporary usage:

            yum-config-manager --disable remi-safe
        or
            subscription-manager repos --disable=remi-safe

     5. Configure the failing repository to be skipped, if it is unavailable.
        Note that yum will try to contact the repo. when it runs most commands,
        so will have to try and fail each time (and thus. yum will be be much
        slower). If it is a very temporary problem though, this is often a nice
        compromise:

            yum-config-manager --save --setopt=remi-safe.skip_if_unavailable=true

failure: repodata/repomd.xml from remi-safe: [Errno 256] No more mirrors to try.
http://ftp.riken.jp/Linux/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
[…省略…]
https://mirror.hoster.kz/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
https://remi.mirror.digitalpacific.com.au/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] HTTPS Error 404 - Not Found
http://mirror.innosol.asia/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 12] Timeout on http://mirror.innosol.asia/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: (28, 'Connection timed out after 30006 milliseconds')
http://mirrors.mediatemple.net/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 12] Timeout on http://mirrors.mediatemple.net/remi/enterprise/7/safe/aarch64/repodata/repomd.xml: (28, 'Connection timed out after 30006 milliseconds')
http://remi.xpg.com.br/enterprise/7/safe/aarch64/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: remi.xpg.com.br; Unknown error"

試したこと

調べたところ同様のエラーの事例は数多くありましので、キャッシュの削除やネットワーク通信の確認をしましたが問題は解決しませんでした。

#キャッシュの削除
$ yum clean all
$ rm -rf /var/cache/yum/*


#ネットワーク通信の確認
ping www.yahoo.co.jp

試したこと②

ダウンロードに失敗しているミラーサイトのURLを見るとaarch64になっているがremiからはaarch64の配布を行っていない(x86_64に書き換えると有効なURLが見つかる)

$ docker run -it -d --platform linux/amd64 --name centos7 centos:centos7
$ docker exec -it centos7 /bin/bash
$ uname -m
x86_64


X86_64でCentOSが起動できているかと思ったのですが

# yum -y install epel-release
# yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum search httpd php71
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile


 One of the configured repositories failed (Unknown),
 and yum doesn't have enough cached data to continue. At this point the only
 safe thing yum can do is fail. There are a few ways to work "fix" this:

     1. Contact the upstream for the repository and get them to fix the problem.
(以下省略)


やはり同様のエラーが出てしまいました。

補足情報

mirrorとして出てくるURLが全て無効なものなので、根本的に何か方法を間違えているのかと思います。

https://shsm385.hatenablog.com/entry/2019/09/20/102722
こちらのサイトが参考になるかと思ったのですが、

#CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/altarch/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
       file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7-aarch64

#released updates

例えばこのCentOS-Base.repoをどのように修正すればいいのか、

あるいはエラーの最初に出てくるhttp://ftp.riken.jp/Linux/remi/enterprise/7/safe/aarch64/repodata/repomd.xmlのURLが404ならばどのようにして正しいURLを探せば良いのか、解決の方向性が分からず困っております。

また、PHPとapache導入のコマンドをDockerfileにまとめたいと思っているため、viで編集するというのは根本的な解決ではないのかなと感じております。

長くなりましたがCentOS7にphp7とapacheを導入するにあたり、御助言いただければ幸いです。
よろしくお願いします。

Dockerfile

一連の処理をDockerfileにまとめても同じエラーが発生しました。
できればDockerfileでphp7.1とapacheがインストールできるようになるとありがたいです。

RUN yum search httpd php71 の際にエラーが発生します。

FROM centos:7

RUN yum -y install epel-release
RUN yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

RUN yum search httpd php71

CMD ["/usr/sbin/httpd","-DFOREGROUND"]
# docker build -t testphpimg .
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • altg

    2021/06/11 10:37

    追記しておきべきでした。M1チップのMacbookを使用しております。

    Keynoさんの回答を見てもそうだったのですが原因が分かりすっきりしました。
    確かに下記のようにaarch64の部分を書き換えるとパッケージを見つけることができました。
    ありがとうございます!

    キャンセル

  • FKM

    2021/06/11 12:02

    クローズする場合は情報提供者にBAを返しておいてください。あとあとの閲覧者も困りませんので。

    キャンセル

  • altg

    2021/06/11 14:53

    問題解決ができていないので、このままにしておいた方が良いかと思ったのですがいかがでしょうか?
    M1 Macで同様のエラーに阻まれている人も多いため、解決策が見つかれば後の方々の役にも立つかなと思っております。

    キャンセル

回答 2

checkベストアンサー

+3

内容

yum 参照時の CPU アーキテクチャ依存について 

yum での取得URLが aarch64 となっているのをみるに、M1 Mac などの arm 用CPUをお使いでしょうか。

remi では arm 用のPHP自体が配布されてなさそうなので、yum での取得ができないと思われます。
Riken - remi repository mirror について

Docker コンテナを起動時にプラットフォーム指定して x86_64 でさせるか、
PHP, apache の Docker を使用するかがよいと思いました。
(追記: 他の方の回答で PHP のソースビルドに触れられていますが、そちらはその通りで失念でした)

M1 Mac を所有していないので、検証できていないのですが、
プラットフォーム指定はコマンド引数に「--platform linux/amd64」を指定すると起動できそうです。
Docker - マルチアーキテクチャ起動について

PHP, Apache 環境の Docker Image について

用途が不明で申し訳ないのですが、centos でなくてもよいのであれば、
Docker image に PHP のものや apache のものがあるので、
そちらを使うなどするのも手段かと思います。

※目的が開発環境の準備であれば、既存のイメージを利用をしたほうが早く目的を達成できるのでは考えたのでこちらについても触れさせていただきました。

追記

yum repository について

centos に yum repository を追加後、有効化の設定変更が必要になるので、
yum install 時にオプションコマンドで有効化する必要があることについて触れてませんでした。

(例)

# yum install httpd php71 --enablerepo=remi-php71

 /etc/yum.repos.d/ 配下の ***.repo を設定変更する方法と、
yum コマンド実行時のコマンドオプションで --enablerepo を指定する方法があります

Laravel 開発の Docker 環境について

Docker で Laravel を使用されたということであれば、Sail を使うという方法が推奨されているようです(Laravel 公式製)。
Laravel - Sail

ただ、M1 Mac で使う場合は mysql => mariadb に差し替える必要があったりはするようです  
参考URL

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2021/06/11 11:51

    おっしゃる通りM1チップ搭載のMacbookを使っております。
    原因がはっきりして大変ありがたいです!

    理解できていない部分もあるかと思うのですが、

    $ docker run -it -d --platform linux/amd64 --name centos7 centos:centos7
    $ docker exec -it centos7 /bin/bash
    $ uname -m
    x86_64

    という結果になったので、x86_64でプラットフォームを指定できるのかと思うのですが、やはりphp7を導入することはできませんでした。

    # yum search httpd php71
    のコマンドの際にすぐ
    One of the configured repositories failed (Unknown),(以下略)のエラーが出力されます。

    M1 Mac+DockerでLaravelの開発環境を作成したいため、自分の認識違いでなければcentosは必要になってくるかと思います。

    ひとまず古いMacで開発を進めようと思いますが、質問はこのままとさせて頂ければと思います。
    回答ありがとうございました。

    キャンセル

  • 2021/06/12 03:52

    なるほど、確認ありがとうございます。
    以下2点について確認させてください。
    - x86_64 アーキでの起動後の php install について
    - Mac M1 での Laravel 開発環境について

    ## x86_64 アーキでの起動後の php install について

    こちらですが、エラー文をみると yum の動作の問題みたいですね。
    ネットワークなのか、キャッシュなのかとか理由はなんなんでしょうね。。。

    ちなみにですが、php 用の yum repository は有効になっていますでしょうか?
    私がためしたところ、remi-release-7.rpm を入れただけだとレポジトリが有効にならないみたいなので、
    設定変更などで明示的に有効にする必要があると思うのですが、そちらは設定されてますでしょうか。

    私は設定変更が面倒なのでいつも yum install の時の引数で有効化していれてしまってます。
    以下のコマンドを実行すれば、私の環境では php71 は見つかりました(指定なしだとみつからず)
    # yum search php71 --enablerepo=remi-php71

    yum repository の有効の有無は 「yum repolist <repo名>」 で確認できます
    # yum repolist all |grep php71
    remi-php71 Remi's PHP 7.1 RPM repository disabled

    なので、今回だと enablerepo を試してもらってもよいでしょうか?

    ## Mac M1 での Laravel 環境について

    最終目標が Laravel 環境構築なのですね。
    Laravel のことに詳しくないので把握しきれていないのですが、
    php が入っていれば composer でとってこれそうと思ったのですが、 centos 特有の何かが必要なんですね。

    docker で Laravel を使用されたいということであれば、Sail を使うという方法が一般的なようです。
    Laravel 公式がこれを使うと開発環境の構築がスムーズにできる、と言って提供してくれているようです。
    https://readouble.com/laravel/8.x/ja/sail.html

    ただ、M1 Mac で使う場合は mysql => mariadb に差し替える必要があったりはするようです
    参考: https://alfrednutile.info/posts/sail/

    この環境だと、期待した環境にならない感じでしょうか

    キャンセル

  • 2021/06/14 17:39

    ご確認ありがとうございます。
    確かに enablerepo を試したところファイルが何も見つかりませんでした。

    repositoryの有効、無効についてそこで色々と試していたところ、
    ①epelをインストールした段階でyumが起動しなくなっていることが分かった
    ②etc/yum.repos.d/epel.repo を編集
    https://www.mapleharp.jp/342/
    こちらを参考に、metalinkをコメントアウトし、baseurlを有効にしました
    ③remi-release-7.rpm のインストールに成功
    ④docker上でphpとapacheの動作を確認

    という結果になりました。
    一旦こちらで進めてみたいと思います。

    ここからLaravelの環境構築となるとこれからまた問題がありそうなのですが、当初の問題は解決したので一旦BA(クローズ)とさせて頂きます。
    DockerやCentOSについてもまだまだ理解不足な点があると思うので、今後の課題とさせて頂きます。
    Sailという方法については初めて知りましたので、こちらも試してみたいと思います。

    ともあれ、長らく悩んでいた問題が一つ解決してすっきりしております。
    ありがとうございます!

    キャンセル

+2

Apache (httpdパッケージ)と、 Remi リポジトリの php71 パッケージの問題を分けて考えます。

aarch64 アーキテクチャの httpd パッケージを yum で入れる

まず、エラーメッセージ

[Errno 14] HTTP Error 404 - Not Found Trying other mirror.

と出るのは、CentOS 7 ミラーサイトのうち、 x86_64 以外のアーキテクチャをミラーしていない所が多いためです。ちなみに、国内のミラーサイトの場合は、aarch64 対応のパッケージを公式ミラーしているのは山形大学(ftp.yz.yamagata-u.ac.jp)だけです。

対策は、この山形大学のミラーを参照させるようにします。

# echo 'prefer=ftp.yz.yamagata-u.ac.jp' >> /etc/yum/pluginconf.d/fastestmirror.conf

それから、 yum search httpd を実行すると、aarch64 対応のパッケージ情報が確認できるでしょう。

この状態で、 yum install httpd を実行しますと、 aarch64 対応の httpd パッケージを yum で入れられます。

# yum -y install httpd
(途中省略)
Installed:
  httpd.aarch64 0:2.4.6-97.el7.centos

Dependency Installed:
  apr.aarch64 0:1.4.8-7.el7                        apr-util.aarch64 0:1.5.2-6.el7
  centos-logos.noarch 0:70.0.6-3.el7.centos        httpd-tools.aarch64 0:2.4.6-97.el7.centos
  mailcap.noarch 0:2.1.41-2.el7

Complete!

このように、バージョン情報等も確認できるでしょう。

# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov 16 2020 16:22:16

Remi リポジトリでの aarch64 用 PHP 7.1 のパッケージについて

現状提供されているのは http://rpms.remirepo.net/enterprise/7/php71/ にありますように x86_64 アーキテクチャのものしかありません。

Remi リポジトリでの yum でのバイナリ配布はありませんので、ソースコードから構築するか、SRPM ファイルを使って RPM ファイルをビルドするなどの方法があります。

捕捉

そもそもの目的が M1 上で Laravel を使われたいのであれば、現状様々な障壁があるようです。

たとえば、 https://laravelm1.tighten.co/ にまとまっている手順で Laravel が入るようですが、こちらで紹介されている手法では、Docker は対応していないようでした。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2021/06/14 17:44

    回答ありがとうございます。
    まだM1チップでの開発は厳しいようですね…。
    そういったご意見を頂けてありがたいです。

    ミラーの参照方法など、今後の参考にさせて頂きます。

    キャンセル

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

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

関連した質問

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