前言
先后部署了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安装
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.log
或tail -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字符串
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
通过以上设置应该就可以定时唤醒代理进行盘点任务了。
定时任务时间不正确,时区无法设置
在常规设置里面发现时区显示“Timezone usage has not been activated. Run the “php bin/console database:enable_timezones” command to activate it”。
根据提示,进入项目文件下,执行:
docker exec -it glpi bash
cd /var/www/html/glpi
php bin/console database:enable_timezones
可以判断是数据库权限不足导致的问题,进入数据库,给用户glpi赋予全部权限。
GRANT ALL PRIVILEGES ON *.* TO 'glpi'@'%';
flush privileges;
然后再执行:php bin/console database:enable_timezones
,发现执行成功了。
刷新网页,在设置中可以选择时区信息,并且定时任务中的时间也显示正常了,没有时区差。
如果还是不行的话,可以再试试以下命令。
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
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 / RHEL:vim /etc/php.d/10-opcache.ini
Ubuntu / Debian:vim /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.完成迁移。
评论