четверг, 10 марта 2011 г.

Установка расширения ffmpeg-php на rhel 5.5.

Установка репозитариев:
cat /etc/yum.repos.d/local.repo
[Local]
name=local
baseurl=file:///mnt/Server
enabled=1
gpgcheck=0

cat /etc/yum.repos.d/dag.repo
[Dag]
name=dag
baseurl=http://apt.sw.be/redhat/el5/en/i386/dag
enabled=1
gpgcheck=0

Скачиваем дополнительные репозитории epel и remi:
wget -c http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
wget -c http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm

Установка необходимых пакетов:
yum -y --enablerepo=remi,epel install mysql-server php php-devel
yum -y --enablerepo=remi,epel install php-xml (модуль dom.so)
yum -y --enablerepo=remi,epel install php-mbstring php-mcrypt php-intl php-gd
yum -y install gcc httpd re2c
yum -y install ffmpeg ffmpeg-devel libvorbis-devel

Скачиваем сам пакет ffmpeg-php:
wget -c http://switch.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2

tar xjf ffmpeg-php-0.6.0.tbz2

cd ffmpeg-php-0.6.0
phpize
./configure --enable-static --disable-debug
make
вылазит ошибка «error: PIX_FMT_RGBA32 undeclared»
в файле ffmpeg_frame.c меняем PIX_FMT_RGBA32 на PIX_FMT_RGB32

cp modules/ffmpeg.so /usr/lib/php/modules

echo "extension=ffmpeg.so" > /etc/php.d/ffmpeg.ini

Если в логах вылазит предупреждение «Persistent movies have been disabled in php.ini», то:
cat << EOF >> /etc/php.ini

[ffmpeg]
ffmpeg.allow_persistent=on
EOF

Также выставить date = Europe/Kiev или какой у вас часовой пояс.

service httpd restart
chkconfig httpd on

Проверка какие модули установлены и их параметры:
cat << EOF >> /var/www/html/index.php
<?php
phpinfo();
?>
EOF

Тестирование ffmpeg (естественно файл предварительно скопировать на сервер):

mkdir -p /var/www/html/tt
chown apache:apache /var/www/html/tt
cp test.avi /var/www/html/tt

cat /var/www/html/tt/test.php

<?php
$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;

if(!extension_loaded($extension)) {
dl($extension_soname) or die("Can't load extension $extension_fullname\n");
}

$fil='/var/www/html/tt/test.avi';
$frame = 6;
$time = time ();
$movie = new ffmpeg_movie($fil, 1);

$duration = $movie->getDuration();

if ( $duration > 6 ){
$minutes = floor($movie -> getDuration ()/ 60);
$seconds = $movie -> getDuration ()% 60 ;
}

echo 'File: <font color="red">' . $_SERVER [ 'DOCUMENT_ROOT' ] .'/tt/test.avi</font> longs ' . $duration . ' seconds<br />' ;

$img = $_SERVER [ 'DOCUMENT_ROOT' ]. '/tt/' . $time . '_' . $frame . '.jpg' ;

$ff_frame = $movie -> getFrame ( $frame );
if ( $ff_frame ){
$gd_image = $ff_frame -> toGDImage ();
if ( $gd_image ) {
imagepng ( $gd_image , $img );
imagedestroy ( $gd_image );
}
}

echo $minutes . ' min ' . $seconds . ' sec.<br />' ;

echo '<img src="' . $time . '_' . $frame . '.jpg" />' ;

$franecount = $movie->getFrameCount();
$framerate = $movie->getFrameRate();
$filename = $movie->getFilename();
$comment = $movie->getComment();

echo "<br /><br />number of frames in a movie or audio file.".$franecount."<br />";
echo "frame rate of a movie in fps".$framerate."<br />";
echo "path and name of the movie file or audio file.".$filename."<br />";
echo "comment field from the movie or audio file.".$comment."<br />";
?>
 


Заходим на http://YOUR_SERVER_IP/index.php и смотрим страницу с модулями, ищем ffmpeg, если есть смотрим http://YOUR_SERVER_IP/tt/test.php.
Если что-то не получилось посмотрите сначала в файл ошибок вашего web-сервера.

Литература:

http://linuxhostingsupport.net/blog/error-pix_fmt_rgba32-undeclared
http://itblog.su/php-ffmpeg-ustanovka-na-centos-5.html

четверг, 3 марта 2011 г.

Проверка очереди сообщений в MDaemon с помощью Nagios.

Вообщем после очередной неудачной рассылки прайсов/накладных и т.п. через MDaemon вокникла супер-идея мониторить количество сообщений и в случае ЧП пропихивать их вручную. Как проверять? Дык есть же Nagios!
Теперь по делу. Поскольку MDaemon не имеет возможности отдавать по snmp данные о своей загрузке, пришлось писать скрипт на powershell, который будет мониторить каждые 5 минут папку Remoteq (Remote Queue) и, если их число превысит какое-то значение, то информировать заинтересованных лиц.
Собственно последовательность действий:
1. Написать скрипт и поднастроить powershell (Set-ExecutionPolicy RemoteSigned)
$MAX_WARN=50
$MAX_CRIT=200
$DIR="d:\Program Files\MDaemon\Remoteq\"
$FILTER="*msg"

$X = (get-childitem $DIR -include $FILTER -recurse ).count

if (( $X -gt $MAX_WARN ) -and ( $X -lt $MAX_CRIT )) {
Write-host "In RemoteQueue there are: "$X " message(s)."
exit 1
}
elseif ( $X -gt $MAX_CRIT ){
Write-host "In RemoteQueue there are: "$X " message(s)."
exit 2
}
else {
Write-host "In RemoteQueue there are: "$X " message(s)."
exit 0
}

2. Установить/настроить конфигурационный файл nsclient++ - прописать в nsc.ini что-то типа такого:

[NRPE Handlers]
check_mdqueue=cmd /c echo d:\mdqueue.ps1 ; exit $LastExitCode | powershell -command -

3. Запустить/перезапустить nsclient++
4. Открыть порт 5666 на windows firewall для хоста(ов) мониторинга.
5. Настроить nagios, добавить в список проверяемых сервисов.
define service{
use local-service
host_name khonsu
service_description MDaemon remote queues
check_command check_nrpe!check_mdqueue
}
6. Проверка с хоста nagios
/usr/local/nagios/libexec/check_nrpe -H khonsu -c check_mdqueue
In RemoteQueue there are: 3 message(s).