Subject: Re: amd
To: None <earle@isolar.Tujunga.CA.US>
From: Matt Ragan <matt@ibmoto.com>
List: netbsd-users
Date: 04/23/1997 20:57:14
Greg Earle wrote:
>I suspect I'm not the only one in this boat.  I have 2 NetBSD machines, on
>different subnets, living inside two different NIS/automount worlds.  Every
>other machine in those worlds uses "automount" (even the SGIs and the HP).
>
>So we use "automount" with a SunOS machine serving NIS auto.* maps.  Since
>changing all of them to use "amd" is *not* an option, I would really like
>to hear from somebody who's cobbled together an "amd" setup to live in an
>all-automounter world, using NIS automount maps.

This is the setup I use:

In your NIS Makefile, put this in to build the amd.master map from the 
auto.master map:

amd.master: amd.master.time

amd.master.time:  $(DIR)/auto.master
    -@if [ -f $(DIR)/auto.master ]; then \
        sed -e "/^#/d" -e s/#.*$$// -e s/auto/amd/ $(DIR)/auto.master \
        | awk '{ printf("%s %s\n", $$1, $$2 ) }' \
        | $(MAKEDBM) - $(YPDBDIR)/amd.master; \
        touch amd.master.time; \
        echo "updated amd.master"; \
        if [ ! $(NOPUSH) ]; then \
            $(YPPUSH) amd.master; \
            echo "pushed amd.master"; \
        else \
        : ; \
        fi \
    else \
        echo "couldn't find $(DIR)/auto.master"; \
    fi

Then repeat this for whatever other automount maps you have:
amd.home: amd.home.time

amd.home.time:  $(DIR)/auto.home
    -@if [ -f $(DIR)/auto.home ]; then \
        sed -e "/^#/d" -e s/#.*$$// $(DIR)/auto.home \
        | $(AUTO2AMD) | $(MAKEDBM) - $(YPDBDIR)/amd.home; \
        touch amd.home.time; \
        echo "updated amd.home"; \
        if [ ! $(NOPUSH) ]; then \
            $(YPPUSH) amd.home; \
            echo "pushed amd.home"; \
        else \
        : ; \
        fi \
    else \
        echo "couldn't find $(DIR)/auto.home"; \
    fi

where AUTO2AMD is defined at the top of the makefile to point to wheverever
this perl script lives:

#!/usr/local/bin/perl

while (<>) {
        chop;
        next if /^#/;
        ($key, $middle, $directory) = /(^\S+)\s+([^:]+):(.*)/;
        if (!(($options, $host) = ($middle =~ /(^\S+)\s+(\S+)/))) {
                $host = $middle;
                $options = "";
        }
        $host =~ s/\$NET/\${cluster}/;
        $host =~ s/&/\${key}/;
        if (!(($dir, $subdir) = ($directory =~ /(^\S+):(\S+)/))) {
                $dir = $directory;
                $subdir = "";
        }
        print "$key             type:=nfs;rhost:=$host;rfs:=$dir";
        print ";sublink:=$subdir" if $subdir !~ /^$/;
        print ";opts=resvport,intr";
        print "\n";
}

Note that you may be able to delete the 'resvport' option, but our servers 
won't work without it.  You will also probably want to delete (or modify)
the:

        $host =~ s/\$NET/\${cluster}/;

line, since we define the NET variable on our automount command line to be the
subnet that the host is one, and we have DNS CNAMES to point 'server-$NET'
to the correct one of the twelve interfaces on each of our Auspexes.  Under
AMD, this get changed its $cluster variable, and the AMD clients are
started with the -c options set to the subnet value, which accomplishes
the same thing.

-- 
--------------------------------------------------------------------------
Matt Ragan  (matt@ibmoto.com)  Motorola/IBM Somerset PowerPC Design Center
Network Administrator          Systems/Network Engineering  (512) 795-7298
9737 Great Hills Trail         Austin, Tx  78759        FAX (512) 795-7519
--------------------------------------------------------------------------