レガシー環境から脱却したい

プログラミングや環境構築の話をまとめています。

サポート完全終了のCentOS6とPHP5.6の開発環境をDockerで作成する

f:id:odaryo:20200901175341p:plain

はじめに

2020年11月30日をもちまして、延長サポートを含めたCentOS 6系のすべてのサポートが終了しました。

しかしながら、社内システムなどまだまだ現役の環境はあると思いますし、
リプレース案件の確認作業のために同バージョンの開発環境が欲しいといった要望もあるかと思います。

今回、CentOS6.9で動いているシステムを保守する必要があり、過去に作った開発環境をDockerで動かそうとしたところ「yum install」でこけました。
yumリポジトリなどがすべてアーカイブに移動しているため、デフォルトのままだとリポジトリが見つからずにエラーとなるようです。

そこで、本日はDockerを使ってCentOS6.9環境を構築する方法をまとめます。

Dockerfileについて

実行環境

Dockerで構築する環境

  • CentOS6.9
  • PHP5.6
  • Apache2.2

動いたときのDockerfileはこちらになります。

FROM centos:6.9

ENV PHP_VERSION 5.6.40

RUN sed -i "s|#baseurl=|baseurl=|g" /etc/yum.repos.d/CentOS-Base.repo \
  && sed -i "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-Base.repo \
  && sed -i "s|http://mirror\.centos\.org/centos/\$releasever|http://vault\.centos\.org/centos/6.9|g" /etc/yum.repos.d/CentOS-Base.repo

RUN rpm -Uvh https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm && \
    rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

RUN yum install -y --enablerepo=remi --enablerepo=remi-php56 \
        php \
        php-devel \
        php-mbstring \
        php-pdo \
        php-gd \
        php-xml \
        php-mcrypt \
        php-mysql \
        php-pear \
        php-xdebug \
        php-pecl-xdebug \
    && yum install -y \
        zip \
        unzip \
        httpd \
        gcc

RUN yum clean all

CMD ["/usr/sbin/apachectl","-DFOREGROUND"]

CentOS6.9環境用に作ったものなので、ほかのバージョンにする場合は6.9の記述を変更してください。
PHPモジュールの記述は環境に合わせて修正してください。

変更点

CentOS-Base.repoを修正

yumリポジトリアーカイブされているので、参照先を書き換えます。

RUN sed -i "s|#baseurl=|baseurl=|g" /etc/yum.repos.d/CentOS-Base.repo \
  && sed -i "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-Base.repo \
  && sed -i "s|http://mirror\.centos\.org/centos/\$releasever|http://vault\.centos\.org/centos/6.9|g" /etc/yum.repos.d/CentOS-Base.repo

② PHP5.6をインストールするためのEPELリポジトリを修正

CentOSに標準搭載以外のバージョンのPHPをインストールする場合は、EPEL、REMIリポジトリの設定が必要になります。

EPELリポジトリアーカイブされているため、URLをアーカイブ先に設定します。
REMIレポジトリはそのままで良いみたいです。

RUN rpm -Uvh https://archives.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm && \
    rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

デフォルト設定の場合のエラーについて

Yumリポジトリが見つからない場合のエラー

CentOS-Base.repoを修正すると直ります。

Error: Cannot retrieve repository metadata (repomd.xml) for repository: base. Please verify its path and try again
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
 Eg. Invalid release/repo/arch combination/
removing mirrorlist with no valid mirrors: /var/cache/yum/x86_64/6/base/mirrorlist.txt

② EPELリポジトリの設定を変えていなかった場合のエラー(アーカイブ前のURLを指定した場合)

curl: (22) The requested URL returned error: 403 Forbidden
error: skipping https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm - transfer failed
Retrieving https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm