LoginSignup
1
0

More than 5 years have passed since last update.

検証環境を構築する上で知ったこと

Last updated at Posted at 2019-03-08

古い環境を再現する

古い環境の改修作業でアップグレードなどが要求された場合、依存関係で問題が起きたり、その他諸々リスクが高い。かといって古い環境だからdev環境があることも少ないため、自前で構築する。

古いミドルウェアのパッケージが無い

remiやepelは必要なソフトウェアのパッケージをリポジトリとして持っているし、yumもパッケージ管理ツールとして、リポジトリを持っているが、最新版から少し古めのものは管理されていても、更に古いものは入っていない。
epelやremiでせっかくリポジトリを追加したとしても、listしてみても無いことが多い。

パッケージ化とは

ソースからコンパイルしたソフトウェアそのものが既に作られている状態までしてあることです。コンパイル済みのバイナリと、関連するファイル群が揃っています。インストールした後にすぐ起動できることからよくわかると思います。

パッケージ管理ツール

パッケージの依存関係を解決してくれるツール。CentOSではyumが使われています。

今回のオーダー

  • CentOS 6.9
  • Apache 2.2.27
  • mysql5.6.21
  • php 5.3.3

epelとかremiを使ってみる

epelやremiはOSのバージョンに合ったパッケージ化されたリポジトリを網羅的に持っています。だからいっぱい入っています。マイナーバージョンまで揃えるならepelなどのリポジトリでかたがつきますが、リビジョン番号とビルド番号まで揃えるとなると限界がきます。
冒頭で言いましたが、網羅的とはいえ、アカシックレコードでは無いので過去の全てのバージョンのリポジトリを持っているわけではないです。新しいのから3番目くらいまでが残っている感じですね。赤本みたいです。

$ sudo yum enablerepo=remi list | grep php

php72-php-pecl-geospatial.x86_64       0.2.1-1.el6.remi             remi-safe
php72-php-pecl-gmagick.x86_64          2.0.5~RC1-1.el6.remi         remi-safe
php72-php-pecl-gnupg.x86_64            1.4.0-4.el6.remi             remi-safe
php72-php-pecl-hprose.x86_64           1.6.6-2.el6.remi             remi-safe
php72-php-pecl-hrtime.x86_64           0.6.0-2.el6.remi             remi-safe
php72-php-pecl-http.x86_64             3.2.0-1.el6.remi             remi-safe
php72-php-pecl-http-devel.x86_64       3.2.0-1.el6.remi             remi-safe
php72-php-pecl-igbinary.x86_64         3.0.0-1.el6.remi             remi-safe
php72-php-pecl-igbinary-devel.x86_64   3.0.0-1.el6.remi             remi-safe
php72-php-pecl-imagick.x86_64          3.4.3-9.el6.remi             remi-safe
php72-php-pecl-imagick-devel.x86_64    3.4.3-9.el6.remi             remi-safe
php72-php-pecl-inotify.x86_64          2.0.0-6.el6.remi             remi-safe
php72-php-pecl-ip2location.x86_64      8.0.1-1.el6.remi             remi-safe
php72-php-pecl-json-post.x86_64        1.0.1-7.el6.remi             remi-safe
php72-php-pecl-jsond.x86_64            1.4.0-1.el6.remi             remi-safe
php72-php-pecl-jsond-devel.x86_64      1.4.0-1.el6.remi             remi-safe
php72-php-pecl-krb5.x86_64             1.1.2-2.el6.remi             remi-safe
php72-php-pecl-krb5-devel.x86_64       1.1.2-2.el6.remi             remi-safe
php72-php-pecl-leveldb.x86_64          0.2.1-4.el6.remi             remi-safe
php72-php-pecl-libsodium.x86_64        1.0.7-1.el6.remi             remi-safe
php72-php-pecl-lua.x86_64              2.0.6-1.el6.remi             remi-safe
                                 .
                                 .
                                 .
                                 .
                                 .

とまあこんな具合に欲しいバージョンに限って出てこないです。
なんとかならないものか・・・

で、出てくるのがrpmです。

これも同じくパッケージ化されたリポジトリです。
こちらの方はepelと違いOSにあった全てのパッケージを持ってくるのではなく、ピンポイントで必要なパッケージだけを持ってくることに特化しています。

rpmパッケージ
mysqlのrpmパッケージ

rpmのパッケージは公式に用意されていたり、rpmのまとめサイトなどにありますので、サーフィンして見つけます。

rpmコマンドなんて使ってられねぇよ

rpmのコマンドを使って落っことそうとすると、パッケージ管理ツールでは無いので、依存関係を全く解消してくれません。

$ sudo rpm -ivh http://mirror.centos.org/centos/6/os/i386/Packages/php-5.3.3-49.el6.i686.rpm

Retrieving http://mirror.centos.org/centos/6/os/i386/Packages/php-5.3.3-49.el6.i686.rpm
warning: /var/tmp/rpm-tmp.LIa6wA: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies:
    libbz2.so.1 is needed by php-5.3.3-49.el6.i686
    libc.so.6 is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.0) is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.1) is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.1.3) is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.11) is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.2) is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.2.3) is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.3) is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.3.4) is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.4) is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.7) is needed by php-5.3.3-49.el6.i686
    libc.so.6(GLIBC_2.8) is needed by php-5.3.3-49.el6.i686
    libcom_err.so.2 is needed by php-5.3.3-49.el6.i686
    libcrypt.so.1 is needed by php-5.3.3-49.el6.i686
    libcrypto.so.10 is needed by php-5.3.3-49.el6.i686
    libcrypto.so.10(OPENSSL_1.0.1) is needed by php-5.3.3-49.el6.i686
    libcrypto.so.10(libcrypto.so.10) is needed by php-5.3.3-49.el6.i686
    libdl.so.2 is needed by php-5.3.3-49.el6.i686
    libdl.so.2(GLIBC_2.0) is needed by php-5.3.3-49.el6.i686
    libdl.so.2(GLIBC_2.1) is needed by php-5.3.3-49.el6.i686
    libgmp.so.3 is needed by php-5.3.3-49.el6.i686
    libgssapi_krb5.so.2 is needed by php-5.3.3-49.el6.i686
    libk5crypto.so.3 is needed by php-5.3.3-49.el6.i686
    libkrb5.so.3 is needed by php-5.3.3-49.el6.i686
    libm.so.6 is needed by php-5.3.3-49.el6.i686
    libm.so.6(GLIBC_2.0) is needed by php-5.3.3-49.el6.i686
    libm.so.6(GLIBC_2.1) is needed by php-5.3.3-49.el6.i686
    libnsl.so.1 is needed by php-5.3.3-49.el6.i686
    libpcre.so.0 is needed by php-5.3.3-49.el6.i686
    libssl.so.10 is needed by php-5.3.3-49.el6.i686
    libssl.so.10(libssl.so.10) is needed by php-5.3.3-49.el6.i686
    libxml2.so.2 is needed by php-5.3.3-49.el6.i686
    libxml2.so.2(LIBXML2_2.4.30) is needed by php-5.3.3-49.el6.i686
    libxml2.so.2(LIBXML2_2.5.2) is needed by php-5.3.3-49.el6.i686
    libxml2.so.2(LIBXML2_2.6.0) is needed by php-5.3.3-49.el6.i686
    libxml2.so.2(LIBXML2_2.6.11) is needed by php-5.3.3-49.el6.i686
    libxml2.so.2(LIBXML2_2.6.5) is needed by php-5.3.3-49.el6.i686
    libz.so.1 is needed by php-5.3.3-49.el6.i686
    php-cli(x86-32) = 5.3.3-49.el6 is needed by php-5.3.3-49.el6.i686
    php-common(x86-32) = 5.3.3-49.el6 is needed by php-5.3.3-49.el6.i686

えらい依存関係です。当初これ一個一個調べて入れるのかと思っていましたが、このURLをyumにぶち込んであげれば依存関係を解消しながらインストールまで導いてくれます。

yumでやってみる

$ sudo yum install http://mirror.centos.org/centos/6/os/i386/Packages/php-5.3.3-49.el6.i686.rpm

Loaded plugins: priorities, update-motd, upgrade-helper
php-5.3.3-49.el6.i686.rpm                                                                      | 1.1 MB  00:00:00
Examining /var/tmp/yum-root-X1uSqP/php-5.3.3-49.el6.i686.rpm: php-5.3.3-49.el6.i686
Marking /var/tmp/yum-root-X1uSqP/php-5.3.3-49.el6.i686.rpm to be installed
Resolving Dependencies
                                   .
                                   .
                                   .
                                   .
                                   .

Oh,Yum is Resolving Dependencies!!

それでもエラーが出る

                                   .
                                   .
                                   .
                                   .
Error: Package: php-5.3.3-49.el6.i686 (/php-5.3.3-49.el6.i686)
           Requires: php-cli(x86-32) = 5.3.3-49.el6
Error: Package: php-5.3.3-49.el6.i686 (/php-5.3.3-49.el6.i686)
           Requires: php-common(x86-32) = 5.3.3-49.el6

仕方ないので、こいつを探しに行く。
php-cli(x86-32)で検索していくと、=で結ばれた方の5.3.3-49.el6でrpmのURLがあるので、同じようにyumで入れてあげる。

$ sudo yum install http://mirror.centos.org/centos/6/os/i386/Packages/php-cli-5.3.3-49.el6.i686.rpm
                                   .
                                   .
                                   .
Error: Package: php-cli-5.3.3-49.el6.i686 (/php-cli-5.3.3-49.el6.i686)
           Requires: php-common(x86-32) = 5.3.3-49.el6

まだでやがる。

$ sudo yum install http://mirror.centos.org/centos/6/os/i386/Packages/php-common-5.3.3-49.el6.i686.rpm
                                   .
                                   .
                                   .
Complete!

おっ、終わった。じゃ、先ほどつっかえたphp-cliを再度yumでインストールして、最後にphpそのものをもう一度インストールすれば...

$ sudo yum install http://mirror.centos.org/centos/6/os/i386/Packages/php-cli-5.3.3-49.el6.i686.rpm
                                   .
                                   .
                                   .

Complete!

$ sudo yum install http://mirror.centos.org/centos/6/os/i386/Packages/php-5.3.3-49.el6.i686.rpm
                                   .
                                   .
                                   .
Complete!

$ php -v
PHP 5.3.3 (cli) (built: Mar 22 2017 12:17:33)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

というわけですね。正確に本番環境と同じものをこれで再現できます。

パート2はこちら

検証環境を構築する上で知ったことパート2

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0