Месяц: Апрель 2014

Интересные патчи для chan_dongle

Здравствуйте !

Решил поделиться тем что нашел на просторах интернета

патч который позволяет указывать пин код в конфигурации к каждому свистку

https://github.com/pld-linux/asterisk-chan_dongle

патч для 11 версии asterisk :

https://github.com/jstasiak/asterisk-chan-dongle/archive/asterisk11.zip

 

Несколько версий php на одном сервере freebsd

Здравствуйте

Вот столкнулся с кучей грабель которые так любят делать разработчики привязывающиеся к определенной версии php в итоге у знакомого не работало то что ему хотелось так как на сервере установлена на теперешний момент версия php5.4 которая ну никак не хотела работать с его движком подумав что в принципе что такое php интерпритатор  что он фактически не отличается от другого софта с которым можно сделать так ))) потому конечно и можно установить несколько версий просто в разные папки ) конечно придется повозиться с некоторыми вещами для того что бы все заработало но тем не менее оно работает ) но так как apache я уже давно перестал брать во внимание лично для себя и для знакомых ) буду описывать установку и настройку для nginx то есть php-fpm

версий 5.2, 5.3, 5.4

поехали :

для начало установим обычную версию php которая актуальна для данного момента :

cd /usr/ports/lang/php5

make config выбираем поддержку FPM + CGI + CLI

пишем make && make install

ждем пока установиться дальше установим расширения для php

cd /usr/pors/lang/php5-extensions

make config выбираем нужное

дальше как обычно make && make install

предположим что все установилось

теперь нам нужно это все настроить но думаю это вы и сами сможете 😉

потому начну сразу с установки младших версий :

берем php53

cd /usr/ports/lang/php53

make config выбираем CLI+CGI + FPM остальное по вкусу )

и пишем такую вот строку :

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php53 PHPBASE=/usr/local/php53 install

ждем пока соберется )  и ловим ошибку ))

для того что бы её победить переходим в директорию

cd work

и пишем :

pkg_add -f php53-5.3.28.tbz

после повторяем наши конвульсии :

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php53 PHPBASE=/usr/local/php53 install

на сей раз все собралось теперь давайте посмотрим работает ли )

/usr/local/php53/bin/php -v
PHP 5.3.28 with Suhosin-Patch (cli) (built: Apr 11 2014 03:39:19)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

ну версию во всяком случае показало

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

/usr/local/php53/bin/php -m

на выхлопе у меня получилось такое :

/usr/local/php53/bin/php -m
[PHP Modules]
Core
date
ereg
libxml
mysqlnd
pcre
Reflection
SPL
standard

[Zend Modules]

 

если у вас  все так же то  переходим к следующему пункту установке

более старого и древнего php52

для php-fpm он требует установленную libevent

cd /usr/ports/devel/libevent

пишем make && make install

переходим к установке

cd /usr/ports/lang/php52

make config Выбираем CLI+CGI+ FPM остальное по вкусу

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php52 PHPBASE=/usr/local/php52 install

запускаем установку и ловим ошибку ))

у меня ошибка вылезла такого вот вида :

Creating bzip’d tar ball in ‘/usr/ports/lang/php52/work/php52-5.2.17_14.tbz’
tar: bin/php: Cannot stat: No such file or directory
tar: bin/php-cgi: Cannot stat: No such file or directory

получаем  балалайки но в папке /usr/local/php52 есть файлы и бинарники ) те которые нам нужны

теперь самое интересное переходим к настройке php-fpm что бы nginx мог использовать разные версии php

и так путей у нас есть 2 каждый знает что php-fpm может использовать либо listen 127.0.0.1 порт тратата  либо listen /var/run/php-fpm.sock я для себя предпочел 1й вариант то есть listen 127.0.0.1:9001

теперь определимся с портами для разных версий :

listen 127.0.0.1:9001 это у нас будет php54 правим наш конфиг php-fpm для него то есть либо тут /usr/local/etc/php-fpm.conf либо /usr/local/etc/php54/php-fpm.conf в зависимости от того куда его устанавливали …

listen 127.0.0.1:9002 это у нас будет php53 правим наш конфиг php-fpm для него файл /usr/local/php53/etc/php-fpm.conf

кроме этого нам нужно ещё в этой же папке перейти в директорию rc.d и поправить там стартовый файл  php-fpm:

заходим в него и ищем строку :

по умолчанию она имеет такой вид :

 

pidfile=»/var/run/php-fpm.pid»

но если на сервере уже есть установленный php-fpm то данный файл для них будет одинаков что не есть гуд и работать ничего не будет … что нужно сделать конечно же изменить его название для себя решил сделать вот так :

pidfile=»/var/run/php-fpm53.pid» и сохраняем наш файл

 

теперь переходим к настройке php-fpm для php52 :

фактически все так же за исключением того что у меня не оказалось стартового файла для php52-fpm  и + конфиг выглядит несколько иначе но это не мешает нам исправить те же строки которые правили раньше )

строку :

<value name=»pid_file»>/var/run/php-fpm/php-fpm.pid</value>

приводим к виду :

<value name=»pid_file»>/var/run/php-fpm52.pid</value>

ищем секцию pool

строку :

<value name=»listen_address»>127.0.0.1:9000</value>

приводим к виду :

<value name=»listen_address»>127.0.0.1:9003</value>

сохраняем наш файл

и переходим к созданию стартового скрипта:
touch /usr/local/php52/etc/rc.d/php-fpm

chmod +x /usr/local/php52/etc/rc.d/php-fpm

и редактируем данный файл :

#!/bin/sh

# PROVIDE: phpfpm
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable php-fpm:
#
#phpfpm_enable=»YES»
#
#

. /etc/rc.subr

name=phpfpm
rcvar=`set_rcvar`

command=»/usr/local/php52/bin/php-cgi»
command_args=»»
pidfile=/var/run/php-fpm52.pid
required_files=/usr/local/php52/etc/php-fpm.conf

# set defaults

phpfpm_enable=${phpfpm_enable:-«NO»}

start_cmd=»phpfpm_start»
stop_cmd=»phpfpm_stop»
restart_cmd=»phpfpm_restart»

phpfpm_start()
{
if [ -f ${pidfile} ]
then
echo «php-fpm already running!»
exit 1;
fi
echo «Starting php-fpm server…»
/usr/local/php52/bin/php-cgi —fpm
}
phpfpm_stop()
{
if [ ! -f ${pidfile} ]
then
echo «${name} is not running or pidfile not found!»;
exit 1;
fi
echo «stopping ${name}…»
kill -SIGQUIT `cat ${pidfile}`
}
phpfpm_restart()
{
if [ ! -f ${pidfile} ]
then
echo «${name} is not running or pidfile not found!»;
exit 1;
fi
echo «sending SIGUSR2 to php-fpm master»
kill -SIGUSR2 `cat ${pidfile}`
}

load_rc_config ${name}
run_rc_command «$1″

сохраняем и прописываем в /etc/rc.conf

phpfpm_enable=»YES»

теперь пробуем что у нас получилось 😉

/usr/local/etc/rc.d/php-fpm start

/usr/local/php53/etc/rc.d/php-fpm start

/usr/local/php52/etc/rc.d/php-fpm start

у нас должны запуститься 3 версии php-fpm слушающих на нужных нам портах

теперь нужно в nginx описать конфигурацию под разные версии пхп )

в конфиге nginx в секции http {

прописываем :

upstream php54 {

server 127.0.0.1:9001;

}

upstream php53 {

server 127.0.0.1:9002;

}

 

upstream php52 {

server 127.0.0.1:9003;

}

 

для того что бы использовать определенную версию нам нужно будет в секции server {

в location ~ \.php$ {

указать

fastcgi_pass php54; вместо php54 может быть и php53 или php52

}

так с этим разобрались теперь

нам нужны extensions для php53 и php52

ставим их для php53

cd /usr/ports/lang/php53-extensions

make config и выбираем нужные нам

затем пишем :

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php53 PHPBASE=/usr/local/php53

и ждем пока установиться

когда установилось смотрим есть ли все они )

/usr/local/php53/bin/php -m

[PHP Modules]
bcmath
Core
ctype
curl
date
dba
dom
ereg
exif
fileinfo
filter
gd
hash
iconv
imap
json
libxml
mbstring
mcrypt
mhash
mysql
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
snmp
soap
sockets
SPL
SQLite
sqlite3
standard
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
zip
zlib

[Zend Modules]

у меня вот такой вот список получился )

то есть ура php53 готов к работе )

теперь php52 производим те же действия

cd /usr/ports/lang/php52-extensions

make config выбираем нужные нам

и пишем

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php52 PHPBASE=/usr/local/php52

и тут нас ждут балалайки такого вида :

«/usr/ports/Mk/bsd.php.mk», line 368: Malformed conditional (${_USE_PHP_VER${PHP_VER}:Mctype} != «»)

и эти балалайки я обходил так :

мне нужны только вот эти расширения :
curl iconv json mbstring mysql  openssl pcre pdo pdo-mysql sessions snmp sockets spl sqlite xml xmlreader xmlwriter zip zlib

установим их вручную ) раз простым путем не хочет, а там видать косяк ))

cd /usr/ports/ftp/php52-curl

make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php52 PHPBASE=/usr/local/php52 && make -D FORCE_PKG_REGISTER PREFIX=/usr/local/php52 PHPBASE=/usr/local/php52 install

остальное по аналогии )

в итоге у нас на сервере стоят 3 разных версии пхп каждая со своими расширениями )

на этом буду прощаться 😉 удачных вам установок )

 

 Внимание при копировании данной статьи авторство должно сохраняться

 ссылка должна быть активной и открытой для следования роботов ! 

Спасибо за внимание ! 

P.s. Уважайте чужой труд !