diff --git a/mxmount/mxmount b/mxmount/mxmount index 47d69d6..ed7d2ae 100755 --- a/mxmount/mxmount +++ b/mxmount/mxmount @@ -64,7 +64,7 @@ sub add_data0_if_not_present { sub create_exports { my $allmp = $D{$hostname}; - my @CMD; + my $newexport=system('hostconfig newexport')==0; open(EXPORTS, '>', $exports) or die "can't open $exports: $!"; @@ -78,11 +78,24 @@ sub create_exports { foreach my $mp (@$allmp) { next if($mp->{noexport}); - @CMD = ($mp->{mountpoint}, $mp->{exportopts}); - - print join " ", "$exports: ", @CMD, "\n"; - print EXPORTS join " ", @CMD, "\n"; - + unless ($newexport) { + my @CMD = ($mp->{mountpoint}, $mp->{exportopts}); + print join " ", "$exports: ", @CMD, "\n"; + print EXPORTS join " ", @CMD, "\n"; + } else { + my ($mountpoint,$exportopts)=($mp->{mountpoint}, $mp->{exportopts}); # '/amd/theinternet/1','@amd(sync,rw,...)' + my ($hostspec,$optspec)=$exportopts=~/^([^(]+)(.*)/; # '@amd','(sync,rw,...)' + my ($opts)=$optspec=~/\((.*)\)/; # 'sync,rw,...' + my $hosts=''; + warn "export $mountpoint to $hostspec opts $opts\n"; + if (my ($group) = $hostspec=~/^@(.+)/) { + $hosts=`hostconfig --list $group`; # expanded group + $hosts or warn "group $group is empty\n"; + } else { + $hosts=$hostspec; # single host + } + $hosts and printf EXPORTS "%s -%s %s\n",$mountpoint,$opts,$hosts; + } } close EXPORTS; }