GLPI资产管理系统Docker部署
本文最后更新于14 天前,其中的信息可能已经过时,如有错误请发送邮件到1979007616@qq.com

前言

先后部署了chemex、cat资产管理系统,发现管理起来还是很麻烦,并不比excel轻松,主要的问题是需要人手动去整理资产信息并录入,这个excel管理并无区别;偶然发现GLPI可以通过Agent自动收集资产信息,所以就尝试安装一下。

参照官网,确认GLPI系统的先决条件。

考虑到GitHub需要科学上网,所以把部分安装包保存到:Alist网盘,有需要可以自取。

环境准备

体验地址:GLPI全版本在线体验 (glpi-cn.com)

环境:Ubuntu22.04+Docker+Docker-compose

Ubuntu22.04安装

参考:Ubuntu22.04安装教程 – 谢幕后 (xmhweb.cn)

Docker安装

ubuntu 系统安装(参考清华镜像站阿里镜像站

1. 更新系统:使用以下命令更新 Ubuntu 系统的软件包列表和已安装软件的版本:

sudo apt update
sudo apt upgrade

2. 安装依赖库:执行以下命令安装 Docker 所需的依赖库:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

3. 添加 Docker 官方 GPG 密钥:通过以下命令添加 Docker 官方 GPG 密钥以验证下载软件包的完整性:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4. 添加 Docker 软件源:执行以下命令添加 Docker 软件源到系统的软件源列表中:

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. 更新软件包列表:运行以下命令更新软件包列表,使系统能够识别 Docker 软件源中的软件包:

sudo apt update

6. 安装 Docker Engine:使用以下命令安装 Docker Engine:

sudo apt install docker-ce docker-ce-cli containerd.io

7. 验证安装:执行以下命令验证 Docker 是否已成功安装并正在运行:docker version

Docker-compose安装

参考:如何在 Ubuntu 22.04 LTS 中安装 Docker 和 Docker Compose | Linux 中国 – 知乎 (zhihu.com)

sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

如果有更新版本,只需要将上述命令中的v2.6.1替换为最新的版本号即可。请不要忘记数字前的 “v” 。

最后,使用下列命令赋予二进制文件可执行权限:

sudo chmod +x /usr/local/bin/docker-compose

验证:docker-compose version

GLPI安装

部署GLPI系统

考虑到fusioninventory-for-glpi插件最新版本为10.0.6+1.1,插件仅适用GLPI 10.0.6,所以本文选择安装10.0.6版本。

通过参考大佬们的文章,使用docker-compose可以批量创建容器。

不熟悉docker-compose的小伙伴可以先看看这篇文章:《Docker入门基础

若要使用 docker compose 进行部署,需要使用 docker-compose.yml 和 mysql.env 文件。

新建一个文件夹glpi:mkdir glpi

新建配置文件:touch docker-compose.yml mysql.env

部署特定版本并使用持久性数据,特别要注意配置文件中的缩进,不然会报错。

这两行本来也是要加在glpi的映射文件中的,不知道为什么会报错,所以删掉了。

- /etc/timezone:/etc/timezone:ro
- ./apache/php.ini:/etc/php/8.1/apache2/php.ini

要部署,只需在与文件相同的目录上运行以下命令

docker-compose up -d

#或者使用
docker-compose -f /glpi/docker-compose.yml up -d

至此就可以使用docker ps看到创建的三个容器了。

GLPI的初始安装

进入浏览器输入:10.10.166.213:9000,打开glpi,由于已经使用docker镜像部署好了运行环境,所以直接点下一步进行安装就行。

数据库连接设定记得要带上你映射的端口号。

插件合集

前提

第一次打开插件选项会提示没有激活,如下图:

根据提示进入网站注册账号获取注册码:GLPI Network (glpi-network.com)

将注册码复制到glpi并保存。

Fusioninventory

官网:FusionInventory Project · GitHub

fusioninventory-for-glpi

进入容器并安装一些基础功能,后面要用到

#进入容器内
docker exec -it glpi bash

#更新软件库
apt-get update
#安装vim编辑器
apt-get install -y vim
#安装上传、下载
apt-get -y install lrzsz
#安装解压工具
apt-get install bzip2

进入GLPI存放插件的目录:cd /var/www/html/glpi/plugins

下载插件:

#版本号可自行修改,尽量保持和glpi版本一致
wget https://github.com/fusioninventory/fusioninventory-for-glpi/releases/download/glpi10.0.6%2B1.1/fusioninventory-10.0.6+1.1.tar.bz2
#解压
tar -jxvf fusioninventory-10.0.6+1.1.tar.bz2

也可以在官网下载插件压缩包并上传到插件文件夹中。

登录GLPI网站进行安装启用。

如果你使用的版本存在兼容性的问题,可以修改插件文件setep.php中的最大版本。

参考链接:https://github.com/fusioninventory/fusioninventory-for-glpi/issues/3453

vim /var/www/html/glpi/plugins/fusioninventory/setup.php
#修改52行的版本号
define('PLUGIN_FUSIONINVENTORY_GLPI_MAX_VERSION', '10.0.7');

fusioninventory-for-agent

官网:GitHub – fusioninventory/fusioninventory-agent: FusionInventory Agent

个人存档2.6版本:fusioninventory-agent_windows-x64_2.6.exe | AList (xmhweb.cn)

作用:客户端信息收集代理,进入官网下载对应的版本即可。

这里重点介绍如何进行快速批量在用户电脑上安装Agent代理,每台电脑都去安装肯定不符合我懒惰的性格,让电脑使用者自己安装又担心安装失败。借鉴前辈们的经验并进行优化,通过批处理的方式一键安装。

当然如果是域控环境,通过GPO一键部署是最好的,但是电脑没有加域就行不通了。

安装完成客户端会自动打开:http://127.0.0.1:62354/now,进行强制资产盘点,在GLPI系统就能看到该资产信息了。

如果上面的步骤运行没有问题,还是看不到资产信息,那可能是没有开启资产发现,如下图:

Linux系统安装Agent

Agent地址:GitHub – fusioninventory/fusioninventory-agent: FusionInventory Agent

官方文档:Linux: Debian & Ubuntu – FusionInventory documentation

方法一(建议):

安装依赖项

apt-get -y install wget dmidecode make hwdata
apt-get -y install perl perl-modules libmodule-build-perl libmodule-install-perl
apt-get -y install libfile-which-perl libfile-copy-recursive-perl libuniversal-require-perl
apt-get -y install libtest-http-server-simple-perl libhttp-server-simple-authen-perl libhttp-proxy-perl
apt-get -y install libio-capture-perl libipc-run-perl libnet-snmp-perl
apt-get -y install libtest-compile-perl libtest-deep-perl libtest-exception-perl
apt-get -y install libtest-mockmodule-perl libtest-mockobject-perl libtest-nowarnings-perl
apt-get -y install libxml-treepp-perl libproc-daemon-perl
apt-get -y install libparallel-forkmanager-perl libnet-ip-perl libparse-edid-perl
apt-get -y install libdigest-sha-perl libtext-template-perl libsocket-getaddrinfo-perl

下载并解压(需要能访问github,如果不能请访问:FusionInventory-Agent-2.6.tar.gz | AList (xmhweb.cn)

wget https://github.com/fusioninventory/fusioninventory-agent/releases/download/2.6/FusionInventory-Agent-2.6.tar.gz
tar xvzf FusionInventory-Agent-2.6.tar.gz
cd FusionInventory-Agent-2.6

构建和安装

perl Makefile.PL
make
make install

安装完成可在输出区看到三个文件路径,分别作用如下:

  • 配置目录 (/usr/local/etc/fusioninventory): 该目录包含 FusionInventory 的配置文件。你可以在这里找到和编辑 FusionInventory 的配置,以便定制和调整它的行为。
  • 常量数据安装目录 (/usr/local/share/fusioninventory): 这个目录包含了 FusionInventory 的常量数据,比如一些预置的信息或者资源文件。
  • 可变数据安装目录 (/usr/local/var/fusioninventory): 该目录包含 FusionInventory 的变量数据,比如日志文件、临时文件等。在运行时,FusionInventory 可能会在这个目录下创建和修改一些数据文件。

配置:vim /usr/local/etc/fusioninventory/agent.cfg,修改成服务器地址。

日志文件也可以取消注释,方便查看服务运行的日志。

将代理安装为服务,创建 systemd 服务:vim /etc/systemd/system/fusioninventory-agent.service

[Unit]
Description=FusionInventory agent
Documentation=man:fusioninventory-agent
After=syslog.target network.target

[Service]
ExecStart=/usr/local/bin/fusioninventory-agent --daemon --no-fork
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

启动服务

systemctl enable fusioninventory-agent
systemctl start fusioninventory-agent
systemctl status fusioninventory-agent

查看服务日志:vim /var/log/fusioninventory.logtail -f /var/log/fusioninventory.log

要立即开始运行,可以使用以下命令向进程发送 USR1 信号以立即开始运行:

pkill -USR1 -f -P 1 fusioninventory-agent

以守护进程一直在后台运行,设置了systemd 服务就不需要这个了,没什么用。

fusioninventory-agent --server http://10.10.166.213:9000/plugins/fusioninventory/ --daemon

方法二:

对于fusioninventory-agent,需要安装以下依赖项:

apt -y install dmidecode hwdata ucf hdparm
apt -y install perl libuniversal-require-perl libwww-perl libparse-edid-perl
apt -y install libproc-daemon-perl libfile-which-perl libhttp-daemon-perl
apt -y install libxml-treepp-perl libyaml-perl libnet-cups-perl libnet-ip-perl
apt -y install libdigest-sha-perl libsocket-getaddrinfo-perl libtext-template-perl
apt -y install libxml-xpath-perl libyaml-tiny-perl

对于fusioninventory-agent-task-network,需要安装以下依赖项:

apt -y install libnet-snmp-perl libcrypt-des-perl libnet-nbname-perl

如果您需要对网络清单的 SNMPv3 支持,您还应该安装以下设备:

apt -y install libdigest-hmac-perl

对于fusioninventory-agent-task-deploy,需要安装以下依赖项:

apt -y install libfile-copy-recursive-perl libparallel-forkmanager-perl

如果需要运行 WakeOnLan 任务,则需要安装此其他依赖项:

apt -y install libwrite-net-perl

ubuntu系统上没有这条命令,没查到代替方案,如果你需要用该系统作为盘点任务代理,代理无法唤醒会导致任务执行失败,根据自己的需求选择安装方式。

下载所需的软件包,如下图:

文件存档:GLPI资料 | AList (xmhweb.cn)

安装所需的软件包:

dpkg -i fusioninventory-agent_2.6-1_all.deb
dpkg -i fusioninventory-agent-task-collect_2.6-1_all.deb
dpkg -i fusioninventory-agent-task-network_2.6-1_all.deb
dpkg -i fusioninventory-agent-task-deploy_2.6-1_all.deb
dpkg -i fusioninventory-agent-task-esx_2.6-1_all.deb

拓展一下卸载:

apt remove fusioninventory-agent
dpkg --purge fusioninventory-agent

验证:使用 dpkg -l | grep fusioninventory-agent命令检查 FusionInventory agent 软件包的名称和版本号。

配置代理:编辑设置服务器地址:vim /etc/fusioninventory/agent.cfg

启动代理:

systemctl restart fusioninventory-agent

更改配置时,重新加载代理:

systemctl reload fusioninventory-agent

要立即开始运行:您可以使用以下命令向进程发送 USR1 信号以立即开始运行:

pkill -USR1 -f -P 1 fusioninventory-agent

查看 FusionInventory Agent 的日志文件以获取更多信息,通常位于/var/log/fusioninventory-agent/fusioninventory-agent.log。但是我没找到这个文件。

centos7安装

yum install -y yum-plugin-copr
yum copr enable trasher/fusioninventory-agent
yum install fusioninventory-agent fusioninventory-agent-task-inventory 
vim /etc/fusioninventory/agent.cfg
systemctl start fusioninventory-agent
systemctl enable fusioninventory-agent

GLPI-Agent

以下方法测试至静默安装步骤时没有安装成功,谨慎使用

还有一种一键部署的方法,通过orca修改msi安装包的参数,而不用手输参数,实现静默安装的功能。

GLPI-Agent代理基于 FusionInventory 代理的分支,因此主要类似于 FusionInventory 代理。 它引入了新功能和新协议,可直接与 GLPI 服务器及其本机清单功能进行通信。

首先下载GLPI-Agent的msi安装包:GLPI-Agent-1.7.3-x64.msi

下载修改msi所用工具orca:https://go.microsoft.com/fwlink/?linkid=2261842

点击光盘中winSDKSetup.exe,单选其中的MSI Tools工具来安装。

右键选择GLPI-Agent-1.7.3-x64.msi文件,单击edit with orca,将参数添加至Property中。

  • ADD_FIREWALL_EXCEPTION=1:将 GLPI 代理添加到 Windows 防火墙例外列表中;
  • RUNNOW=1:安装代理后立即启动代理;
  • SERVER=http://10.10.166.213:9000/plugins/fusioninventory/:将任务执行的结果发送到给定的服务器;
  • ADDLOCAL=ALL:安装所有功能;
  • EXECMODE=1:作为服务安装;
  • INSTALLDIR="D:\Program Files (x86)\glpi-agent\:设置代理的安装基本目录;

更多参数设置可参考官方文档:Windows installer — GLPI Agent 1.7 documentation (glpi-agent.readthedocs.io)

设置好之后打开msi,会发现服务器地址默认出现在框中,说明修改有效。

最后通过批处理文件静默安装:msiexec /i GLPI-Agent-1.7.2-x64.msi /quiet

window日志直接就结束了,并没有进行安装,原因未知。

OCSInventory

官方文档:OCS Inventory Docker image – OCS Inventory Documentation (ocsinventory-ng.org)

镜像地址:GitHub – OCSInventory-NG/OCSInventory-Docker-Image: Docker image for OCSInventory Server

先上结论:OCS删除电脑信息后就无法自动收集电脑信息,需要客户端点击同步信息才能上传,不知道自动同步的频率是多久。建议使用Fusioninventory插件,OCS Inventory NG就不做过多测试了。

从 docker hub 拉取映像

docker pull ocsinventory/ocsinventory-docker-image:latest

使用docker-compose部署,有大佬都整理好了,在每个文件夹中都有一个docker-compose示例。

将github存储库下载到本地(OCSInventory-Docker-Image-master.zip | AList (xmhweb.cn)):

git clone https://github.com/OCSInventory-NG/OCSInventory-Docker-Image

进入你想要安装的版本的文件中:cd 2.9.2/

按自己的需求修改docker-compose.yml文件,附上我的:

version: '3'

services:
  ocsapplication:
    image: ocsinventory/ocsinventory-docker-image:2.9.2
    container_name : ocsng
    restart: always
    ports:
      - "10.10.166.213:9003:80"
    volumes:
      - "perlcomdata:/etc/ocsinventory-server"
      - "ocsreportsdata:/usr/share/ocsinventory-reports/ocsreports/extensions"
      - "varlibdata:/var/lib/ocsinventory-reports"
      - "httpdconfdata:/etc/apache2/conf-available"
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      OCS_DB_SERVER: ocsng-mysql
      OCS_DB_USER: ocsng
      OCS_DB_PASS: 123456
      OCS_DB_NAME: ocsng
      # See documentation to set up SSL for MySQL
      OCS_SSL_ENABLED: 0
    links:
      - ocsdb
    networks:
      - localocs
    depends_on:
      - ocsdb

  ocsdb :
    image : mysql:latest
    container_name : ocsng-mysql
    restart: always
    ports:
      - "10.10.166.213:3308:3306"
    volumes :
      - ./sql/:/docker-entrypoint-initdb.d/
      - sqldata:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD : 123456
      MYSQL_USER : ocsng
      MYSQL_PASSWORD : 123456
      MYSQL_DATABASE : ocsng
    networks:
      - localocs

  ocsproxy:
    image: nginx
    container_name: ocsng-nginx
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx/conf:/etc/nginx/templates
      - ./nginx/certs:/etc/nginx/certs
      - ./nginx/auth:/etc/nginx/auth
    environment:
      # 80 or 443
      LISTEN_PORT: 80
      # empty or ssl
      PORT_TYPE: ""
      SSL_CERT: ocs-dummy.crt
      SSL_KEY: ocs-dummy.key
      # OCS Api user restriction (default ocsapi/ocapi)
      API_AUTH_FILE: ocsapi.htpasswd
      # OCS Download
      READ_TIMEOUT: 300
      CONNECT_TIMEOUT: 300
      SEND_TIMEOUT: 300
      MAX_BODY_SIZE: 1G
    depends_on:
      - ocsapplication
    networks:
      - localocs

networks:
  localocs:

volumes:
  perlcomdata:
  ocsreportsdata:
  varlibdata:
  httpdconfdata:
  sqldata:

特别说明:这两行同步宿主机时间至容器,解决了容器因权限不足不能修改时间的限制

- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro

nginx容器貌似不创建也是可以的,可能是因为我宿主机本身就有nginx或apache服务(80端口会被占用)。

创建容器:docker-compose up -d或者docker-compose -f docker-compose.yml up -d

查看容器信息,确定数据卷位置:docker inspect ocsng

cd /var/lib/docker/volumes

访问:http://10.10.166.213:9003/ocsreports

主页提示可以忽略,使用admin/admin登录。

GLPI提示如下:

打开OCS Inventory NG设置

客户端安装OCS-Windows-Agent-Setup-x64.exe就可以同步电脑信息到OCS Inventory NG服务器。

IP Addresing

IP地址管理插件,可视化显示IP地址的使用、空闲状态。

官方地址:GitHub – pluginsGLPI/addressing: Plugin addressing for GLPI

个人存档:glpi-addressing-3.0.2.tar.bz2 | AList (xmhweb.cn)

GLPI存放插件的目录:cd /var/www/html/glpi/plugins

安装git clone命令:apt install git

下载:git clone https://github.com/pluginsGLPI/addressing.git

进入glpi进行安装启用:

附加字段

在项目下设置自定义字段,满足实际需求。效果如下图:

官方地址:GitHub – pluginsGLPI/fields: Additionals fields for GLPI

个人存档:glpi-fields-1.21.8.tar.bz2 | AList (xmhweb.cn)

上传安装包至插件目录:/var/www/html/glpi/plugins

解压安装包:tar -jxvf glpi-fields-1.21.8.tar.bz2

进入glpi进行安装启用:

重命名GLPI字符串

GLPi 插件 (glpi-project.org)

Genericobject

添加新的资产分类,如:摄像头、AP、服务器。

官方地址:GitHub – pluginsGLPI/genericobject: Genericobject object plugin

个人存档:glpi-genericobject-2.14.9.tar.bz2 | AList (xmhweb.cn)

上传安装包至插件目录:/var/www/html/glpi/plugins

解压安装包:tar -jxvf glpi-genericobject-2.14.9.tar.bz2

进入glpi进行安装启用:

GLPI功能配置

导入域账户

在资产管理系统中,和资产一样变化较大的就是人员信息了,GLPI可以同步域用户信息,减少人员维护的工作。

设置LDAP目录

配置域参数进行连接

(&(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
DC=ysgbio,DC=cndomain
Administrator@ysgbio.cndomain
samaccountname
objectguid

设置完成保存测试,测试通过即可。

通过设置字段可以获取域用户信息,如:description(描述),可以满足一些特殊的用法,因为我本地的域在描述中标明了域账号的部门和使用人,所以把描述绑定姓氏,然后绑定资产。

群组设置筛选:(&(objectClass=group)(cn=*)),过滤掉无用的信息,具体要实现什么效果需要自己查资料。

批量导入OU中群组和用户信息

群组信息导入

群组导入没有测试成功,群组和用户之间没有建立关联,群组信息未达到筛选目的,暂未找到原因

导入新群组

勾选,执行导入。

用户信息导入

导入新用户

勾选,执行导入。

群组和用户关联

由于群组和用户没有自动进行关联,具体原因不详,所以自己通过实体规则进行人员分配。

首先新建群组实体

然后为实体添加规则,如下:

添加完成应该就可以看到用户和群组进行了关联。

定时任务执行资产发现和盘点

参考:GLPI+fusioninventory资产管理系统(超详细步骤教程)_11944248的技术博客_51CTO博客

配置

1.配置SNMP证书,确认社区值是否和打印机一致。

2.添加打印机所在的IP段。

3.设置IP段的起始、结束地址。

4.选择SNMP证书进行关联。

5.设置代理可执行的模块,随便选择一个已录入的客户端,建议选24小时不会关机的服务器,可以是GLPI服务器自身(服务器本身做为代理唤醒有点问题)。

6.为了省事,勾选所有的模块(安装的时候需要下载这些模块)

7.创建任务

SNMP扫描网络设备要建立两个任务:

第一个任务先发现IP段中的可用IP,为网络发现任务

选择网络发现,添加目标网段和代理设备。

回到下面页面,点【强制开始】,可能要执行一段时间,耐心等待。

第二个任务就是扫描该IP所属网络设备的具体信息,为SNMP扫描任务。

步骤和之前一样,唯一的区别在于选择【网络资产盘点SNMP】。

等网络发现任务完成后,再点击【强制执行】运行SNMP扫描任务。等待一会就能在打印机中看到设备了。

可以为任务设置准备时段和执行时段,该任务会自动进行。

同时可以查看任务执行记录和结果,确认是否执行。

拓展

经测试,资产发现无法使用SNMP v3协议,所以需要为交换机配置v2c协议,华为交换机配置参考如下

sys
snmp-agent sys-info version v2c
snmp-agent community read ysgbio@2023
display current-configuration | include snmp

解决邮件发送延迟的问题

参考链接:教程 – GLPI电子邮件通知设置| 一步步 (techexpert.tips)

首先需要打开邮件通知功能,如下图:

为事件设置通知收件人,同时给用户赋予角色权限,用户需要设置邮箱地址才能接收通知。

【邮件后续追踪设置】设置发件邮箱,所有的通知邮件都由该邮箱发送。

工单规则:新建任务和分配任务会通知IT人员,任务后续跟踪和任务删除只通知系统管理员。

现在,我们需要将Linux服务器配置为每5分钟自动发送所有电子邮件通知

首先,从PHP-CLI程序中找到并编辑php.ini文件。

#更新 locate 命令使用的文件名数据库,可以快速地通过文件名进行搜索
updatedb

#安装mlocate工具
apt-get install mlocate

#查找文件名位置
locate cli/php.ini
vim /etc/php/8.1/cli/php.ini

将以下两个参数进行修改

创建一个计划任务,每5分钟运行一次cron.php脚本(可根据需求自行修改)

crontab -e
*/5 * * * * /usr/bin/php /var/www/html/glpi/front/cron.php

queuednotification是一个与通知队列相关的功能,用于处理和管理待发送的通知。当有新的通知需要发送给用户时,它们会被添加到通知队列中等待处理。

打开定时任务找到:queuednotification,将运行方式改成CLI

在 GLPI 中,当有新的通知或提醒需要发送给用户时,它们会被放入队列中等待处理。这些通知可能包括用户提交的工单更新、故障通知等。由于通知可能会积累并占用系统资源,因此定期清理队列是一个良好的做法,以确保系统的性能和稳定性。

queuednotificationclean定时任务负责定期清理这些通知队列,删除过时或不再需要发送的通知,以释放系统资源并维护系统性能。

queuednotificationclean的运行方式也改成CLI

使用命令查看任务执行的日志:tail -f /var/www/html/glpi/files/_log/cron.log

拓展任务解析:

  • FusionInventory的”wake up agents”功能可以用来唤醒处于睡眠状态的代理(agents),以便它们能够与FusionInventory服务器通信,报告设备信息或执行其他任务。
  • FusionInventory的taskscheduler是用于计划和执行FusionInventory任务的工具。通过taskscheduler,你可以创建和配置任务,以自动执行特定的操作,如资产发现、软件部署、硬件信息收集等。

资产SN编号重复导致盘点异常

由于部分电脑的SN编号一样,而盘点规则默认SN编号唯一,导致盘点信息冲突,相同SN编号的资产只能识别一个。因此将资产采集规则改成以电脑名(根据实际修改)作为唯一判断标准。

盘点任务不执行,无法唤醒代理

设置盘点任务,发现任务已经被创建但是迟迟没有开始执行,查看盘点任务代理客户端,确认【上次连接】的时间,可以看出代理是否被唤醒,在确保盘点任务设置没问题的前提下,如果代理没有被唤醒是没法进行盘点任务的。现在我们就开始解决这个问题,为了减少关联性,盘点任务代理机器我使用GLPI服务器本身。

使用上文【方法一】在Linux系统上安装fusioninventory-agent时,会产生如下图的文件,通过测试发现,运行:fusioninventory-agent可以主动唤醒Agent,其他安装方法应该也有这个文件,可直接运行试试,看是否有输出。

cd /usr/local/bin/

由于盘点任务是定时启动的,所以我们需要给fusioninventory-agent设置一个定时任务,自动运行。

安装cron服务:

apt-get update
apt-get install cron
systemctl status cron

编辑全局定时任务crontab -e或者vim /var/spool/cron/crontabs/root

添加一个定时任务,每小时执行一次,根据自己实际情况设置,并重定向输出日志到指定文件。

1 * * * * /usr/local/bin/fusioninventory-agent >> /var/log/crons.log 2>&1
# 改进了一下,加了一行输出当前时间到日志文件中,上面那个无法确定定时任务运行时间
1 * * * * echo "Execution time: $(date)" >> /var/log/crons.log && /usr/local/bin/fusioninventory-agent >> /var/log/crons.log 2>&1
  • 1 * * * *:这个 cron 表达式表示每小时的第一分钟执行一次。
  • /usr/local/bin/fusioninventory-agent:这是要执行的命令,不指定具体目录也能执行,也许能适用其他的安装方法,没有测试。
  • >> /var/log/crons.log:将标准输出(即程序的正常输出)追加到 /var/log/crons.log 文件中。
  • 2>&1:将标准错误输出(错误信息)重定向到标准输出,使得错误信息也会被追加到同一个日志文件中。

使用 crontab -l 命令来查看当前用户的 cron 作业列表,确认你的设置是否正确。

查看定时任务日志

# 查看任务日志
tail -f /var/log/crons.log
# 日志文件保存在/var/log/journal,无法直接读取,乱码
journalctl -u cron

通过以上设置应该就可以定时唤醒代理进行盘点任务了。

PHP版本替换

由于是用Docker进行的安装,在安装测试过程中发现不同版本的GLPI镜像中安装的PHP版本不一样,导致在指定GLPI版本时,提示PHP版本不兼容(PHP 7.4.0 - 8.3.0 (exclusive) required)。所以需要替换PHP版本。

卸载之前请确认安装了哪些模块:php -m

建议可以参照官网的要求进行配置

卸载自带的PHP8.3

如果你想要彻底卸载 Ubuntu 系统中的 PHP,可以按照以下步骤进行:

使用以下命令卸载 PHP 及其相关软件包:

sudo apt-get purge php8.3

然后,你可以使用以下命令清理不再需要的依赖项:

sudo apt-get autoremove

这将删除 PHP 及其相关软件包,并清理系统中不再需要的依赖项。

最后,你可以通过以下命令验证 PHP 是否已彻底从系统中移除:

php -v

如果无法通过包管理器卸载 PHP,您可以尝试手动删除 PHP 文件和目录。

通过命令找到 PHP 可执行文件的路径:which php

然后,手动删除 PHP 可执行文件以及相关的配置文件和目录。

PHP 的安装目录位于 /usr/bin/php,而配置文件通常位于 /etc/php/ 目录下。

安装PHP8.1

参照原来的PHP8.3版本,安装相应的模块依赖

apt install php8.3 php8.3-mysql php8.3-ldap php8.3-xmlrpc php8.3-imap php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php-cas php8.3-intl php8.3-zip php8.3-bz2 php8.3-redis

安装PHP8.1及相关依赖

apt install php8.1 php8.1-common php8.1-cli php8.1-mysql php8.1-zip php8.1-gd php8.1-mbstring php8.1-curl php8.1-xml php8.1-bz2 php8.1-imap php8.1-intl php8.1-ldap php8.1-redis php8.1-xmlrpc php8.1-igbinary

优化

OPCache的内存限制

打开性能发现Memory这一项满了,于是就想修改PHP OPCache的内存限制。

参考:PHP7开启opcache打造强悍性能_opcache control要开启吗-CSDN博客

CentOS / RHELvim /etc/php.d/10-opcache.ini

Ubuntu / Debianvim /etc/php/8.1/mods-available/opcache.ini

添加或修改以下配置:

[opcache] 
; Determines the size of the shared memory storage used by OPcache, in megabytes.
opcache.memory_consumption=256

保存退出,重启容器生效。

GLPI密码恢复

登录数据库,修改glpi用户的密码为:glpi,使用明文是不行的,只能用密文。

glpi=$2y$10$p..X4No3kbL9zq3s9yyXuuNdbHN78Bd/j8aiInj5L7Fo1Hg3hJMFa

mysql> use glpi;
mysql> update glpi.glpi_users set password='$2y$10$p..X4No3kbL9zq3s9yyXuuNdbHN78Bd/j8aiInj5L7Fo1Hg3hJMFa' where name = 'glpi';
mysql> quit;

数据迁移与备份

为了优化目录结构,我需要把GLPI项目移动到其他目录,如果你也是通过docker-compose部署的,那你一定注意到了docker-compose.yml同级目录下有个映射文件夹storage,里面包含了GLPI项目文件数据库文件。如下

只要这两个文件没有丢失,我们就可以随意移动该项目。

1.首先删除容器及容器网络,在docker-compose.yml同级目录下执行:docker-compose down

2.复制Glpi文件到目标文件。

3.在新的目录下启动容器:docker-compose up -d

4.进入容器给项目文件赋予www-data权限

docker exec -it glpi bash
chown -R www-data:www-data /var/www/html/glpi/

5.完成迁移。

相关链接

diouxx/glpi – Docker Image | Docker Hub

elestio/glpi – Docker 镜像 |Docker 中心

小提示:您可以通过RSS订阅本站文章更新,订阅地址:https://blog.xmhweb.cn/feed

评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇