Установка древнего php 5.2 на Debian 8

1. Установка (сборка) php 5.2.17

Ставим необходимые для сборки пакеты:

sudo apt-get install libxml2-dev libmysqlclient-dev libcurl4-gnutls-dev libpng12-dev libjpeg62-turbo-dev make libxslt1-dev libbz2-dev libmcrypt-dev libmhash-dev libfcgi-dev libmhash-dev libltdl3-dev checkinstall

Делаем симлинки на библиотеки, иначе скрипт конфигурации php их не найдёт:

ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so.62.1.0 /usr/lib/libjpeg.so 
ln -s /lib/x86_64-linux-gnu/libpng12.so.0.50.0 /usr/lib/libpng.so 
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0 /usr/lib/libmysqlclient.so

Качаем исходники нужной версии php из Музея PHP:

mkdir /opt/sources
cd /opt/sources
wget http://museum.php.net/php5/php-5.2.17.tar.gz
tar zxf ./php-5.2.17.tar.gz
cd ./php-5.2.17

Размещать php будем в /opt/php5.2. Указываем этот путь в параметрах скрипта конфигурации, и запускаем конфигурирование:

./configure --prefix=/opt/php5.2 --with-config-file-path=/opt/php5.2 --with-mysqli --with-mysql --with-curl --with-gd --with-jpeg-dir --enable-cli --enable-fastcgi --enable-discard-path --enable-force-cgi-redirect --enable-mbstring --with-mcrypt

Если возникают ошибки, то доставляйте необходимые библиотеки.

Перед тем, как приступить к сборке, нужно пропатчить исходники (иначе не скомпилится). Патчим и компилируем:

wget https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
patch -p0 -b < txtbgxGXAvz4N.txt
make

Чтобы не замусоривать систему, сделаем deb-пакет с помощью checkinstall:

checkinstall --pkgname php5.2.17 --pkgversion 5.2.17

Параметры для пакета выставляем приблизительно такие:

This package will be built according to these values:
0 - Maintainer: [ root@host ]
1 - Summary: [ PHP 5.2.17 ]
2 - Name: [ php5.2.17 ]
3 - Version: [ 5.2.17 ]
4 - Release: [ 1 ]
5 - License: [ GPL ]
6 - Group: [ checkinstall ]
7 - Architecture: [ amd64 ]
8 - Source location: [ php-5.2.17 ]
9 - Alternate source location: [ ]
10 - Requires: [ ]
11 - Provides: [ php ]
12 - Conflicts: [ ]
13 - Replaces: [ ]
Enter a number to change any of them or press ENTER to continue: 

Далее запустится сборка пакета, а затем его устанавка:

Installing with make install...
========================= Installation results ===========================
Installing PHP SAPI module:       cgi
Installing PHP CGI binary: /opt/php5.2/bin/
Installing PHP CLI binary:        /opt/php5.2/bin/
Installing PHP CLI man page:      /opt/php5.2/man/man1/
Installing build environment:     /opt/php5.2/lib/php/build/
Installing header files:          /opt/php5.2/include/php/
Installing helper programs:       /opt/php5.2/bin/
  program: phpize
  program: php-config
Installing man pages:             /opt/php5.2/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /opt/php5.2/lib/php/
[PEAR] Archive_Tar    - installed: 1.3.7
[PEAR] Console_Getopt - installed: 1.2.3
[PEAR] Structures_Graph- installed: 1.0.3
[PEAR] XML_Util       - installed: 1.2.1
[PEAR] PEAR           - installed: 1.9.1
Wrote PEAR system config file at: /opt/php5.2/etc/pear.conf
You may want to add: /opt/php5.2/lib/php to your php.ini include_path
Installing PDO headers:          /opt/php5.2/include/php/ext/pdo/
======================== Installation successful ==========================
...

Проверяем:

root@host:/etc/apt# /opt/php5.2/bin/php -v
PHP 5.2.17 (cli) (built: Jun 20 2017 12:01:50)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

В дальнейшем, если понадобится удалить установленный таким образом пакет, выполните:

dpkg -r php5.2.17

Выставляем права на директорию:

chmod ugo+rX -R /opt/php5.2/

На этом установка php 5.2 закончена. Далее настроим Nginx для работы с этим php в режиме FastCGI.

2. Nginx + php_fcgi

Ставим пакет, при помощи которого будем запускать php 5.2 в режиме fcgi:

sudo apt-get install spawn-fcgi

Создаём каталог для pid-файла:

mkdir /var/run/php52-fastcgi

Делаем саму обёртку:

mkdir /var/www/cgi-bin
cat<<'EOF'>>/var/www/cgi-bin/php52tcp.fcgi
#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
ADDRESS=127.0.0.1
PORT=9020
PIDFILE=/var/run/php52-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/opt/php5.2/bin/php-cgi

/usr/bin/spawn-fcgi -a $ADDRESS -p $PORT -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
EOF

Создаём скрипт инициализации демона:

cat<<'EOF'>>/etc/init.d/php52-fastcgi
#!/bin/bash

PHP_SCRIPT=/var/www/cgi-bin/php52.fcgi
FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
PID_DIR=/var/run/php52-fastcgi
PID_FILE=/var/run/php52-fastcgi/php-fastcgi.pid
RET_VAL=0

case "$1" in
    start)
      if [[ ! -d $PID_DIR ]]
      then
        mkdir $PID_DIR
        chown $FASTCGI_USER:$FASTCGI_GROUP $PID_DIR
        chmod 0770 $PID_DIR
      fi
      if [[ -r $PID_FILE ]]
      then
        echo "php-fastcgi already running with PID `cat $PID_FILE`"
        RET_VAL=1
      else
        $PHP_SCRIPT
        RET_VAL=$?
      fi
  ;;
    stop)
      if [[ -r $PID_FILE ]]
      then
        kill `cat $PID_FILE`
        rm $PID_FILE
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE"
        RET_VAL=1
      fi
  ;;
    restart)
      if [[ -r $PID_FILE ]]
      then
        kill `cat $PID_FILE`
        rm $PID_FILE
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE"
      fi
      $PHP_SCRIPT
      RET_VAL=$?
  ;;
    status)
      if [[ -r $PID_FILE ]]
      then
        echo "php-fastcgi running with PID `cat $PID_FILE`"
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE, php-fastcgi does not appear to be running"
      fi
  ;;
    *)
      echo "Usage: php-fastcgi {start|stop|restart|status}"
      RET_VAL=1
  ;;
esac
EOF

Скачать файл скрипта можно здесь.

Добавляем бит исполнения и проверяем созданную службу:

chmod +x /etc/init.d/php52-fastcgi
chmod 0755 /var/www/cgi-bin/php52.fcgi
/etc/init.d/php52-fastcgi start
ps aux | grep php

Если всё ОК, то добавляем демона в систему:

update-rc.d php52-fastcgi defaults

Осталось добавить в конфиг Nginx обращение к установленному нами FastCGI-серверу для обработки php-скриптов:

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9020
location ~ \.php$ {
  include snippets/fastcgi-php.conf;
  fastcgi_pass 127.0.0.1:9020;
}

На этом всё.

Добавить комментарий