Hi,
I am exploring dynamic export in NFS-Ganesha using dbus-send. I could compile NFS-Ganesha
with "USE_DBUS=ON" and could also start the ganesha.nfsd. The exports which were
present in my config file are properly up when I started ganesha.nfsd. But, I am not able
to add any new export. dbus-send command is always failing with below error
[root@localhost ~]# ls -lrt /home/
total 0
drwxr-xr-x. 3 root root 36 Jun 2 21:22 ganesha_nfs_v3
drwxr-xr-x. 2 root root 6 Jun 10 18:18 ganesha_1
drwxr-xr-x. 8 root root 199 Jun 11 15:00 ganesha_nfs_v4
[root@localhost ~]# sudo dbus-send --print-reply --system --dest=org.ganesha.nfsd
/org/ganesha/nfsd/ExportMgr org.ganesha.nfsd.exportmgr.AddExport
string:/etc/ganesha/export.conf 'string:EXPORT(Export_Id=3,
Path="/home/ganesha_1/", Pseudo="/home/ganesha_1/",
Transports="TCP").FSAL(Name="VFS")'
Error org.freedesktop.DBus.Error.InvalidArgs: Error finding exports: EXPORT(Export_Id=3,
Path="/home/ganesha_1/", Pseudo="/home/ganesha_1/",
Transports="TCP").FSAL(Name="VFS") because No such file or directory
[root@localhost ~]#
Messages in "/var/log/ganesha.log":
11/06/2020 23:44:23 : epoch 5ee2736e : localhost.localdomain :
ganesha.nfsd-26823[dbus_heartbeat] gsh_export_addexport :EXPORT :CRIT :Error finding
exports: EXPORT(Export_Id=3, Path="/home/ganesha_1/",
Pseudo="/home/ganesha_1/",
Transports="TCP").FSAL(Name="VFS") because No such file or directory
11/06/2020 23:44:23 : epoch 5ee2736e : localhost.localdomain :
ganesha.nfsd-26823[dbus_heartbeat] dbus_message_entrypoint :DBUS :MAJ :Method (AddExport)
on (org.ganesha.nfsd.exportmgr) failed: name = (org.freedesktop.DBus.Error.InvalidArgs),
message = (Error finding exports: EXPORT(Export_Id=3, Path="/home/ganesha_1/",
Pseudo="/home/ganesha_1/",
Transports="TCP").FSAL(Name="VFS") because No such file or directory)
11/06/2020 23:46:06 : epoch 5ee2736e : localhost.localdomain :
ganesha.nfsd-26823[dbus_heartbeat] nfs_health :DBUS :WARN :Health status is unhealthy. enq
new: 5445, old: 5441; deq new: 5441, old: 5441
Can someone please help on this?
I have followed the steps mentioned in:
https://github.com/nfs-ganesha/nfs-ganesha/wiki/Dbusinterface
[root@localhost ~]# ps -ef | grep nfs
root 26823 1 0 23:39 ? 00:00:00 /root/build_dir_v3_stable/ganesha.nfsd -f
/etc/ganesha/ganesha.conf
root 26854 25589 0 23:39 pts/1 00:00:00 grep --color=auto nfs
[root@localhost ~]# cat /var/log/ganesha.log | grep dbus
11/06/2020 23:39:50 : epoch 5ee2736e : localhost.localdomain : ganesha.nfsd-26823[main]
nfs_Start_threads :THREAD :EVENT :gsh_dbusthread was started successfully
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/home/ganesha_nfs_v3 (everyone)
/home/ganesha_nfs_v4 (everyone)
[root@localhost ~]#
[root@localhost ~]# cat /etc/ganesha/ganesha.conf
## These are core parameters that affect Ganesha as a whole.
NFS_CORE_PARAM {
## Configure the protocols that Ganesha will listen for. This is a hard
## limit, as this list determines which sockets are opened. This list
## can be restricted per export, but cannot be expanded.
Protocols = 3, 4;
# Enable NLM (network lock manager protocol)
Enable_NLM = false;
# lockmgr port
NLM_PORT = 45075;
Enable_RQUOTA = false;
}
## These are defaults for exports. They can be overridden per-export.
EXPORT_DEFAULTS {
## Restrict the protocols that may use this export. This cannot allow
## access that is denied in NFS_CORE_PARAM.
Protocols = 3, 4;
## Access type for clients. Default is None, so some access must be
## given either here or in the export itself.
Access_Type = RW;
## Whether to squash various users.
Squash = No_Root_Squash;
## Allowed security types for this export
Sectype = sys,krb5,krb5i,krb5p;
}
## Configure settings for the object handle cache
MDCACHE {
## The point at which object cache entries will start being reused.
Entries_HWMark = 100000;
}
## Configure logging. Default is to log to Syslog. Basic logging can also be
## configured from the command line
LOG {
## Default log level for all components
Default_Log_Level = EVENT;
#Default_Log_Level = DEBUG;
## Configure per-component log levels.
Components {
FSAL = INFO;
NFS4 = EVENT;
NFS3 = EVENT;
}
## Where to log
Facility {
name = FILE;
destination = "/var/log/ganesha.log";
enable = active;
}
}
NFS_KRB5 {
Active_krb5 = false;
}
%include "/etc/ganesha/export.conf"
[root@localhost ~]# cat /etc/ganesha/export.conf
## Configure an export for some file tree
EXPORT {
## Export Id (mandatory, each EXPORT must have a unique Export_Id)
Export_Id = 1;
## Exported path (mandatory)
Path = /home/ganesha_nfs_v3/;
## Pseudo Path (required for NFSv4 or if mount_path_pseudo = true)
Pseudo = /home/ganesha_nfs_v3/;
Transports = "TCP";
## Exporting FSAL
FSAL {
Name = VFS;
}
}
EXPORT {
## Export Id (mandatory, each EXPORT must have a unique Export_Id)
Export_Id = 2;
## Exported path (mandatory)
Path = /home/ganesha_nfs_v4/;
## Pseudo Path (required for NFSv4 or if mount_path_pseudo = true)
Pseudo = /home/ganesha_nfs_v4/;
Transports = "TCP";
## Exporting FSAL
FSAL {
Name = VFS;
}
}
Just as a data point, DisplayExport and ShowExports are running fine.
[root@localhost ~]# dbus-send --print-reply --system --dest=org.ganesha.nfsd
/org/ganesha/nfsd/ExportMgr org.ganesha.nfsd.exportmgr.DisplayExport uint16:1
method return time=1591899610.781101 sender=:1.175 -> destination=:1.178 serial=623
reply_serial=2
uint16 1
string "/home/ganesha_nfs_v3"
string "/home/ganesha_nfs_v3"
string ""
array [
]
[root@localhost ~]# dbus-send --print-reply --system --dest=org.ganesha.nfsd
/org/ganesha/nfsd/ExportMgr org.ganesha.nfsd.exportmgr.ShowExports
method return time=1591899620.339869 sender=:1.175 -> destination=:1.179 serial=633
reply_serial=2
struct {
uint64 1591898990
uint64 170367428
}
array [
struct {
uint16 1
string "/home/ganesha_nfs_v3"
boolean true
boolean false
boolean false
boolean false
boolean false
boolean false
boolean false
boolean false
struct {
uint64 1591899616
uint64 118026535
}
}
struct {
uint16 2
string "/home/ganesha_nfs_v4"
boolean false
boolean false
boolean false
boolean false
boolean false
boolean true
boolean false
boolean false
struct {
uint64 1591899006
uint64 449489142
}
}
struct {
uint16 0
string "/"
boolean false
boolean false
boolean false
boolean false
boolean false
boolean false
boolean false
boolean false
struct {
uint64 1591898990
uint64 143657141
}
}
]
[root@localhost ~]#