Содержание

GLPI

GLPI является системой работы с заявками и инцидентами, а также для инвентаризации компьютерного оборудования (компьютеры, программное обеспечение, принтеры и прочее), также имеет расширенные функции, такие как работа системы отслеживания почты с уведомлением и т. д. https://ru.wikipedia.org/wiki/GLPI

Установка

Показано на примере Ubuntu server 16.03 LTS + LAMP + SSH server.

sudo -i
# Статический IP
nano /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.2.32
netmask 255.255.252.0
gateway 192.168.0.254
dns-nameservers 192.168.2.5 192.168.2.2 192.168.2.10
# Необходимые компоненты
apt-get install php-ldap php-imap php-apcu php-xml php-xmlrpc php-mbstring php-curl php-gd php-cli
# Скачать
wget https://github.com/glpi-project/glpi/releases/download/9.2.1/glpi-9.2.1.tgz
# Распаковать дистрибутив
tar xzf glpi-9.2.1.tgz --strip=1 -C /var/www/html
# Дать права веб-серверу
chown -R www-data:www-data /var/www/html
# Прописать в Апаче AllowOverride All в секции /var/www
nano /etc/apache2/apache2.conf
AllowOverride All
# Перезапуск Апача
systemctl restart apache2
# Можно ещё сделать базу заранее:
mysql -u root -p -e "create database glpi";
# После этого зайти на веб-интерфейс и пройти мастер настройки
# Стандартный логин и пароль - glpi
# После успешной установки стереть install/install.php
rm /var/www/html/install/install.php

Особенности обновления

Бывают проблемы, если обновлять старый дистрибутив сразу на самую новую версию. Лучше всего обновлять последовательно. Например версию 0.90.2 получилось обновить так: glpi-0.90.5.tar.gz → glpi-9.1.tar.gz → glpi-9.1.1.tgz → glpi-9.1.2.tgz → glpi-9.1.3.tgz → glpi-9.1.4.tgz → glpi-9.1.5.tgz → glpi-9.1.6.tgz → glpi-9.1.7.1.tgz → glpi-9.2.1.tgz (ругнётся, что 9.1.7.1 несовместимая версия, но всё равно обновится).

С плагином редактора форм та же песня - обновление было с версии 0.90-1.3:

wget https://github.com/pluginsGLPI/formcreator/releases/download/2.4.0/glpi-formcreator-2.4.0.tar.bz2
tar xjf glpi-formcreator-2.4.0.tar.bz2 -C /var/www/html/plugins
# после этого обновить плагин в веб-интерфейсе
wget https://github.com/pluginsGLPI/formcreator/releases/download/2.5.0/glpi-formcreator-2.5.0.tar.bz2
tar xjf glpi-formcreator-2.5.0.tar.bz2 -C /var/www/html/plugins
# после этого обновить плагин в веб-интерфейсе
wget https://github.com/pluginsGLPI/formcreator/releases/download/2.6.0/glpi-formcreator-2.6.0.tar.bz2
tar xjf glpi-formcreator-2.6.0.tar.bz2 -C /var/www/html/plugins
# после этого обновить плагин в веб-интерфейсе

Инвентаризация

Fusion Inventory

wget https://github.com/fusioninventory/fusioninventory-for-glpi/releases/download/glpi9.2%2B1.0/glpi-fusioninventory-9.2.1.0.tar.bz2
tar xjf glpi-fusioninventory-9.2.1.0.tar.bz2 -C /var/www/html/plugins

Настройки - Дополнения, установить плагин в систему

Администрирование → Организации → Root Entity → вкладка FusionInventory, ввести URL:
http://glpi

Агенты

Скачать
Инструкция по установке (Windows)
Инструкция по установке (Debian & Ubuntu)

Примерный набор ключей для тихой установки на Windows:

fusioninventory-agent_windows-x64_2.3.21.exe /acceptlicense /add-firewall-exception /execmode=service /no-httpd /no-ssl-check /server='http://glpi/plugins/fusioninventory' /S /runnow

Настройка Cron

Настройки → Автоматические задания → выделить нужные (или все) → изменить способ выполнения на CLI

Run the GLPI crontab:

crontab -u www-data -e
# Добавить
* * * * * /usr/bin/php /var/www/html/front/cron.php &>/dev/null
 
# или
echo '* * * * * www-data /usr/bin/php /var/www/html/front/cron.php &>/dev/null' >> /etc/crontab

Инвентаризация SNMP

Установить агента на сервер GLPI (или на ту машину, которая будет опрашивать устройства по SNMP)

# Зависимости для fusioninventory-agent
apt-get -y install dmidecode hwdata ucf hdparm perl libuniversal-require-perl libwww-perl libparse-edid-perl libproc-daemon-perl  libproc-pid-file-perl libfile-which-perl libxml-treepp-perl libyaml-perl libnet-cups-perl libnet-ip-perl libdigest-sha-perl libsocket-getaddrinfo-perl libtext-template-perl
# Зависимости для fusioninventory-agent-task-network
apt-get -y install nmap libnet-snmp-perl libcrypt-des-perl libnet-nbname-perl
# Скачать
wget http://debian.fusioninventory.org/downloads/fusioninventory-agent_2.3.21-2_all.deb
wget http://debian.fusioninventory.org/downloads/fusioninventory-agent-task-network_2.3.21-2_all.deb
# Установить
dpkg -i fusioninventory-agent_2.3.21-2_all.deb
dpkg -i fusioninventory-agent-task-network_2.3.21-2_all.deb
# Настроить путь к серверу (к плагину FusionInventory):
nano /etc/fusioninventory/agent.cfg
# Запустить агента:
systemctl restart fusioninventory-agent
# или перечитать конфигурацию:
systemctl reload fusioninventory-agent

Создать диапазон IP: Сеть → Диапазоны IP адресов, затем там же - Add a SNMP authentication, добавить обе версии SNMP, v1 и v2c.

Зайти в свойства агента, который будет собирать информацию по SNMP, включить у него модули «сетевое обнаружение» и «сетевая инвентаризация SNMP». Можно также включить эту функцию у всех агентов.

Сделать задачу сетевого обнаружения (Задачи → Управление задачами). Пометить активной, старт в текущее время, Интервал пробуждения агента - 5 мин. Добавить задание: модуль метода - сетевое обнаружение, в цели добавить диапазоны, созданные ранее, в исполнители - агента, который будет работать с SNMP.

Сделать задачу сетевой инвентаризации (Задачи → Управление задачами). Всё то же самое, что и в задаче обнаружения, только модуль метода - сетевая инвентаризация (SNMP).

Если какие-то принтеры не импортируются, то может быть полезным выключить правило импорта Printer constraint (name), так как некоторые принтеры (например, Kyocera, Sharp, Konica Minolta) имеют пустое имя.

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

OCS inventory

Здесь описана старая версия, и вообще рекомендуется использовать FusionInventory

# Зависимости
sudo apt-get install php-imap php-ldap make libapache-dbi-perl libxml-simple-perl libnet-ip-perl libsoap-lite-perl php-soap libphp-pclzip php-gd
# Модули Perl
cpan -i XML::Entities
cpan -i Compress::Zlib 
# Скачать
wget https://launchpad.net/ocsinventory-server/stable-2.1/2.1.1/+download/OCSNG_UNIX_SERVER-2.1.1.tar.gz
# Распаковать и установить
tar -zxvf OCSNG_UNIX_SERVER-2.1.1.tar.gz
cd OCSNG_UNIX_SERVER-2.1.1
./setup.sh
 
# Where is Apache main configuration file [] ?
/etc/apache2/apache2.conf
 
# Where is Apache Include configuration directory [] ?
/etc/apache2/sites-available
 
nano /etc/apache2/sites-available/000-default.conf
#add the line just above the closing "" directive.
Alias /ocsreports /usr/share/ocsinventory-reports
 
service apache2 restart

Удаление агента с клиентских машин

IF EXIST "%programfiles(x86)%\OCS Inventory Agent\uninst.exe" (
"%programfiles(x86)%\OCS Inventory Agent\uninst.exe" /s
)
IF EXIST "%programfiles%\OCS Inventory Agent\uninst.exe" (
"%programfiles%\OCS Inventory Agent\uninst.exe" /s
)

Решение проблем

Table 'glpi.glpi_logs' doesn't exist

При обновлении версии GLPI идёт ругань примерно такого вида:

9.3 migrate Ticket solution history - Ошибка во время запроса базы данных: REPLACE INTO `glpi_itilsolutions` (itemtype, items_id, date_creation, users_id, user_name, solutiontypes_id, content, status, date_approval) SELECT 'Ticket' AS itemtype, ticket.`id` AS items_id, ticket.`solvedate` AS date_creation, IF(log.user_name REGEXP '[(][0-9]+[)]$', SUBSTRING_INDEX(SUBSTRING_INDEX(log.`user_name`, '(', -1), ')', 1), 0) AS users_id, IF(log.user_name REGEXP '[(][0-9]+[)]$', NULL, log.`user_name`) AS user_name, ticket.`solutiontypes_id` AS solutiontypes_id, ticket.`solution` AS content, (CASE WHEN ticket.status = 6 THEN 3 – if CLOSED, ACCEPTED WHEN ticket.status = 5 THEN 2 – if SOLVED, WAITING WHEN ticket.status ⇐ 4 THEN 4 – if INCOMING|ASSIGNED|PLANNED, REFUSED ELSE 1 – else NONE END) AS status, ticket.`closedate` AS date_approval FROM glpi_tickets AS ticket LEFT JOIN `glpi_logs` AS log ON log.`itemtype` = 'Ticket' AND log.`items_id` = ticket.`id` AND log.`id_search_option` = 24 WHERE LENGTH(ticket.`solution`) > 0 GROUP BY ticket.`id` ORDER BY ticket.`id` ASC, log.id DESC - Ошибка - Table 'glpi.glpi_logs' doesn't exist

Решение: создать таблицу glpi_logs заново, и затем снова запустить обновление:

# DROP TABLE IF EXISTS `glpi_logs`;
CREATE TABLE `glpi_logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `itemtype` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `items_id` int(11) NOT NULL DEFAULT '0',
  `itemtype_link` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `linked_action` int(11) NOT NULL DEFAULT '0' COMMENT 'see define.php HISTORY_* constant',
  `user_name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `date_mod` datetime DEFAULT NULL,
  `id_search_option` int(11) NOT NULL DEFAULT '0' COMMENT 'see search.constant.php for value',
  `old_value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `new_value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `date_mod` (`date_mod`),
  KEY `itemtype_link` (`itemtype_link`),
  KEY `item` (`itemtype`,`items_id`),
  KEY `id_search_option` (`id_search_option`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

https://github.com/glpi-project/glpi/blob/9.3/bugfixes/install/mysql/glpi-empty.sql#L4255

N tables not migrated to InnoDB engine

После входа в GLPI показывается сообщение типа

355 tables not migrated to InnoDB engine.

Решение: выполнить скрипт

php /var/www/html/scripts/innodb_migration.php

Полезные команды

# Ремонт базы:
mysqlcheck -u root -p1111111 -r --databases glpi
# Проверка базы:
mysqlcheck -u root -p1111111 -c --databases glpi
# Бэкап базы:
mysqldump -u root -p glpi > /usr/share/glpi/_files/dumps/$ (date +%Y-%m-%d).glpi.backup.sql
# Восстановление базы:
mysql -u root -p glpi < /usr/share/glpi/files/_dumps/glpi-backup.sql