DebianストレッチへのPHP 5.3のインストール(9)


8

非常に古いサーバー(Debian etch)をDebian Stretchに移行しています。開発されたすべてのアプリにPHPの問題があります。いくつかは修正できますが、いくつかは修正できません(いくつかのdrupal 6サイトとして)。将来的には、単一のアプリがPHP7.0で提供される予定ですが、その日までにPHP5.3で提供する必要があります。

Debianストレッチは、共同インストール可能なPHPバージョンに対して何らかの「ネイティブ」サポートを備えていますが、私が見つけたすべての例は、PHP5.6(Jessieのバージョン)を使用しています:https ://pehapkari.cz/blog/2017/03/27 / multiple-php-versions-the-easy-way /

また、Debian Jessie、WheezyなどでPHP5.3とPHP5.4またはPHP5.6が連携している例をいくつか見つけましたが、Debian Stretch(PHP7.0)の場合はそうではありません。https://superuser.com/questions/913792 / php-5-3-10-on-debian-jessie

したがって、まず、Debian Stretchのapache2PHP7.0とPHP5.3を一緒に動作させることができるかどうかを知る必要があります。

第二に、これをどのように行うことができるかを理解する必要があります。

私はシステム管理者ではないので、私のdebian知識はゼロから日々成長しています。

ありがとうございました。


Stretchに移行するための特定の要件はありますか?Jessieはまだサポートされていますが、代わりにそれに移行できます。
Stephen Kitt 2017

ここにPHP 5および7で動作する内部サーバーがあります。Stephenにも同意します。Jessieの方が簡単です。セキュリティの問題に対処する意欲はありますか?
Rui F Ribeiro 2017

悲しいことにストレッチは必須です。SOがインストールされた仮想サーバー(debian 9)のrootユーザーを「受け取り」ますが、それ以外はすべて私に任されています。私はPHP5.3のセキュリティ問題を認識しています。すべてのアプリをPHP7.0で動作するように移行できるため、これは一時的な解決策になります
raguchi

私はDebian Stretchをあきらめました。PHP5.3を入手する方法はありません。@ RuiFRibeiro、PHP5のバージョンは5.6ですよね。多分私はdebian JessieでPHP5.3とPHP7.0を持つことができましたが、5.6(apt-get install php7.0-fpm php5-fpm)のような簡単な方法がわかりません。
raguchi

正確に5.6。それは何よりもハックであり、インターネットサーバーでは使用しません。
ルイFリベイロ

回答:


5

私は同様の問題に遭遇し、それをうまく機能させることができました。

私はdebian 9 / nginx / php5.4でサーバーをインストールする必要があったので、それはあなたの前提条件と完全には一致しませんが、解決策は似ていると思います。私がそれを解決するために行った手順をリストします。

基本的に、ソースからphpをインストールする必要があります。これは、opensslサポート(--with-openssl)が必要な場合に問題を引き起こします。これは、古いバージョンのPHP(<7.0)がopenssl> = 1.1.0をサポートしていないためです。 debian 9のデフォルトです。古いopensslバージョンをビルドする必要があります(私は1.0.1uを使用しました)。

しかし、最初にいくつかの依存関係をインストールしましょう。

apt install build-essential checkinstall zip autoconf
apt install libfcgi-dev libfcgi0ldbl libmcrypt-dev libssl-dev libc-client2007e-dev libkrb5-dev libcurl4-openssl-dev
apt install libxml2-dev libcurl4-openssl-dev libpcre3-dev libbz2-dev libjpeg-dev libpng-dev libfreetype6-dev libmcrypt-dev libmhash-dev freetds-dev libmariadbclient-dev-compat unixodbc-dev libxslt1-dev

次に、opensslをビルドします。

cd /opt/
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1u.tar.gz
tar xzf openssl-1.0.1u.tar.gz
cd openssl-1.0.1u
./config shared --openssldir=/usr/local/openssl/ enable-ec_nistp_64_gcc_128
make depend
make
make install
ln -s /usr/local/openssl/lib /usr/local/openssl/lib/x86_64-linux-gnu

連鎖反応として、新しくビルドしたopensslを使用してlibcurlとlibc-client(imapサポート用)をビルドする必要があります。libcurlから始めます。

cd /opt/
wget https://curl.haxx.se/download/curl-7.26.0.tar.gz
tar xzf curl-7.26.0.tar.gz
cd curl-7.26.0
env PKG_CONFIG_PATH=/usr/local/openssl/lib/pkgconfig LDFLAGS=-Wl,-rpath=/usr/local/openssl/lib ./configure --with-ssl=/usr/local/openssl --with-zlib --prefix=/usr/local/curl
make
make install

次に、libc-client。いくつかのパッチが含まれているため、実際にはdebian 8のソースを使用しました。ビルド自体は失敗しましたが、それでもc-client.aが生成されました。

cd /tmp/
wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg-2.dsc
wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg.orig.tar.gz
wget http://http.debian.net/debian/pool/main/u/uw-imap/uw-imap_2007f\~dfsg-2.debian.tar.gz
dpkg-source -x uw-imap_2007f\~dfsg-2.dsc imap-2007f
mv imap-2007f /usr/local/
cd /usr/local/imap-2007f/
touch {ipv6,lnxok}
make slx SSLINCLUDE=/usr/local/openssl/include/ SSLLIB=/usr/local/openssl/lib EXTRAAUTHENTICATORS=gss
mkdir lib include
cp c-client/*.c lib/
cp c-client/*.h include/
cp c-client/c-client.a lib/libc-client.a
ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

これで、PHP5.4をビルドするために必要なすべてが揃いました。コンパイル時にpostgresqlバインディングについて警告があったことに注意してください(ローカルとシステムのopensslバージョンが一致していないため)。使用する場合は、独自のlibpqをビルドする必要があると思います。

cd /opt/
PHP_VER=5.4.45
wget http://museum.php.net/php5/php-${PHP_VER}.tar.gz
tar xzf php-${PHP_VER}.tar.gz
cd php-${PHP_VER}
LDFLAGS="-Wl,-rpath=/usr/local/openssl/lib,-rpath=/usr/local/curl/lib" './configure'  --prefix=/usr/local/php-${PHP_VER} '--with-zlib-dir' '--with-freetype-dir' '--enable-fpm' '--enable-mbstring' '--with-libxml-dir=/usr' '--enable-soap' '--enable-calendar' '--with-curl=/usr/local/curl' '--with-mcrypt' '--with-zlib' '--with-gd' '--disable-rpath' '--enable-inline-optimization' '--with-bz2' '--with-zlib' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-mbregex' '--with-mhash' '--enable-zip' '--with-pcre-regex' '--with-mysql' '--with-pdo-mysql' '--with-mysqli' '--with-jpeg-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--enable-cgi' '--with-pear' '--enable-memcache' '--with-openssl=/usr/local/openssl' '--with-imap=/usr/local/imap-2007f' '--with-kerberos' '--with-imap-ssl' '--with-libdir=lib/x86_64-linux-gnu'
LDFLAGS="-Wl,-rpath=/usr/local/openssl/lib,-rpath=/usr/local/curl/lib" make
make install

残っているのは、php.iniとphp-fpm.confファイルの作成です。これらは、どちらも取るに足らない、php-fpmソケットの構成とinitscriptの作成です(オンラインで十分な例があり、完全なファイルを投稿することはできません)ここ)、およびWebサーバーの構成(ソケット上のfastcgi)。


uw-imap_2007fコンパイルのemake行に問題があります。/usr/local/imap-2007f/ipopd/ipop2d.c
デュビスの

はい、そうです。それでも、c-client / c-client.aファイルが生成されます。これは、次の手順で必要なすべてです。
Arza 2018

2020年現在、uw-imap_2007f \〜dfsg-7.debian.tar.xzとuw-imap_2007f \〜dfsg-7.dscが最新です(パッチ2は使用できなくなりました)。また、解決していない既存の/usr/lib/libc-client.aとの競合もありました。私はimapをスキップすることを選択します。
マーティンM

5

1週間後、なんとかそれを機能させることができました。私はホストをいじるのをやめ、Dockerが私の命を救う方法を学び始めました。

この投稿は私に鍵を与えました: Docker-異なるWebサイトのホストとコンテナーでApacheを実行します

dockerについての私の最初の読みは、DockerによるPHP Web開発です。

要約すると、ホストサーバーにapache2.2とPHP5.3をインストールする必要はありません。必要なもの(通常は1つのサービス)をインストールできる分離されたコンテナーを用意し、ホストOSバージョンとの非互換性を忘れることができます。Dockerがすべてを管理します。したがって、Debian squeeze OSの場合と同様に、Apache 2.2 + PHP 5.3のコンテナを1つ持つことができます。Wheezyの場合と同様に、Apache 2.2 + PHP 5.4を含む別のコンテナ、ストレッチなどのように、Apache 2.4 + PHP7.0を含む別のコンテナ。すべてが同時に機能し、異なるドメインにサービスを提供しています。後者を実現するには、ホスト上でapache / nginxをリバースプロキシとして機能させ、Dockerポートマッピングのおかげで各ドメインを異なるapache-phpコンテナーにリダイレクトします。ホストにapache / nginxをインストールする必要はありません。コンテナ内に置くこともできます。

dockerの方法は、各(マイクロ)サービスをコンテナーに含めることです。これにより、mariaDBを別のコンテナーに入れることができます。

私の手順(要約):(十分な評判を得たら、リンクに投稿することはできません。編集して追加します

0 - Dockerについて読む(多いほど良い):Dockerfileを使用してイメージを構築する方法ベストプラクティスDocker内のネットワークなど...

1 -Dockerをインストールします。常に公式ガイドに従ってください

2-将来のイメージ名(/ home / user / docker / images / apache22php53など)でディレクトリを作成し、内部にDockerfileと構成(この場合はvirtualhost conf)を作成します。私のDockerfileは次のとおりです。

FROM debian:squeeze

LABEL maintainer="raguchi@gmail.com"

# squeeze new mirrors
RUN echo "deb http://archive.debian.org/debian/ squeeze contrib main non-free" > /etc/apt/sources.list

RUN apt-get update
# Common packages
RUN apt-get update && \
    apt-get install -y --force-yes curl wget

RUN apt-get update && \
    apt-get install -y --force-yes \
            apache2 \
            libapache2-mod-php5 \
            ntp \
        php5 \
        php5-curl \
        php5-gd \
        php5-ldap \
        php5-mcrypt \
        php5-mysql \
        vim

RUN a2enmod \
            php5 \
        rewrite \
        ssl


ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP    www-data
ENV APACHE_LOG_DIR  /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2
ENV APACHE_PID_FILE /var/run/apache2.pid
# RUN     chown -R www-data:www-data /var/www
COPY     conf/apache/virtualhosts /etc/apache2/sites-enabled

# disable default virtualhost
RUN a2dissite 000-default

EXPOSE 80
EXPOSE 443

CMD     ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

dir内で、パスの中にvirtualhost confファイルを置きます:conf / apache / virtualhosts /

3-(ディレクトリ内の以前のcd)でイメージをビルドします。

sudo docker build -t apache22php53 .

4-コンテナを起動します:

sudo docker run -ti -d -p 2253:80 -v /var/www/html:/var/www --name apache22php53 apache22php53 /bin/bash

Dockerは2253ホストポートを80コンテナポートにマップ(-p)します。ホストドキュメントルート(/ var / www / html)もapache-containerドキュメントルート(squeeze内は/ var / www)にマウント(-v)します。コンテナー名(--name)も設定されます。

5-コンテナーへのSSH:

sudo docker exec -ti apache22php53 /bin/bash

必要に応じてapacheを起動します(私の場合のように)。「終了」してホストCLIに戻ります。

6 -... yourvhostdomain.com:2253に移動すると、PHP5.3がロードされた状態でApacheが実行されていることがわかります。

これが基本です。その後、コンテナー内のホストデータ(www、データベースなど)をマウントする方法、コンテナーがコンテナー間およびホストと通信する方法(DockerネットワークのプライベートIP)、Docker-composeを使用して複数のコンテナーをセットアップする方法について学習します一度に(Web、データベースなど)、複数のコンテナーWebサーバーなどのリバースプロキシ


それが私が試した唯一の解決策であり、それが私にとってうまくいったので、私は自分の答えを受け入れられたものとしてマークしました。
raguchi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.