网站内容管理系统通过 nfs 客户端,更新 nfs 服务器上的文件;iguard 发布服务需要将 nfs 服务器上的变更文件推送到前端的WEB服务器。
iguard发布服务和 nfs 服务一起工作的条件:
Linux 平台
发布服务和 nfs 服务运行在同一个主机上
nfsd内核模块
已经编译好的,对应安装平台内核版本的二进制模块
nfslogd 事件转发工具
专门用于nfsd和发布服务建立联系的工具
iguard 发布服务
常规安装包即可
没有安装包,可能提供一个压缩包,例如:nfsd-notifier-3.10.0-957.el7.x86_64-v2.0-20200519.tgz,其中包含 已经打过补丁的 nfsd 内核模块,文件名为 nfsd.ko.xz 或者 nfsd.ko,应该跟用户环境下的模块同名。文件服务器目录
\\192.168.100.18\product\iGuard\nfsd-notifier
安装位置,即nfsd内核模块的系统目录是
x/lib/modules/`uname -r`/kernel/fs/nfsd
安装前,千万记得把上述目录下的原文件 nfsd.ko.xz 或者 nfsd.ko 备份下来,内核模块的替换存在系统崩溃的可能。将压缩包内的 nfsd 模块复制到nfsd内核模块的系统目录就可以了,由于已加载的nfsd内核模块不能方便卸载,需要重启操作系统才能生效。如果系统中重未启动过nfs服务,就不用重启机器。nfs服务有没有启动过,还是需要确认一下的
# lsmod | grep nfsd
如果有 nfsd 的模块信息,表示曾经启动过nfs服务,需要重启才能生效。
在系统重启后,如何确认nfsd模块是否更新成功,在nfs服务启动后
x
# systemctl start nfs-server
nfs服务的启动命令随Linux的发行版而有变化。
检查dmesg输出
[root@localhost ~]# dmesg | grep nfs
[ 63.996992] nfsd: loading out-of-tree module taints kernel.
[ 63.997719] nfsd: module verification failed: signature and/or required key missing - tainting kernel
[ 64.000692] nfslog: v2.0
[ 64.000693] nfslog: init start...
[ 64.000814] nfslog: max log line num=131072
[ 64.064522] nfslog: device class registered correctly (c: 244,0)
[ 64.064810] nfslog: device created correctly
[ 64.064811] nfslog: init OK
[ 64.064812] Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
nfslog 字样为标志性信息;另外还有一个字符设备可以辨认
x
# ls -l /dev/nfslog
crw------- 1 root root 244, 0 Jun 4 16:06 /dev/nfslog
在nfs服务器本机上验证,假设 /etc/exports 中有个输出目录为 /var/nfsshare,创建一个临时挂在点目录 /root/mnt,然后mount到本地的nfs服务
# mount -t nfs 127.0.0.1:/var/nfsshare /root/mnt
进入目录,并进行文件创建动作
# cd /root/mnt
# echo "hello world" > test.txt
# cat /dev/nfslog
OPENW /var/nfsshare/test.txt
FHBIND 8379610800000000c7682f35,/var/nfsshare/test.txt
WRITE /var/nfsshare/test.txt
从设备文件中获得到文件变更信息,说明已经成功安装了nfsd补丁模块。
nfslogd有简易的安装包,形如:nfslogd_linux_2.6_x86_64-20200604b.tgz,文件服务器目录
\\192.168.100.18\product\iGuard\nfslog-tools
解开压缩包,执行 install.sh 即可。
/usr/local/iguard/nfslogd
|-run-nfslogd.sh 启动脚本
|-nfslogd 主程序
|-logs 运行日志存放目录
该工具的配置文件为 /etc/nfslogd.conf,同时也被发布服务所用;配置文件格式为ini结构,基本内容有
#copy it to /etc/
[system]
#%workdir% don't include the slash('/') at tail
workdir=/usr/local/iguard/nfslogd
logfile=/usr/local/iguard/nfslogd/nfslogd.log
#%logfile% is in %workdir%
#dump_filehandle_escape_event=1
#close_db_after_use=1
其中:
启动nfslogd
x
# ./run-nfslogd.sh start
停止nfslogd
# ./run-nfslogd.sh stop
发布服务使用常规安装包来安装,安装完毕后,调整事件读取模块,需要配置stagingd.conf,修改参数libfenpath
{
"libfenpath":"libnfslogfen.so"
}
然后启动发布服务,通过控制台进行常规配置。
已编译的nfsd模块的二进制版本,其编译所用的内核版本必须和用户环境保持一致,否则会导致意想不到的错误
suse 系统下的模块有安全认证机制,自己编译的内核模块没有认证标志,需要编辑文件
/etc/modprobe.d/unsupported-modules 设置 “allow_unsupported_modules 1”,才可以加载自己编译的模块
曾经的nfsd模块依赖的字符设备 /dev/nfslog 已经不需要手动创建了,也不应该再手工创建了,在升级系统时,需要将手工创建字符设备的步骤取消掉。以前有个工作脚本 init_nfslog_dev.sh
echo "mknod /dev/nfslog..."
/bin/mknod /dev/nfslog c 61 0
chmod 0755 /dev/nfslog
echo "install successful."
需要删除这个脚本,或者清空内容。