среда, апреля 16, 2008

Инвентаризация компьютерной и оргтехники. OCS Inventory.

Итак, продолжаем разговор об инвентаризации компьютерной техники.
OCS Inventory – система инвентаризации компьютеров в сети, установленного на них оборудования и программного обеспечения. Так же позволяет удаленно настраивать программное обеспечение рабочих мест. Работает под всеми операционными системами.

Архитектура системы

Система OCS Inventory NG использует программу агента, которая выполняется на инспектеруемом оборудовании и передает информацию на центральный сервер. Управление программами-агентами выполняется так же с центрального центрального сервера. Централый сервер системы позволяет не только собирать информаци об инвинтаризируемом обоурдовании, но и частично управлять инспектируемыми компьютерами.

Связь между сервером и инспектируемым оборудованием происходит через HTTP/HTTPS протоколы. Вся передаваемая информация сжимается для уменьшения сетевого трафика.

Инсталляция программы-агента может быть произведена несколькими способами:
  • С помощью logon скрипта или правил GPO в Windows сетях.
  • В Linux программу-агента необходимо установить самостоятельно.
Центральный сервер управления содержит 4 главных компонента:
  • Сервер базы данных, для хранения информации о инвинтаризируемом оборудовании.
  • Коммуникационный сервер, осуществяющий связь с сервером базы данных и программами-агентами на инвентаризируемом оборудовании.
  • Сервер развертывания, для создания пекетов установки программ-агентов.
  • Консоль управления, которая позволяет производить просмотр информации об инвентаризируемом оборудовании через Интернет браузер.
Распространяется система по лицензии GPL v2 и является Open Source проектом.
Источник: www.oscc.ru

Скачать систему:
Следующие пакеты отсутствуют в Gutsy, но уже есть в Hardy. Несмотря на это их можно скачать и установить в Ubuntu 7.10.

Предварительно следует установить следующие пакеты:
$ sudo apt-get install libapache-dbi-perl libdbi-perl libdbd-mysql-perl libsoap-lite-perl libxml-simple-perl libnet-ip-perl libcompress-zlib-perl php5-gd
и модуль XML::Entities, которого в репозитории нет
$ sudo cpan -i XML::Entities

$ wget http://archive.ubuntu.com/ubuntu/pool/universe/o/ocsinventory-server/ocsinventory-reports_1.01-3_all.deb
$ wget http://archive.ubuntu.com/ubuntu/pool/universe/o/ocsinventory-server/ocsinventory-server_1.01-3_all.deb
$ sudo dpkg -i ocsinventory-server_1.01-3_all.deb
$ sudo dpkg -i ocsinventory-reports_1.01-3_all.deb
Как видите, в репозитории находится стабильная версия системы годичной давности. Я же буду рассматривать установку и настройку последней на текущий момент версии 1.02 RC1. При этом установка дополнительных пакетов и модуля XML::Entities не отменяется - они нужны.

Скачиваем файл OCSNG_LINUX_SERVER_1.02_RC1.tar.gz и распаковываем его. Проблемы начинаются уже на этапе работы инсталятора. Поэтому, перед тем как запустить setup.sh, открываем его и вносим следующие изменения:

строка 1114
- chown -R root:$APACHE_GROUP $ADM_SERVER_STATIC_DIR/$ADM_SERVER_VAR_IPD_DIR >> $SETUP_LOG 2>&1
+ chown -R root:$APACHE_GROUP $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR >> $SETUP_LOG 2>&1
строка 1123
- chmod -R go-w $ADM_SERVER_STATIC_DIR/$ADM_SERVER_VAR_IPD_DIR >> $SETUP_LOG 2>&1
+ chmod -R go-w $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR >> $SETUP_LOG 2>&1
строка 1132
- chmod g+w $ADM_SERVER_STATIC_DIR/$ADM_SERVER_VAR_IPD_DIR >> $SETUP_LOG 2>&1
+ chmod g+w $ADM_SERVER_VAR_DIR/$ADM_SERVER_VAR_IPD_DIR >> $SETUP_LOG 2>&1

Далее, необходимо для таблиц files и tags принудительно прописать в sql скрипте создания базы (OCSNG_UNIX_SERVER_1.02_RC1/ocsreports/files/ocsbase.sql) кодировку latin1 (строка 143 и 468):
) ENGINE=MYISAM DEFAULT CHARSET=latin1;

Теперь можно запускать setup.sh.
На все вопросы просто жмём клавишу ввода вплоть до окончания установки.

После успешной установки перезапускаем веб-сервер:
$ sudo /etc/init.d/apache2 restart
Теперь запускаем браузер и в адресной строке набираем http://имя_сервера/ocsreports/install.php и вводим данные для создания базы данных:
   MySql login: root
MySql password: пароль root'а для MySQL
MySql HostName: localhost
Создание базы ocsweb с таблицами должно пройти без проблем.
Затем создаём любым удобным способом пользователя ocs и даем ему права на базу ocsweb.

Меняем в файле /usr/share/ocsinventory-server/ocsreports/dbconfig.inc.php пароль для доступа к базе.

В браузере набираем http://имя_сервера/ocsreports и попадаем на страницу авторизации. При необходимости выбираем русский язык (флажки в правом верхнем углу). Пользователь: admin, пароль: admin.

На этом установку можно считать оконченной.

Теперь решаем проблемы с отображением русских символов.

В файле /usr/share/ocsinventory-server/ocsreports/preferences.php в строке 21:
- define("UTF8_DEGREE", 0 );  // 0 For non utf8 database, 1 for utf8
+ define("UTF8_DEGREE", 1 ); // 0 For non utf8 database, 1 for utf8

В файлах /usr/share/ocsinventory-server/ocsreports/group_show.php, header.php и machine.php меняем charset=ISO-8859-1 на charset=windows-1251 (строки 116, 49 и 90 соответственно).

При просмотре через www неправильно отображаются русские названия программ. Открываем для редактирования
/usr/share/ocsinventory-server/ocsreports/machine.php и правим function print_softwares($systemid) начиная со строки 606:

до
echo "$td3".htmlentities(textDecode($item->PUBLISHER))."</td>
$td3".htmlentities(textDecode($item->NAME))." </td>
$td3".textDecode($item->VERSION)." </td>
$td3".(htmlentities(textDecode($item->COMMENTS))?htmlentities(textDecode($item->COMMENTS)):"N/A")." </td>";
после
echo "$td3".textDecode($item->PUBLISHER)."</td>
$td3".textDecode($item->NAME)." </td>
$td3".textDecode($item->VERSION)." </td>
$td3".(htmlentities(textDecode($item->COMMENTS))?textDecode($item->COMMENTS):"N/A")." </td>";

Для отображения на главной странице имен пользователей на русском языке в файле preferences.php следует внести изменения в строку 763:
- echo $item[$chmp]."</span></a></font></td>\n";
+ echo textDecode($item[$chmp])."</span></a></font></td>\n";

С серверной частью вроде бы всё. Переходим к клиентской.

Установка агента в Ubuntu:
$ sudo apt-get install ocsinventory-agent
Запуск:
$ sudo ocsinv
В системе (в агенте сбора информации для Windows) имеется проблема с кодировкой (малые русские буквы, начиная с 'х'(0xF4 или 244). Т. е. буквы 'хцчшщъыьэюя' преобразовываются в символ английского языка 'x' (0x78 или 120). Проблема решается заменой файлов после установки агента файлами из архива http://ocsinventory.narod.ru/agentWinOcs.rar (спасибо Ивану Перевалову за сборку!).


Для тех, кого вышеприведенные операции c кодом приводят в ужас или навевают тоску (что вероятнее :-), выкладываю тарбол со всеми описанными исправлениями. Вам остаётся только распаковать его и установить – OCSNG_UNIX_SERVER_1.02_RC1_RU.tar.gz.


При подготовке материала использовались некоторые решения с форума http://www.opennet.ru/openforum/vsluhforumID3/14092.html. Большое спасибо их авторам!

В следующий раз рассмотрим процесс интеграции GLPI и OCS Inventory.

18 комментариев:

Анонимный комментирует...

Огромное спасибо. Очень познавательная статья. Да еще и с всевозможными исправлениями.
Скажите, а есть ли какой-нибудь легкий способ применить "патч" Ивана Перевалова, без того, чтобы останавливать службы на каждой машине, а потом снова запускать(иначе блокировка файлов стоит и их не заменить)?

Анонимный комментирует...

Что даст интеграция GLPI и OCS Inventory?

Кстати, очень жаль, что в собираемой OCS статистике нет информации о материнской плате, только об остальных устройствах.

Eugene комментирует...

Скажите, а есть ли какой-нибудь легкий способ применить "патч" Ивана Перевалова...
Хорошо было бы перепаковать инсталятор, но я не знаю как. Можно, например, сделать bat-файл следующего содержания:
net stop "OCS INVENTORY SERVICE" && ^
copy /Y OCSInventory.exe "C:\Program Files\OCS Inventory Agent" & ^
copy /Y OcsWmi.dll "C:\Program Files\OCS Inventory Agent" & ^
copy /Y SysInfo.dll "C:\Program Files\OCS Inventory Agent" & ^
net start "OCS INVENTORY SERVICE"


Что даст интеграция GLPI и OCS Inventory?
инвентарные карточки + ведение учета расходных материалов и организации службы технической поддержки по расписанию и по заявкам пользователей + различные выборки и отчеты

Анонимный комментирует...

В окне All Software русские буквы отображаются так:

Àðõèâà òîð WinRAR

Как это можно исправить???

Еще вопрос. Можно ли увидеть в OCS Inventory историю изменения конфигурации компьютера???

Анонимный комментирует...

Помотес проблемой, подскажите хотя бы что компать. GLPI импортирует компьютеры из OCS, но одни названия, более никаких данных. Ни какое железо, ни что за софт установлен. В чем может быть проблема?

OCS Inventory 1.02 rc2
GLPI 0.70.2

Eugene комментирует...

До связки GLPI + OCS пока еще руки не дошли, так что сказать на данный момент ничего не могу.

Анонимный комментирует...

С той проблемой разобрался, очень важно выключить опцию использования словаря в GLPI, если он не используеться в Ocs. Но вот всетаки хотелось бы этот словарь задействовать. Не могу понять как создать категорию. А отмеченые галочками програмы не перемещаються даже в существующие по умолчанию. Может что-то гдето надо включить?

Спасибо!

Анонимный комментирует...

Интересно, хоть кто-то делал связку GLPI + OCS? Интерисует главным образом вопрос интеграции этих двух систем. Что бы автоматом данные собранные OCS можно было просматривать в GLPI без дополнительных манимуляций.

elnone комментирует...

Решил проблему с русским в All Software...
добавил в файл /usr/share/ocsinventory-reports/ocsreports/require/function_table_html.php
на строке 153
textDecode($v)

Анонимный комментирует...

Кто-нибудь пробовал патчи из http://forums.ocsinventory-ng.org/viewtopic.php?id=4104

Unknown комментирует...

Патчи попробовал... Работает по крайней мере с Win 2000 & 2003 Server + Xp

Анонимный комментирует...

связка utf8 mysql + ocsinventory работает?
немогу никак добиться отображения русских букв именно в базе например через phpmyadmin.
еще скачал агента под виндовс с родного сайта и при установке антивирус drweb (лицензия с последними обновлениями) выругался на трояна на файле setacl.exe.
что то очень подозрительно удобно получается на каждый клиент по троянчику :)
первый вопрос остается открытым.

agronom комментирует...

Очень полезная статья. Использовал некоторые доработки описанные здесь.
Скопипастил кусочек вашей статьи к себе.
Надеюсь Вы не против?

Анонимный комментирует...

Большое спасибо за статью. Настроил по ней сервер на FreeBSD 6.4. Но есть одна загвоздка - при попытке подключить клиент появляется следующая ошибка:
ocsinventory-agent -debug
[debug] Ocsinventory unified agent for UNIX and Linux1.0.1
[debug] Log system initialised (Stderr)
[debug] Accountinfo file: /var/lib/ocsinventory-agent/http:__193.232.#.#_ocsreports_/ocsinv.adm
[debug] A TAG seems to already exist in the server for thismachine. If so, the -t paramter is useless. Please change the TAGdirectly on the server.
[debug] OCS Agent initialised
[debug] Calling handlers : `start_handler'
[debug] Compress::Zlib is avalaible.
[debug] sending XML
[debug] Calling handlers : `prolog_writers'
[error] Deflating problem

Не знаете, как с ней бороться?

Анонимный комментирует...

> как с этим бороться?

Поставить все необходимые модули Perl, в первую очередь XML::SAX и XML::Simple

Анонимный комментирует...

1. Как оптимизировать компоненты, к примеру чтобы был один компонент и подключался к разным компьютерам. Допустим у меня 20 компов c одинаковыми характеристиками и разными ID. Не буду же я каждый раз заводить новую ОЗУ в компонентах.
2. При синхронизации агента сбиваются все данные введенные ранее а именно периферия: Соединения-Устройства: мышь, клава, монитор, Компоненты: ОЗУ, конечно если убрать "Авто обновление OCSNG:" ничего сбрасываться не будет, но это не будет решением проблемы

Спасибо

Анонимный комментирует...

Спасибо за статью!

Spanish комментирует...

Замучался уже, подскажите что делать?
(все из выше перечисленного попробовал: выставить права на директории на сервере)
веб морда работает. Но не добавляются машины
вот агент на виндовой машине в лог пишет
HTTP SERVER: Sending prolog query...ERROR: HTTP status code 403
HTTP SERVER: Closing HTTP connection