Skip to content

make-automaps: Support nfs > 4.0 #72

Merged
merged 1 commit into from
Jan 30, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 35 additions & 7 deletions make-automaps/make-automaps
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,28 @@ use warnings;

chomp (my $hostname=`uname -n`);$hostname=~s/\..*//;

{
my %SERVER_CAN_41;
sub server_vers_opt {
my ($servername)=@_;
unless (exists $SERVER_CAN_41{$servername}) {
my $pid=fork;
if (defined $pid) {
unless ($pid) {
open STDERR,'>','/dev/null';
exec 'hostconfig','--host',$servername,'nfsd41';
die "exec failed: $!\n";
}
wait;
$SERVER_CAN_41{$servername} = $? ? 0 : 1;
} else {
$SERVER_CAN_41{$servername} = 0;
}
}
return $SERVER_CAN_41{$servername} ? () : ('-vers=4.0');
}
}

sub convert_map {
my ($amd,$auto,$parse_line)=@_;
open IN,'<',$amd or die "$amd: $!\n";
Expand All @@ -22,13 +44,13 @@ sub convert_map {
sub parse_jbod_line {
my ($in,$source)=@_;
if ($in=~m"^(X\d+)\s+host==([^;]+);type:=link;fs:=/amd/\2/X/\1 host!=\2;type:=nfs;rhost:=\2;fs:=/amd/\2/x/\1;rfs:=/amd/\2/X/\1$") {
return "$1 -vers=4.0 $2:/amd/$2/X/$1";
return join(' ',$1,server_vers_opt($2),"$2:/amd/$2/X/$1");
} elsif ($in=~m"^(C\d+)\s+host==([^;]+);type:=link;fs:=/amd/\2/C/\1 host!=\2;type:=nfs;rhost:=\2;fs:=/amd/\2/c/\1;rfs:=/amd/\2/C/\1$") {
return "$1 -vers=4.0 $2:/amd/$2/C/$1";
return join(' ',$1,server_vers_opt($2),"$2:/amd/$2/C/$1");
} elsif ($in=~m"^(M\d+)\s+host==([^;]+);type:=link;fs:=/amd/\2/M/\1 host!=\2;type:=nfs;rhost:=\2;fs:=/amd/\2/m/\1;rfs:=/amd/\2/M/\1$") {
return "$1 -vers=4.0 $2:/amd/$2/M/$1";
return join(' ',$1,server_vers_opt($2),"$2:/amd/$2/M/$1");
} elsif ($in=~m"^(X\d+)\s+-fs:=/amd/([^/]+)/X/\1 host==\2;type:=link host!=\2;type:=nfs;rhost:=\2") {
return "$1 -vers=4.0 $2:/amd/$2/X/$1";
return join(' ',$1,server_vers_opt($2),"$2:/amd/$2/X/$1");
} else {
warn "?? $source : $_ ??";
}
Expand Down Expand Up @@ -68,8 +90,8 @@ sub parse_map_line {
return ();
}

sub parse_subkey_line { my ($key,$host,$fs)=parse_map_line(@_); return $key ? "$key -vers=4.0 $host:$fs/$key" : undef; }
sub parse_nosubkey_line { my ($key,$host,$fs)=parse_map_line(@_); return $key ? "$key -vers=4.0 $host:$fs" : undef; }
sub parse_subkey_line { my ($key,$host,$fs)=parse_map_line(@_); return $key ? join(' ',$key,server_vers_opt($host),"$host:$fs/$key") : undef; }
sub parse_nosubkey_line { my ($key,$host,$fs)=parse_map_line(@_); return $key ? join(' ',$key,server_vers_opt($host),"$host:$fs") : undef; }

sub create_pkg_map {
my $cache;
Expand All @@ -82,10 +104,16 @@ sub create_pkg_map {
/\S/ or next;
my ($pkg,$flags)=split ' ';
my $local="/var/pkg/$pkg";
my $rw = $flags eq 'BUILD' ? ' -vers=4.0,rw' : ' -vers=4.0';
my $rw;
if (-d $local) {
$rw = $flags eq 'BUILD' ? ' -rw' : '';
print $out "$pkg$rw :$local\n";
} else {
if (server_vers_opt('ex')) {
$rw = $flags eq 'BUILD' ? ' -vers=4.0,rw' : ' -vers=4.0';
} else{
$rw = $flags eq 'BUILD' ? ' -rw' : '';
}
print $out "$pkg$rw ex:/amd/ex/X/X2008/package/pkg/$pkg\n";
}
}
Expand Down