среда, 15 сентября 2010 г.

Инвентаризация компьютеров в сети не вставая со стула или OCS Inventory + GLPI

Всем доброго времени суток!


Как видно из заголовка, речь пойдет о двух программах:
1. Open Computers and Software Inventory
OCS-Inventory основан на распределяемых модулях, устанавливаемых на инвентаризируемые машины, которые отсылают подробную информацию о системе, подключенных устройствах и установленном ПО в выделенную базу данных.
Поддерживаются следующие OS: Microsoft Windows, Linux, *BSD, Sun Solaris, IBM AIX, HP-UX, MacOS X

2. GPLI — Guestion Libre de Parc Informatique
Проект предназначен для работы с базой данных IT и телекоммуникационного оборудования, установленного на предприятии. Также имеется возможность ведения учета расходных материалов и организации службы технической поддержки по расписанию и по заявкам пользователей.

На просторах сети интернет достаточно много информации о настройке данной связки, но мне не встретилось ни одного подробного how to, где были бы решены все вопросы с локализацией. Поэтому я изложу компиляцию найденых решений и собственных доработок.

Итак, начнем!


Установка OCS Inventory.
Версия OCS: Ver. 1.3.2
В качестве серверной ОС для сбора данных у меня будет выступать ОС FreeBSD. Я не буду описывать установку и настройку LAMP(в данном случае FAMP =)). Будем исходить из того, что это у вас уже настроено.
Перед тем как начать установку и настройку OCS Inventory, проверьте установленны ли следующие порты
/usr/ports/www/mod_perl2
/usr/ports/sysutils/logrotate
/usr/ports/lang/perl

В конфиге apache должна быть строка
LoadModule perl_module libexec/apache22/mod_perl.so
Проверьте установленны ли следующие модули perl
Apache::DBI -- 1.08
BSD::Resource -- 1.2904
Bundle::NetSNMP -- ???
Class::Inspector -- 1.24
Compress::Raw::Bzip2 -- 2.030
Compress::Raw::Zlib -- 2.030
DBD::mysql -- 4.017
DBI -- 1.613
Digest::SHA1 -- 2.13
ExtUtils::MakeMaker -- undef
HTML::Parser -- 3.68
HTML::Tagset -- 3.20
IO::Compress -- ???
LWP -- 5.836
Locale::gettext -- 1.05
Net::IP -- 1.25
Perl -- 5.8.9
SOAP::Lite -- 0.712
Storable -- 2.21
Task::Weaken -- 1.03
URI -- 1.55
XML::Entities -- 1.0000
XML::Parser -- 2.36
XML::Simple -- 2.18
mod_perl2 -- 2.000004

для этого достаточно запустить вот такой скрипт
#!/usr/local/bin/perl
use ExtUtils::Installed;
my $instmod = ExtUtils::Installed->new();
foreach my $module ($instmod->modules()) {
my $version = $instmod->version($module) || "???";
print "$module -- $version\n";
}

Если что-то из приведенного списка у вас отсутствует, то установите коммандой
#cpan -e ModulName

1. Качаем пропатченый сервер

OCSNG в UTF8. Спасибо некоему linvinus!
Автор патча сделал для нас все что нужно, нам лишь осталось исправить небольшой недочет. Открываем архив, находим там файл /ocsinventory-server-1.3.2/ocsreports/languages/russian.txt, меняем в первой строке windows-1251 на utf8 и сохраняем в кодировке UTF8. Тарбол с исправленным russian.txt можно взять здесь

2. Распаковывыем архив в папку на сервере(у меня это /usr/local/www/ocs/).

#tar -xf OCSNG_UNIX_SERVER-1.3.2-linvinus-with-utf8_patch.tar.gz

3. Создадим директорию для logrotate

#mkdir /etc/logrotate.d

4. Изменяем владельца папки

# chown -R www:www /usr/local/www/ocs/

5. Далее переходим в папку и запускаем setup.sh

#sh setup.sh

+----------------------------------------------------------+
| |
| Welcome to OCS Inventory NG Management server setup ! |
| |
+----------------------------------------------------------+

CAUTION: If upgrading Communication server from OCS Inventory NG 1.0 RC2 and
previous, please remove any Apache configuration for Communication Server!

Do you wish to continue ([y]/n)?
Assuming Communication server 1.0 RC2 or previous is not installed
on this computer.

Starting OCS Inventory NG Management server setup from folder /usr/local/www/ocs
Storing log in file /usr/local/www/ocs/ocs_server_setup.log

+----------------------------------------------------------+
| Checking for database server properties... |
+----------------------------------------------------------+

Your MySQL client seems to be part of MySQL version 5.1.
Your computer seems to be running MySQL 4.1 or higher, good ;-)

Which host is running database server [localhost] ?
OK, database server is running on host localhost ;-)

On which port is running database server [3306] ?
OK, database server is running on port 3306 ;-)

+----------------------------------------------------------+
| Checking for Apache web server daemon... |
+----------------------------------------------------------+

Where is Apache daemon binary [/usr/local/sbin/httpd] ?
OK, using Apache daemon /usr/local/sbin/httpd ;-)

+----------------------------------------------------------+
| Checking for Apache main configuration file... |
+----------------------------------------------------------+

Where is Apache main configuration file [/usr/local/etc/apache22/httpd.conf] ?
OK, using Apache main configuration file /usr/local/etc/apache22/httpd.conf ;-)

+----------------------------------------------------------+
| Checking for Apache user account... |
+----------------------------------------------------------+

Which user account is running Apache web server [User] ?www
OK, Apache is running under user account www ;-)

+----------------------------------------------------------+
| Checking for Apache group... |
+----------------------------------------------------------+

Which user group is running Apache web server [www] ?www
OK, Apache is running under users group www ;-)

+----------------------------------------------------------+
| Checking for Apache Include configuration directory... |
+----------------------------------------------------------+

Setup found Apache Include configuration directory in
.
Setup will put OCS Inventory NG Apache configuration in this directory.
Where is Apache Include configuration directory [] ?/usr/local/etc/apache22/Includes
OK, Apache Include configuration directory /usr/local/etc/apache22/Includes found ;-)

+----------------------------------------------------------+
| Checking for PERL Interpreter... |
+----------------------------------------------------------+

Found PERL Intrepreter at </usr/bin/perl> ;-)
Where is PERL Intrepreter binary [/usr/bin/perl] ?
OK, using PERL Intrepreter /usr/bin/perl ;-)

Do you wish to setup Communication server on this computer ([y]/n)?

+----------------------------------------------------------+
| Checking for Make utility... |
+----------------------------------------------------------+

OK, Make utility found at </usr/bin/make> ;-)

+----------------------------------------------------------+
| Checking for Apache mod_perl version... |
+----------------------------------------------------------+

Checking for Apache mod_perl version 1.99_22 or higher
Found that mod_perl version 1.99_22 or higher is available.
OK, Apache is using mod_perl version 1.99_22 or higher ;-)

+----------------------------------------------------------+
| Checking for Communication server log directory... |
+----------------------------------------------------------+

Communication server can create detailled logs. This logs can be enabled
by setting interger value of LOGLEVEL to 1 in Administration console
menu Configuration.
Where to put Communication server log directory [/var/log/ocsinventory-server] ?
OK, Communication server will put logs into directory /var/log/ocsinventory-server ;-)

+----------------------------------------------------------+
| Checking for required Perl Modules... |
+----------------------------------------------------------+

Checking for DBI PERL module...
Found that PERL module DBI is available.
Checking for Apache::DBI PERL module...
Found that PERL module Apache::DBI is available.
Checking for DBD::mysql PERL module...
Found that PERL module DBD::mysql is available.
Checking for Compress::Zlib PERL module...
Found that PERL module Compress::Zlib is available.
Checking for XML::Simple PERL module...
Found that PERL module XML::Simple is available.
Checking for Net::IP PERL module...
Found that PERL module Net::IP is available.

+----------------------------------------------------------+
| Checking for optional Perl Modules... |
+----------------------------------------------------------+

Checking for SOAP::Lite PERL module...
Found that PERL module SOAP::Lite is available.
Checking for XML::Entities PERL module...
Found that PERL module XML::Entities is available.

+----------------------------------------------------------+
| OK, looks good ;-) |
| |
| Configuring Communication server Perl modules... |
+----------------------------------------------------------+

Writing Makefile for Apache::Ocsinventory

+----------------------------------------------------------+
| OK, looks good ;-) |
| |
| Preparing Communication server Perl modules... |
+----------------------------------------------------------+

+----------------------------------------------------------+
| OK, prepare finshed ;-) |
| |
| Installing Communication server Perl modules... |
+----------------------------------------------------------+

+----------------------------------------------------------+
| OK, Communication server Perl modules install finished;-)|
| |
| Creating Communication server log directory... |
+----------------------------------------------------------+

Creating Communication server log directory /var/log/ocsinventory-server.

Fixing Communication server log directory files permissions.
Configuring logrotate for Communication server.
/usr/local/www/ocs
Removing old communication server logrotate file /etc/logrotate.d/ocsinventory-NG
Writing communication server logrotate to file /etc/logrotate.d/ocsinventory-server

+----------------------------------------------------------+
| OK, Communication server log directory created ;-) |
| |
| Now configuring Apache web server... |
+----------------------------------------------------------+

To ensure Apache loads mod_perl before OCS Inventory NG Communication Server,
Setup can name Communication Server Apache configuration file
'z-ocsinventory-server.conf' instead of 'ocsinventory-server.conf'.
Do you allow Setup renaming Communication Server Apache configuration file
to 'z-ocsinventory-server.conf' ([y]/n) ?y
OK, using 'z-ocsinventory-server.conf' as Communication Server Apache configuration file
Removing old communication server configuration to file /usr/local/etc/apache22/Includes/ocsinventory.conf
Writing communication server configuration to file /usr/local/etc/apache22/Includes/z-ocsinventory-server.conf

+----------------------------------------------------------+
| OK, Communication server setup sucessfully finished ;-) |
| |
| Please, review /usr/local/etc/apache22/Includes/z-ocsinventory-server.conf
| to ensure all is good. Then restart Apache daemon. |
+----------------------------------------------------------+

Do you wish to setup Administration Server (Web Administration Console)
on this computer ([y]/n)?n

Setup has created a log file /usr/local/www/ocs/ocs_server_setup.log. Please, save this file.
If you encounter error while running OCS Inventory NG Management server,
we can ask you to show us his content !

DON'T FORGET TO RESTART APACHE DAEMON !

Enjoy OCS Inventory NG ;-)

6. Создадим файл виртуалхоста

#ee /usr/local/etc/apache22/Includes/ocs.conf
<VirtualHost *:80>
ServerAdmin webmaster@domen.ru
DocumentRoot /usr/local/www/ocs/ocsreports
ServerName ocs.domen.ru
ServerAlias www.ocs.domen.ru
ErrorLog "|/usr/local/sbin/rotatelogs /var/log/httpd/http.ocs.domen.ru-error_log.%Y-%m-%d-%H_%M_%S 86400"
CustomLog "|/usr/local/sbin/rotatelogs /var/log/httpd/http.ocs.domen.ru-access_log.%Y-%m-%d-%H_%M_%S 86400" common

<Directory />
Order deny,allow
Allow from 192.168.0.0/16
Options Indexes FollowSymLinks
DirectoryIndex index.php
AllowOverride Options
php_flag file_uploads on


7. Подключимся к mysql и создадим пользователя с нужными правами

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3495
Server version: 5.1.41 FreeBSD port: mysql-server-5.1.41

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> GRANT ALL PRIVILEGES ON ocsweb.* TO 'ocs'@'localhost' IDENTIFIED BY 'ocs';


8. Мы почти у цели, открываем наш любимый фаерфокс браузер и вводим

http: // ip_address/ocsreports
В строке «Nombre del servidor» вводим localhost
image

жмем «Отправить запрос»
image
Кликаем по ссылке
image

Выбираем флаг нашей Родины и вводим admin/admin

image

9. Проверяем работоспособность нашего OCSNG сервера

Для того чтобы к нам на сервер приходили отчеты о хардверной начинке компьютеров и установленном ПО необходимо установить агента на компьютеры нашей сети. Для этого вновь идем на ftp linvinus'а и качаем пропатченный агент.
На сервере выполняем комманду
tail -F /var/log/httpd/http.ocs.domen.ru-error_log.2010-09-14-00_00_00
и переходим к установке агента. В процессе установки нам будет предложенно указать сервер для сбора данных
image
не забудьте поставить галочку как на скриншоте, для того чтобы после установки агент послал информацию серверу
Если в логе мы видим ругань подобную этой
[Tue Sep 14 19:16:34 2010] [error] [client 192.168.254.2] Can't call method "rollback" on an undefined value at /usr/local/lib/perl5/site_perl/5.8.9/Apache/Ocsinventory/Server/System.pm line 265.\n
то необходимо проверить правильность установок подключения к mysql в файле
/usr/local/www/ocs/ocsreports/dbconfig.inc.php
и в
/usr/local/etc/apache22/Includes/z-ocsinventory-server.conf
Если все в порядке, то в веб интерфейсе OCS появится новая запись, примерно как на скриншоте =)
image

10. Последним штрихом будет развертка агента в сети средствами Active Directory.

В вики OCS есть скрипт который нуждается лишь в небольшом исправлении в соответствии с реалиями вашей сети.
@echo off

REM *********** Declare variables *********************************************
REM *********** Adjust to your situation **************************************
SET Version=4061.1
REM имя или IP сервера где установлен OCSNG
SET Server=ocs.domen.ru
REM путь к папке на расшареном ресурсе, который доступен всем компьютерам домена
SET SetupPath=\\dc\shareUstPril

REM *********** Install if agent isn't found **********************************
IF EXIST "%PROGRAMFILES%\OCS Inventory agent\OCSInventory.exe" GOTO update
:install
%SetupPath%\OcsAgentSetup.exe /S /SERVER:%Server% /NP /DEBUG
GOTO version

:update
REM *********** Update agent if %Version%.txt isn't found *********************
IF EXIST "%PROGRAMFILES%\OCS Inventory agent\%Version%.txt" GOTO end
:upgrade
%SetupPath%\OcsAgentSetup.exe /S /SERVER:%Server% /NP /UPGRADE /DEBUG

:version
cd /D "%PROGRAMFILES%\OCS Inventory agent\"
echo pwouet > %Version%.txt

:end
REM *********** Cleanup variables *********************************************
SET Version=
SET Server=
SET SetupPath=

Сохраняем как install_ocs_agent.bat и настраиваем GPO соответствующим образом.
На этом с OCS закончим. Стоит лишь отметить что данные от агентов приходят с рандомной задержкой, поэтому после окончания настройки пройдет достаточно много времени перед тем как вы получите данные от всех компьютеров.

Установка GLPI.
Версия GLPI: glpi-0.72.4_1
1. Установим GLPI из портов.

make -c /usr/ports/www/glpi install clean
После чего создаем алиас или виртуалхост(кому как нравится) в апаче. У меня это алиас
Alias /glpi "/usr/local/www/glpi"
<Directory "/usr/local/www/glpi">
Options Indexes FollowSymlinks MultiViews
AllowOverride None
Order allow,deny
Allow from 192.168.0.0/16


*Почему-то закрывающая "/Directory" не отобразилась, поэтому если копипастите будьте внимательны =)

2.Создадим пользователя в mysql с необходимыми правами

mysql> grant all privileges on glpi.* to 'glpi'@'localhost' identified by 'password_ololo';

3. Идем на http:// domen.ru/glpi и следуем по шагам мастера установки

image
image
image
image
image
image
image
image
image

3.Немного поправим исходники GLPI

Правим файл
/usr/local/www/glpi/inc/ocsng.class.php
Находим класс
class DBocs extends DBmysql
и меняем строку
$this->dbenc="latin1";
на
$this->dbenc="utf8";

4. Устанавливаем плагин для импорта из OCS

OCS Import

Плагин нужно распаковать в папку
/usr/local/www/glpi/plugins/

После чего перейти в веб интерфейсе GLPI
# Основная панель >
# Установки >
# Дополнения
Жмем «Установить», затем «Включить»

Далее отправляемся в
# Основная панель >
# Установки >
# Общие
# Ограничения
«Активировать режим OCSNG » — Да

теперь
# Основная панель >
# Установки >
# Режим OCSNG
Устанавливаем опции
image

# Основная панель >
# Инструментарий >
# OCSNG
# Импортирование новых компьютеров
Делаем импорт и вуаля =)
image

И в заключение экспорт в pdf на русском


1. Заменяем все вызовы utf8_decode на utf8_decode_cyr
#sed -e 's/utf8_decode/utf8_decode_cyr/g' /usr/local/www/glpi/inc/export.function.php > /usr/local/www/glpi/inc/export.function.php.new
#mv /usr/local/www/glpi/inc/export.function.php.new /usr/local/www/glpi/inc/export.function.php


2. Добавляем в /var/www/glpi/inc/export.function.php функцию
function utf8_decode_cyr($value){
return iconv("UTF-8","Windows-1251",$value);
}


3. Качаем набор шрифтов по cсылке

4. Складываем файлы из архива в /usr/local/www/glpi/lib/ezpdf/fonts/
Теперь pdf экспортируется как надо
image

Фуууухххх… управились!
Все, связка OCS + GLPI установлена и настроена.
Мне лишь осталось поблагодарить за помощь и поддержку камрада Pascal с форума системных администраторов UNIX и перечислить используемые источники информации =)

1. www.tux.in.ua/articles/1500
2. forums.ocsinventory-ng.org/viewtopic.php?id=4104

ps
У GLPI есть еще масса интересных функций, но в рамки данной заметки они ни как не попадают.
Если у кого то будут траблы с установкой — жду в каментах, чем смогу, как говорится.

1 комментарий:

  1. Замечательная связка, но к сожалению, иногда в GLPI появляются дубли. При этом дублей в OCS нет (проверка происходит по MAC адресу устройства). И как бороть, к сожалению пока не придумал.
    Буду рад за совет.
    (GLPI - 0.80.5 OCS - 2.0.3)

    ОтветитьУдалить