Страница 1 из 1

CentOS (nagios аплаенс)

Добавлено: Чт авг 29, 2013 3:31 pm
bbq
Всем bon dia!

Делюсь скромным опытом установки на линукс.
Наконец-то дорвался до проекта!!)))
Поставил сегодня систему на работе, пока появилось время)) и решил написать экспириенс)
немного про настройки на CentOS:
система:
[root@localhost mdm]# uname -a
Linux nagios 2.6.32-358.2.1.el6.x86_64 #1 SMP Wed Mar 13 00:26:49 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
(OVF template running CentOS 6.x with Nagios XI) under ESXi

прошу не спрашивать "почему нагиос аплаенс?? о_О".

сначала создал БД:
#mysql -u root -p
create database mdm;
потом залил SQL дамп в базу mdm:
#mysql -u root -p mdm < db_terminal.sql
распаковал архив:
tar -xvzf _majordomo_linux_050b.tar.gz
создал директорию /var/www/mdm:
mkdir /var/www/mdm
скопировал содержимое архива (файл .htaccess перетаскиваем отдельно, тк не копируется таким методом):
cp -R html/* /var/www/mdm/
с помощью dos2unix переделал все php файлы (удаляются лишние символы переноса каретки ^M)
добавил виртуал хост в httpd.conf
<VirtualHost my_ip:80>
ServerName smarthouse
ServerAdmin почта@ya.ru
DocumentRoot /var/www/mdm
<Directory /var/www/mdm>
Allowoverride All
</Directory>
</VirtualHost>
рестартанул апач
зашел на главную страничку, потупил немного, понял, что что-то не так (php не отрабатывает а плюет в браузер сам код)
решил найти такие файлы:
find . -type f -name '*.php'|xargs grep '^<?'|grep -v '<?php'
потом заменил их <? на <?php
#find . -type f -name '*.php'|xargs sed -i 's/^<?$/<?php/'

запустил цикл из шелла и тут посыпало...(полотенце с ошибками ниже)

В некоторых случаях,в моем кейсе, PHP не перадает переменные (суп.Г.массива $_SERVER) от апача, например: $_SERVER['REQUEST_METHOD'] REQUEST_URI SERVER_NAME
что-то пришлось захардкодить руками, что-то поменять
для lib/loader.php добавил проверку $_SERVER['REQUEST_URI']
# cat lib/loader.php
<?php
/**
* Libraries loader
*
* Used to load required libraries
*
* @author Serge Dzheigalo <[email protected]>
* @package framework
* @copyright ActiveUnit, Inc. 2001-2004
* @version 1.0
* @modified 01-Jan-2004
*/
if(empty($_SERVER['REQUEST_URI'])){
$THIS_URL = $_SERVER['PHP_SELF'].(empty($_SERVER['QUERY_STRING']) ? '':'?'.$_SERVER['QUERY_STRING']);
} else {
$THIS_URL = $_SERVER['REQUEST_URI'];
}

// Define("THIS_URL", $_SERVER['REQUEST_URI']);
// liblary modules loader
if ($lib_dir = @opendir("./lib")) {
while (($lib_file = readdir($lib_dir)) !== false) {
if ((preg_match("/\.php$/", $lib_file)) && ($lib_file!="loader.php")) {
include_once("./lib/$lib_file");
}
}
closedir($lib_dir);
}

?>


в lib/general.class.php заменил определение метода POST GET на getenv()
...$_SERVER['REQUEST_METHOD']... на
if (getenv('REQUEST_METHOD')=="POST")

про ошибки в cycle.php:
----- PHP CLI STDOUT errors -------------------------
PHP Notice: Undefined offset: 1 in /var/www/mdm/lib/objects.class.php on line 100
PHP Notice: Undefined variable: result in /var/www/mdm/lib/threads.php on line 106
PHP Notice: Undefined offset: 0 in /var/www/mdm/lib/objects.class.php on line 43
-----------проблемныее функции--------------------------------
public function iteration() {
if (!count($this->streams)) {
return false;
}
$read = $this->streams;
if (false === ($number_of_streams=stream_select($read, $write=null, $except=null, $this->timeout))) {
DebMes("No active streams");
return 0;
}
/*
$stream = next($read);
if (!$stream) {
reset($read);
$stream=current($read);
}
*/
foreach($read as $stream) {
$id = array_search($stream, $this->streams);
//$result = stream_get_contents($this->pipes[$id][1]);
if (feof($stream) || ($contents = fread($stream, 255))==false) {
echo "\n".date('H:i:s')." Closing thread: ".$this->commandLines[$id];
DebMes("Closing thread: ".$this->commandLines[$id]);
fclose($this->pipes[$id][0]);
fclose($this->pipes[$id][1]);
proc_close($this->handles[$id]);
unset($this->handles[$id]);
unset($this->streams[$id]);
unset($this->pipes[$id]);
unset($this->commandLines[$id]);
} else {
echo $contents;
//echo "\n".date('H:i:s')." Thread is running OK: ".$this->commandLines[$id];
}
}
return $result; //line 106
}

// закоменчено $objects=SQLSelect("SELECT ID, TITLE FROM objects WHERE CLASS_ID='".$class_record['ID']."'");

$sub_classes=SQLSelect("SELECT ID, TITLE FROM classes WHERE PARENT_ID='".$class_record['ID']."'");
if ($sub_classes[0]['ID']) { //line 43
$total=count($sub_classes);
for($i=0;$i<$total;$i++) {
$sub_objects=getObjectsByClass($sub_classes[$i]['TITLE']);
if ($sub_objects[0]['ID']) {
foreach($sub_objects as $obj) {
$objects[]=$obj;
}
}
}
}

Полотенце из апач лога:
------ uniq error_log apache -----------PHPNotice--------------------
Undefinedindex:instancein/var/www/mdm/lib/jTemplate.class.phponline543,referer:http://smarthouse/menu.html
Undefinedindex:MEMORY_STARTin/var/www/mdm/lib/perfmonitor.class.phponline38,referer:http://smarthouse/menu.html
Undefinedproperty:shoutbox::$actionin/var/www/mdm/modules/shoutbox/shoutbox.class.phponline88,referer:http://smarthouse/menu.html
Undefinedproperty:shoutbox::$modein/var/www/mdm/modules/shoutbox/shoutbox.class.phponline149,referer:http://smarthouse/menu.html
Undefinedproperty:shoutbox::$data_sourcein/var/www/mdm/modules/shoutbox/shoutbox.class.phponline163,referer:http://smarthouse/menu.html
Undefinedproperty:shoutbox::$view_modein/var/www/mdm/modules/shoutbox/shoutbox.class.phponline164,referer:http://smarthouse/menu.html
Undefinedproperty:commands::$room_idin/var/www/mdm/modules/shoutbox/shouts_search.inc.phponline8,referer:http://smarthouse/menu.html
Undefinedproperty:shoutbox::$actionin/var/www/mdm/modules/shoutbox/shouts_search.inc.phponline17,referer:http://smarthouse/menu.html
Undefinedproperty:shoutbox::$actionin/var/www/mdm/modules/shoutbox/shouts_search.inc.phponline29,referer:http://smarthouse/menu.html
Undefinedproperty:shoutbox::$actionin/var/www/mdm/modules/shoutbox/shouts_search.inc.phponline82,referer:http://smarthouse/menu.html
Undefinedindex:SHOUT_ROOM_IDin/var/www/mdm/modules/shoutbox/shouts_search.inc.phponline111,referer:http://smarthouse/menu.html
Undefinedoffset:0in/var/www/mdm/modules/shoutbox/shouts_search.inc.phponline121,referer:http://smarthouse/menu.html
Undefinedindex:SHOUT_ROOM_IDin/var/www/mdm/modules/shoutbox/shouts_search.inc.phponline142,referer:http://smarthouse/menu.html
Undefinedoffset:0in/var/www/mdm/modules/shoutbox/shouts_search.inc.phponline143,referer:http://smarthouse/menu.html
Undefinedproperty:shoutbox::$actionin/var/www/mdm/modules/shoutbox/shouts_search.inc.phponline155,referer:http://smarthouse/menu.html
Undefinedindex:MEMORY_STARTin/var/www/mdm/lib/perfmonitor.class.phponline38,referer:http://smarthouse/menu.html
Undefinedindex:nocachein/var/www/mdm/index.phponline25,referer:http://smarthouse/menu.html
Undefinedindex:instancein/var/www/mdm/lib/module.class.phponline204,referer:http://smarthouse/menu.html
Undefinedproperty:application::$doc_namein/var/www/mdm/modules/application.class.phponline115,referer:http://smarthouse/menu.html
Undefinedproperty:application::$docin/var/www/mdm/modules/application.class.phponline234,referer:http://smarthouse/menu.html
Undefinedproperty:application::$doc_idin/var/www/mdm/modules/application.class.phponline235,referer:http://smarthouse/menu.html
Undefinedindex:MY_MEMBERin/var/www/mdm/modules/application.class.phponline237,referer:http://smarthouse/menu.html
Undefinedproperty:application::$ajaxin/var/www/mdm/modules/application.class.phponline241,referer:http://smarthouse/menu.html
Undefinedproperty:application::$popupin/var/www/mdm/modules/application.class.phponline242,referer:http://smarthouse/menu.html
UseofundefinedconstantTODAY-assumed'TODAY'in/var/www/mdm/modules/application.class.phponline
Undefinedproperty:application::$ajaxin/var/www/mdm/lib/jTemplate.class.phponline80,referer:http://smarthouse/menu.html
Undefinedproperty:jTemplate::$ajaxin/var/www/mdm/lib/jTemplate.class.phponline145,referer:http://smarthouse/menu.html
Undefinedindex:instancein/var/www/mdm/lib/jTemplate.class.phponline540,referer:http://smarthouse/menu.html
Undefinedindex:instancein/var/www/mdm/lib/jTemplate.class.phponline543,referer:http://smarthouse/menu.html
Undefinedindex:MEMORY_STARTin/var/www/mdm/lib/perfmonitor.class.phponline38,referer:http://smarthouse/menu.html
Undefinedindex:MEMORY_STARTin/var/www/mdm/lib/perfmonitor.class.phponline38
Undefinedvariable:argvin/var/www/mdm/objects/index.phponline58
Undefinedvariable:requestin/var/www/mdm/objects/index.phponline81
Undefinedvariable:commandLinein/var/www/mdm/objects/index.phponline90
Undefinedindex:MEMORY_ENDin/var/www/mdm/lib/perfmonitor.class.phponline53
Undefinedindex:TIMEin/var/www/mdm/lib/perfmonitor.class.phponline56
Undefinedindex:NUMin/var/www/mdm/lib/perfmonitor.class.phponline57

на всякий случай вложил phpinfo

К разработчику два вопроса:
1. будет ли чистый алпаенс под линукс, чтобы сразу все из коробки
2. как устрнанить ошибки:
Undefined offset: 1 in /var/www/mdm/lib/objects.class.php on line 100
Undefined variable: result in /var/www/mdm/lib/threads.php on line 106
Undefined offset: 0 in /var/www/mdm/lib/objects.class.php on line 43

К юниксоидам:
- если у кого-то был опыт оптимизации WEB сервера в связке (LAMP) под Linux или FreeBSD в контексте проекта,
прошу поделиться знаниями
(в идеале хочется убрать не нужное, оставить нужное, оптимизировать окружение ОС, PHP, Web сервер, базу под проект для перфоманса на не шустром и маленьком железе =)
- мб у кого-то есть опыт оптимизации ядра FreeBSD, настроек управления памятью и работы стека TCP/IP через интерфейс sysctl под raspberryPi mod.B

Re: CentOS (nagios аплаенс)

Добавлено: Чт авг 29, 2013 3:38 pm
sergejey
Для начала отключаем NOTICE в php.ini...
В остальном как-то сложно получилось :) На форуме есть инструкции под FreeBSD/Rasperry -- там врод без таких танцев с бубмном. Т.е. база, права на папки и в общем-то и всё.

Re: CentOS (nagios аплаенс)

Добавлено: Чт авг 29, 2013 4:02 pm
bbq
sergejey писал(а):Для начала отключаем NOTICE в php.ini...
В остальном как-то сложно получилось :) На форуме есть инструкции под FreeBSD/Rasperry -- там врод без таких танцев с бубмном. Т.е. база, права на папки и в общем-то и всё.
1. Сергей, огромное СПАСИБО за отличный проект!
2. ошибки NOTICE ушли.
надеюсь на функционал ошибки ниже не повлияют
PHP Notice: Undefined offset: 1 in /var/www/mdm/lib/objects.class.php on line 100
PHP Notice: Undefined variable: result in /var/www/mdm/lib/threads.php on line 106
3. с FreeBSD и RPI буду эксперементировать на выходных (если что-то получится) добавлю опыт к трэду "FreeBSD/Rasperry"

Re: CentOS (nagios аплаенс)

Добавлено: Чт авг 29, 2013 5:00 pm
LutsenkoDenis
Undefined offset: 1 in /var/www/mdm/lib/objects.class.php on line 100
Я это вроде бы правил. Посмотрю по приходу домой. Возможно не отправил изменения.
Проблема в том, что в данном файле(хотя там много такого в коде) есть такой кусок кода:

Код: Выделить всё

$tmp = explode('.', $varname);
if ($tmp[1])
{
   $object_name = $tmp[0];
   $varname = $tmp[1];
} 

И если в $tmp будет только один элемент(индекс 0), то будет выдаваться ошибка. Т.к. в идёт обращение к индексу которого не существует($tmp[1]).

Re: CentOS (nagios аплаенс)

Добавлено: Чт авг 29, 2013 5:20 pm
sergejey
Undefined offset / Undefined variable на работу не влияет никак. Т.е. интерпретатор показывает уведомление (notice) о том, что потенциально это может быть ошибкой, но в данном случае ничего страшного не может случиться и текущая логика вполне нормально отрабатывает. Код не идеальный, но notice-ы я не рассматриваю как что-то стоящее для исправления :)

Re: CentOS (nagios аплаенс)

Добавлено: Чт авг 29, 2013 5:41 pm
bbq
sergejey писал(а):Undefined offset / Undefined variable на работу не влияет никак. Т.е. интерпретатор показывает уведомление (notice) о том, что потенциально это может быть ошибкой, но в данном случае ничего страшного не может случиться и текущая логика вполне нормально отрабатывает. Код не идеальный, но notice-ы я не рассматриваю как что-то стоящее для исправления :)
ОК. Главное не влияет на логику... :)
вот код с проверкой наличия элемента в массиве через функцию in_array() (вроде работает с нотайсами):

Код: Выделить всё

 function getGlobal($varname) {
  $tmp=explode('.', $varname);
  if(in_array("1", $tmp)){
  //if (array_key_exists('1', $tmp)) {
 // if ($tmp[1]) {
   $object_name=$tmp[0];
   $varname=$tmp[1];
  } else {
   $object_name='ThisComputer';
  }
  $obj=getObject($object_name);
  if ($obj) {
   return $obj->getProperty($varname);
  } else {
   return 0;
  }
 }
сначала накатал криво код (первый блок похоже не выполнялся тк массив $tmp не имел ключей)

Код: Выделить всё

if (array_key_exists('1', $tmp))

Re: CentOS (nagios аплаенс)

Добавлено: Чт авг 29, 2013 6:53 pm
LutsenkoDenis
могу ошибаться, но по моему для решения данной проблемы достаточно написать вместо

Код: Выделить всё

if ($tmp[1])
вот так:

Код: Выделить всё

if (isset($tmp[1]))

Re: CentOS (nagios аплаенс)

Добавлено: Пт авг 30, 2013 1:35 am
LutsenkoDenis
а удалось кому под линуксом проиграть музыку в плере?
например в vlc

Re: CentOS (nagios аплаенс)

Добавлено: Чт апр 17, 2014 9:51 pm
immortal
а можно выложить сюда архивчик без переноса каретки ^M и с <?php во всех файлах.