вторник, 23 апреля 2013 г.

Инвентаризация оборудования в офисе OCS Inventory NG (Часть 2)


Продолжу свой небольшой цикл статей.

В этой статье я напишу то, как я поборол проблемы с кодировками данных передаваемых с Windows Agent'ов.

1. Часть 1 (сервер)
2. Часть 2 (кириллица)
3. Часть 3 (агенты)
4. Часть 4 (GLPI)


Честно скажу, тут я плохо разобрался, что именно помогло, но напишу все, что бы в следующий раз знать куда копать.

Проблема была в том, что сервер не отображал корректно кириллицу.


1. Первая попытка решения проблемы

Для начала я проверил на Windows машине, что Агент создает корректную xml'ку, для этого после установки OCS Inventory Windows Agent и брожения по документации к нему.

Из Windows консоли я выполнил:
C:\Program Filex (x86)\OCS Inventory Agent\OCSInventory.exe /local=C:\

Параметр /local задает агенту не стучать на удаленный сервер, а сохранить все данные в локальную директорию, куда я указал. После чего я увидел файл с расширением .ocs, это означало, что xml файл еще сжат с помощью ocs press.

После небольшого поиска я нашел еще один параметр /xml. И тогда я выполнил такое:
C:\Program Filex (x86)\OCS Inventory Agent\OCSInventory.exe /local=C:\ /xml=C:\

И на диске C:\ у меня появился файлик с таким именем: WIMBO-PC-2013-04-23-10-57-15.xml, после беглого просмотра, я увидел, что кириллица в нем отображается нормально.
Но на сервере, в БД информация уже хранилась в кракозябрах.

2. Вторая попытка решения проблемы (наверное не правильная)


В ходе гугления я нашел этот топик на форуме: http://sysadmins.ru/topic328756.html
И решил сделать то, что написал автор.
Но в из файлов не было переменной $value_of_field, но после ознакомления с функцией htmlentities (Преобразует символы в соответствующие html-сущности)  я решил все равно выполнить предложенные действия:
# sudo nano /usr/share/ocsinventory-reports/backend/require/lib/phpcas/CAS.php
# sudo nano /usr/share/ocsinventory-reports/backend/require/lib/phpcas/client.php
# sudo nano /usr/share/ocsinventory-reports/plugins/main_sections/ms_all_soft/ms_all_soft.php
# sudo nano /usr/share/ocsinventory-reports/require/function_machine.php
# sudo nano /usr/share/ocsinventory-reports/require/function_table_html.php

Ищем и вызовы функции вида .htmlentities($var) заменяем на .htmlentities($var,ENT_COMPAT,'utf-8').

3. Третья попытка, скорее всего самая правильная.

С самого начала у меня были проблемы с Windows Agent'ами, сначала, когда я скачал самую последнюю версию агента и пытался отправить информацию на свой сервер (параметр /SERVER) http://192.168.1.1/ никакие данные не отправлялись.
Понял я это из чудесного параметра /DEBUG:
C:\Program Filex (x86)\OCS Inventory Agent\OCSInventory.exe /DEBUG /SERVER=http://192.168.1.1/


Лог находится тут: C:\ProgramData\OCS Inventory NG\Agent\OCSInventory.txt

"Плохой" лог выглядит примерно так:

========================================================================
Starting OCS Inventory NG Agent on Tuesday, April 23, 2013 12:41:14.
AGENT => Running OCS Inventory NG Agent Version 2.0.0.16
AGENT => Using OCS Inventory NG FrameWork Version 2.0.0.16
AGENT => Loading plug-in(s)
PLUGIN => Searching for Plug-in DLL(s) in folder <C:\Program Files (x86)\OCS Inventory Agent\plugins>
PLUGIN => 0 Plug-in(s) succesfully loaded
AGENT => Using network connection with Communication Server
COM PROVIDER => Loading Communication Provider <C:\Program Files (x86)\OCS Inventory Agent\ComHTTP.dll>
AGENT => Using Communication Provider <OCS Inventory NG cURL Communication Provider> Version <2.0.0.16>
AGENT => Sending getLabel request
COM SERVER => Initializing cURL library for getFile
COM SERVER => Using cURL with server authentication
COM SERVER => Disabling cURL proxy support
COM SERVER => Disabling cURL SSL server validation support
COM SERVER => Sending fileGet request to URL </deploy/label>
WARNING *** COM SERVER => Failed to send HTTP Get request <URL using bad/illegal format or missing URL>
COM SERVER => Cleaning cURL library
AGENT => Failed to retrieve Label <URL using bad/illegal format or missing URL>
AGENT => Sending Prolog
DID_CHECK => Read DeviceID <WIMBO-PC-2013-04-23-10-57-15> and MACs <68:94:23:3B:33:AFB4:B5:2F:7A:54:A908:00:27:00:80:2300:50:56:C0:00:0100:50:56:C0:00:08> in file <ocsinventory.dat>
COM SERVER => Initializing cURL library for sendRequest
COM SERVER => Using cURL with server authentication
COM SERVER => Disabling cURL proxy support
COM SERVER => Disabling cURL SSL server validation support
COM SERVER => Sending HTTP Post request to URL <>
WARNING *** COM SERVER => Failed to send HTTP Post request <URL using bad/illegal format or missing URL>
COM SERVER => Cleaning cURL library
ERROR *** AGENT => Failed to send Prolog <URL using bad/illegal format or missing URL>
AGENT => Unloading communication provider
AGENT => Unloading plug-in(s)
AGENT => Execution duration: 00:00:01.

"Хороший" лог примерно так:

Starting OCS Inventory NG Agent on Tuesday, April 23, 2013 12:39:28.
AGENT => Running OCS Inventory NG Agent Version 2.0.0.16
AGENT => Using OCS Inventory NG FrameWork Version 2.0.0.16
AGENT => Loading plug-in(s)
PLUGIN => Searching for Plug-in DLL(s) in folder <C:\Program Files (x86)\OCS Inventory Agent\plugins>
PLUGIN => 0 Plug-in(s) succesfully loaded
AGENT => Local mode actived by /LOCAL argument: No network connection
DID_CHECK => Read DeviceID <WIMBO-PC-2013-04-23-10-57-15> and MACs <68:94:23:3B:33:AFB4:B5:2F:7A:54:A908:00:27:00:80:2300:50:56:C0:00:0100:50:56:C0:00:08> in file <ocsinventory.dat>
AGENT => Sending Prolog
LOCAL => Writing compressed XML file <C:\\WIMBO-PC-2013-04-23-10-57-15.ocs> required by argument /LOCAL
AGENT => Prolog successfully sent
AGENT => Prolog Frequency set to 10 hour(s)
AGENT => Inventory required
AGENT => Launching hardware and software checks
INVENTORY => Loading Download history
INVENTORY => Logged on user ID is <Wimbo>
INVENTORY => Operating System is <Microsoft Windows 7 INVENTORY => Operating System uses 64 bits memory address width
INVENTORY => Computer domain or workgroup is <WORKGROUP>
WARNING *** INVENTORY => Failed to retrieve user domain
INVENTORY => System Manufacturer <Hewlett-Packard>, System Model <HP ProBook 4540s>, System S/N <2CE24016SD>, Bios Manufacturer <Hewlett-Packard>, Bios Date <08/31/2012>, Bios Version <68IRR Ver. F.31>
INVENTORY => 1 processor(s) Intel(R) Core(TM) i3-3110M CPU @ 2.40GHz [2 core(s) x64] at 2400 MHz
INVENTORY => OS Memory 8073 MB, OS Swap size 12167 MB
INVENTORY => 2 memory slot(s) found
INVENTORY => 3 input device(s) found
INVENTORY => 6 system port(s) found
INVENTORY => 1 system slot(s) found
INVENTORY => 7 system controler(s) found
INVENTORY => 3 storage peripheral(s) found
INVENTORY => 2 sound device(s) found
WARNING *** INVENTORY => Failed to retrieve modems
INVENTORY => 5 network adapter(s) found
INVENTORY => 4 system printer(s) found
INVENTORY => 1 video adapter(s) found
INVENTORY => 1 system monitor(s) found
INVENTORY => Default IPv4 address is <192.168.1.175>
INVENTORY => Registered company <>, registered owner <Wimbo>, Product ID <00426-OE...>
INVENTORY => Product key <342DG-6Y...>
INVENTORY => 124 software found
INVENTORY => Computer/VM UUID is <E68DD704-0ECF-11E2-8D2D-80C459008007>
INVENTORY => Computer seems to be physical host
INVENTORY => Bogus summed Memory Slots, 8192 is too far from 8073 (keeping the last one)
INVENTORY => Reading last inventory state
EXECUTABLE PLUGIN => Searching for VBS script(s) in folder <C:\Program Files (x86)\OCS Inventory Agent\plugins>
EXECUTABLE PLUGIN => Searching for executable(s) in folder <C:\Program Files (x86)\OCS Inventory Agent\plugins>
AGENT => Sending Inventory
INVENTORY => Checking last inventory state
INVENTORY => Logical drives inventory state changed
INVENTORY => Inventory changed since last run
INVENTORY => Generating XML document with Device properties
INVENTORY => XML Update 2 Logical Drive(s)
INVENTORY => XML Update common Device properties
INVENTORY => XML Update BIOS
INVENTORY => XML Update 3 Input Device(s)
INVENTORY => XML Update 6 System Port(s)
INVENTORY => XML Update 7 System Controler(s)
INVENTORY => XML Update 1 System Slot(s)
INVENTORY => XML Update 2 Sound Device(s)
INVENTORY => XML Update 3 Storage Peripheral(s)
INVENTORY => XML Update 6 Logical Drive(s)
INVENTORY => XML Update 0 Modem(s)
INVENTORY => XML Update 5 Network Adapter(s)
INVENTORY => XML Update 1 Video Adapter(s)
INVENTORY => XML Update 1 Monitor(s)
INVENTORY => XML Update 4 Printer(s)
INVENTORY => XML Update 125 Software
INVENTORY => XML Update 0 Registry Value(s)
INVENTORY => XML Update Administrative Information(s)
LOCAL => Writing compressed XML file <C:\\WIMBO-PC-2013-04-23-10-57-15.ocs> required by argument /LOCAL
AGENT => Inventory successfully sent
INVENTORY => Writing new inventory state
AGENT => Writing standard XML file <C:\\WIMBO-PC-2013-04-23-10-57-15.xml> required by argument /XML
AGENT => Unloading communication provider
AGENT => Unloading plug-in(s)
AGENT => Execution duration: 00:00:04.

После скачки какого-то из старых агентов, версии 4.0.6.1 данные начали пересылаться, но тогда появилась проблема с кодировками.
И наконец было найдено решение, это пропатченый Агент с utf-8, скачать можно тут: ftp://linvinus.ru/ocs/ .

И теперь вся информация корректно отображается, вот пример:



2 комментария:

  1. Привет можешь залить пропатченный агент на ФО а то прежняя ссылка перестала работать...

    ОтветитьУдалить
    Ответы
    1. Ссылка была на сторонний ресурс. Я точно не уверен, но возможно это тот же файл: https://mega.co.nz/#!0FtySS4C!XQNRF24uiahRMakdcRVkU3VPbM9zL1UZPEnnUju9WwA

      Удалить