From: HENRY::IN%"leichter-jerry%yale.arpa%sri-kl.ARPA%relay.cs.net@rca.com" 20-FEB-1987 10:46 To: GERLAND@ubvms.bitnet Subj: Re: FINGER problems I have a problem with the FINGER database. I am running FINGER here on a cluster (2 8650s & 1 785). When we first clustered I tried installing FINGER & FINGERSHR from SYS$COMMON:[SYSEXE] but the database would be wrong from time to time. Then I built a separate version of FINGER and FINGERSHR on SYS$SYSTEM of each machine and submitted a FINGER-REBUILD com once a day on each machine at the same time. This helped a little but if a machine gets rebooted the database once again is out of sync.... We faced the same problem here. Unfortunately, there is no really good solu- tion, given the current structure of the FINGER database: Since one file contains ALL the information - both information common to all cluster nodes, like UIC/username matching, and stuff specific to each node, like the node name - using that same file on multiple machines in a cluster is guaranteed to produce a lot of confusion. What I ended up doing was creating a separate file for each cluster node and a command file that would point FINGER off to the right place on each node. (This could have been done, as you have done, by keeping the database in SYS$SPECIFIC on each node, but I found that harder to deal with.) We use the PACS accounting stuff here, so all account creation goes through some standard command files, which see to it that the FINGER database is re-built. The problem in a cluster is that (a) you have to re-build all the files on each cluster member; (b) you have to re-INSTALL the FINGERSHR image on each cluster member. It would be easy to modify the file I've included below so that it would re-build the database for each of a known list of node names. It could then submit jobs on a queue on each cluster member that would do a REPLACE of FINGERSHR. The two files that are system-specific are FINGERDATA and FINGERSHR; they are actually FINGERxxx_node. FINGERDATA_node.COM contains the finger data that is in the command file itself in the original version. This code could use one fix - it unconditionally REMOVE's the images it INSTALL's. This avoids errors if you try to run it a second time, but means that you get some warnings when you boot. What can I tell you, V4 was new at the time and I didn't realize you could check with F$FILE(...,"KNOWN"). -- Jerry $!..StartFing.Com Start finger stuff at BOOT time $!.. R. Garland / C.U.Chemistry / 28-Mar-1983 $!.. VMS V4.0 version $! Modified, 7-Nov-1985 to run on a cluster - the common stuff is done here, $! Jerry Leichter but the data-base is node-specific. (On a homogenous $! cluster, it would be better if the user DB were common $! and the host DB were not, but that would require $! splitting it into two files.) $ ! Check every line with "<-- Edit" on it $ Write Sys$Output "[Installing Finger]" $! $! Note: you must edit this file - Change the logical name following to $! point to the place where you keep programs like this. Change $! the terminal locations, and host routing appropriately. $ Define Finger$Directory utools:[dcltools.exe] !<-- Edit $!JSL+ $ node = f$edit(f$getsyi("scsnode"),"trim") $ suffix = "" $ if node .nes. "" then suffix = "_" + node $ install :== $SYS$SYSTEM:INSTALL/COMMAND_MODE $!JSL- $! $! $! PARAMETERS: $! P1 := "REBUILD" reconstruct FINGERSHR database $! $! Note: Finger needs SYSPRV (so it can read SYSUAF.DAT and users' $! MAIL.MAI files), WORLD (so it can do GETJPI on all processes), $! and CMKRNL (so it can get the terminal idle times). $! $! FINGERSHR is the shared databse for usernames, terminal locations $! and remote host routing. $! $! NOTE: (this one is wierd) FINGERSHR must first be unprotected $! (WORLD is given write privilege) then installed to work properly!! $! $ set noon !JSL+ $ install delete Finger$Directory:Finger $ install delete Finger$Directory:FingerShr'suffix' $ set on !JSL- $ Set Prot=(W:RWE) Finger$Directory:FingerShr'suffix'.Exe $ install add Finger$Directory:Finger - !JSL+ /Open /Shared /Header /Priv=(Sysprv,World,Cmkrnl) $ install add Finger$Directory:FingerShr'suffix' - /Open /Shared /Header /Write /Priv=(Sysprv,Sysgbl) $!Set Prot=(W:RE) Finger$Directory:FingerShr'suffix'.Exe !JSL- $! $! Note: FINGERSHR must be defined so the image activator can find $! the shared section containing the finger database. $! $ Define/System/Exec FingerShr - !JSL 'F$Log("Finger$Directory")'FingerShr'suffix' !JSL $! $! Note: the finger database does not need to be rebuilt each time you Boot. $! However, since you may have added names to the UAF and forgotten $! to add them to the finger database, you may want to rebuild. $! $! Format of entries: $! Users: ADD /USER=BLOW /PERSONALNAME="Blow, Joe" $! or $! ADD /USER /UAF $! Hosts: ADD /HOST=FRODO /TYPE=D $! TYPES: L=local $! D=DECnet $! J=JNET (VMS or Unix host) $! I=JNET (IBM host) $! T=TCP/IP (TWG) $! /LINK is used for the actual host name when /HOST $! is a pseudonym. /ROUTE is for poor-man's-routing or $! internet gateway-ing. $! Other: $! /Network - gives "proper" names to network i.e. BITnet, ARPAnet $! /Local_Host - your node name. If not given, DECnet name is used $! /Oganization - text string (for header) (optional). $! /Router - Host name and net type to send requests for unknown $! hosts (optional). $! Note: you do not need to make an entry for DECnet hosts $! with no pseudonyms as these ar found by default. $! $ If P1 .eqs. "" Then GoTo NoRebuild $ If P1 .nes. "REBUILD" Then GoTo NoRebuild $ assign/user Finger$Directory:fingerdata'suffix'.com SYS$INPUT !JSL $ Run Finger$Directory:FingMaint $ NoRebuild: $! ------------------------ Here's what our FINGERDATA file looks like: !Set up data for node VENUS Clear /All Add /Local_Host="VENUS" !<-- Edit Add /Network="DECnet" /Type=D !<-- Edit Add /User /UAF ! Get names from the authorization file Add /Host=VENUS /Type=L ! Local Host !<-- Edit Exit -------