keithe@tekgvs.GVS.TEK.COM (Keith Ericson) (10/05/88)
[notice that the Subject is MKS _and_ PC-NFS instead of
MKS vs. PC-NFS as it has been in the past.]
With some help from Gerry Wheeler at Mortice Kern Systems (MKS) I've
been able to get MKS and PC-NFS to work very nicely. But it wasn't
easy...
But first, you may need to know that I'm running MKS on an Intel 386AT
(known in some circles as a "301" motherboard) with a CDC WREN IV disk
drive (SCSI, 280 Megabytes), 4+ megabytes RAM, high-density 5-1/4" and
a 3-1/2", 720kbyte diskette drives. I have a Micom-Interlan NI5010
connecting me to a "regular" (not "thin") Ethernet system. I don't
know if that makes any difference as to how all this stuff works; I
doubt it. The remote machine is a VAX-11/785 running BSD 4.3 UNIX.
The software is MKS Toolkit Version 2.3b and PC-NFS Version 3.00.
With this version of the Toolkit your CONFIG.SYS file (see example,
below) sets SHELL=\etc\init.exe which initializes everything (hence the
catchy name, right? :-) via a /etc/inittab file, performing installation
of TSRs and (repeated) invocation of a login process. Login then starts
the command processor, a very capable KSH work-alike. Upon user logout
the login process is respawned (vi /etc/inittab).
PC-NFS requires three files be included in CONFIG.SYS (again, see the
example, below); these, by the way, consume nearly 75kbytes (ouch!) of
memory. To allow printer redirection (through the Ethernet connection to
a remote printer) a TSR called "prt.exe" is required. Activating the
network facility itself requires several invocations of the "net"
command with various options. Where these functions are started in the
bootup procedure is critical. I've found only _one_ specific scheme that
works. (Naturally: once I finally got it working why would I jeopardize
a running system with more experiments? :-)
There are several (OK, four) places in which "start-up" functions can
be invoked: /etc/inittab, /etc/rc.ksh, /etc/profile.ksh and in
$HOME/profile.ksh.
First of all, "nfs/prt \*" (the PC-NFS remote printer redirector TSR)
must go into inittab. Anywhere else (/etc/rc.ksh, /etc/profile.ksh,
$HOME/profile.ksh) and the result is that the next command in that
file will result in something like
sh[10]: sh: insufficient memory
repeated on the screen ad infinitum: ResetButton time. (For as often
as I've seen that error message you'd think I'd have it memorized by
now :-)
Secondly, where to put the "nfs/net start rdr hostname \*" took me a
long time (and many, many reboots - thank goodness for the hardware
reset button!) to figure out. It seems reasonable to put the "net"
command in the inittab file, too, but if it is written, for example,
as
nt1;2;wait;c:/nfs/net.exe start rdr hostname \*
the arguments don't get passed to "net" and the next "net" command, such
as "net name username \*" is answered with "Unknown host. `net start rdr
hostname *' must be issued." So the next attempt was with the env
command:
nt2;2;wait;c:/bin/env - TZ=PST8PDT c:/nfs/net.exe start rdr hostname *
but this doesn't work either. As it turns out, installing a "net
start..." command at this point (/etc/inittab) in the boot-up process
won't work anyway because later on, when the user does his personal
network initialization ("net name..." and "net use...") the PCNFS
software will end up with a stack overflow error. The error message
comes from somewhere within the PC-NFS software, and it is a "hung-
system" (CTL-ALT-DEL or ResetButton) situation. (I did get the "net
start..." to execute from inittab by calling it via a shell script:
nt3;2;wait;c:/bin/env - TZ=PST8PDT c:/bin/sh.exe c:/etc/net_start
but for the reason above - stack overflow errors - this isn't the way
to do it.)
Placing the "net start rdr hostname \*" line in /etc/rc.ksh fails for
the same stack overlow error mentioned above.
So the next attepmt is to merely place the "net start..." line in either
/etc/profile or in $HOME/profile. Either location has the same effect:
everything works fine - you can mount remonte drives and printers,
use telnet, etc, etc - until you log out and then back in again to the
MKS login/shell system, and whether or not you unmount the drives
prior to logout. Upon (re) logging in, the "net" commands invoked in
the profile(s) try to reinstall the networking software but result in
an error message something like "nfs error -- unable to get net info."
The only way out is a reboot (hard or soft - I don't remember which).
So, the "net start rdr hostname \*" command can't go in inittab, rc.ksh,
or any profile.ksh. What to do???
Trickery...
Instead of actually doing a "net start rdr..." in /etc/inittab, I
installed a "net blip on" command there. This appears to be a NO OP,
except that this first "net" command results in the PC-NFS INSTALLED
nessage to appear, meaning that the network software has been installed,
it just doesn't know the particulars about host name, remote machine
name, or anything else! That's left for rc.ksh, where the "net start
hostname \*" command is now placed! Then, $HOME/profile.ksh takes care
of performing, either directly or indirectly, the "net name..." and
"net use..." commands. No stack overflows, and no logout/login problems,
either. The "net blip on" command is called via an "env" command to
provide the TZ environment variable to it, else it complains, and
assumes a value. (It always selected the correct one, at least when
it happend to me, and I don't know how it knew...).
So there it is - 2-1/2 days of fairly concentrated effort. But worth it
to have MKS and PC-NFS working together. Hopefully this will save you
the time and effort required to get MKS and PC-NFS working together.
And if someone replies with "well, on page XX of the manual you'll find
exactly that..." I'll shoot myself (my, aren't we being dramatic) since
I poured over those FM's and never did find the needed information.
For completeness, here are my MKS and PC-NFS system files - config.sys,
/etc/inittab, /etc/rc.ksh, /etc/profile.ksh, $HOME/profile.ksh and the
files called by $HOME/profile.ksh, disks.ksh and printers.ksh (edited
slightly for generality).
And again, thanks to Gerry Wheeler of MKS for getting me on the right
track.
CONFIG.SYS:
device=c:nansi.sys
files=30
buffers=25
break=on
device=c:\nfs\pcnfs.sys
device=c:\nfs\sockdrv.sys
device=c:\nfs\ni5010.sys /i5
lastdrive=V
device=ramdrive.sys 1536 256 128 /e
shell=c:\etc\init.exe
/ETC/INITTAB
lp;2;wait;c:/nfs/prt.exe \*
nt1;2;wait;c:/bin/env.exe - TZ=PST0PDT c:/nfs/net.exe blip on
rc;2;wait;c:/bin/sh.exe etc/rc
co;34;respawn;c:/bin/login.exe
/ETC/RC.KSH
echo '/ETC/RC...'
c:/dos/diskjoin d: c:\usr2 #
c:/dos/diskjoin e: c:\src # I use the dos "join" command
c:/dos/diskjoin f: c:\games # renamed as "diskjoin" so as not
c:/dos/diskjoin g: c:\wp50 # to collide with the MKS "join"
c:/dos/diskjoin h: c:\lang # command. With 8 full sized
c:/dos/diskjoin i: c:\graphics # (32+Megabyte) partitions it's
c:/dos/diskjoin j: c:\temp # the only way I can keep track
c:/dos/diskjoin k: c:\scratch # of them all.
c:/dos/diskjoin w: c:\tmp #
export TZ=PST8PDT # ...and here's where PC-NFS
c:/nfs/net start rdr <local-name> \* # is actually started
/ETC/PROFILE.KSH
echo '/ETC/PROFILE...'
c:/bin/switch -
export COMSPEC=c:/command.com
export GLOB=c:/etc/glob.exe
export HOSTS=c:/ni5010 export
PROCOMM=c:/term_emu/procomm/
export PS1="<local-name>> "
export TMPDIR=c:/tmp
$HOME/PROFILE.KSH
echo '$HOME/PROFILE...'
export PATH='c:/bin;c:/usr/bin/;c:/dos;c:/nfs;.'
export EDITOR=c:/bin/vi
export FCEDIT=c:/bin/vi
export VISUAL=c:/bin/vi
trap 'c:/usr/bin/netkill; exit' EXIT
netstart
disks
printers
$HOME/NETSTART.KSH
read password?"Password: [8m" ; print [0m
echo '$HOME/NETSTART...'
echo ' starting network...'
net pcnfsd <authentication-server>
echo " logging in to <hostname> as $LOGNAME..."
c:/nfs/net name $LOGNAME ${password}
unset password
echo ' establishing gateway...'
net route <gateway-machine>
$HOME/DISKS.KSH
echo '$HOME/DISKS...'
echo ' Connecting <file-server>:<filesystem1> as l:
net use l: \\\\<file-server>\\<filesystem1>
echo ' Connecting <file-server>:<filesystem2> as m:
net use m: \\\\<file-server>\\<filesystem2>
$HOME/PRINTERS.KSH
echo '$HOME/PRINTERS...'
echo ' Connecting <print-server>:<printer-name> as lpt3:
net use lpt3: \\\\<print-server>\\<printer-name>
keith
Keith Ericson at TekLabs (resident factious factotum)
Tektronix, PO 500, MS 58-383 Beaverton OR 97077 (503)627-6042
UUCP: [uunet|ucbvax|decvax|hplabs]!tektronix!tekgvs!keithe
ARPA: keithe%tekgvs.TEK.COM@RELAY.CS.NET
CSNet: keithe@tekgvs.TEK.COMtneff@dasys1.UUCP (Tom Neff) (10/10/88)
I'm sorry Keith Erickson had to go through so much hassle getting his NFS system up and running under MKS. I didn't respond to the original inquiry because I assumed his problems had to do with some arcane interaction between the networked environment and MKS. Now it looks as though it was just the usual mixup about where you put your TSR's and how you get the parameters passed in one piece. As Keith has already discovered, and as the manual makes clear, you don't launch TSRs from the Korn shell, it just messes up MKS's memory management. You need to launch them from something else first, then invoke KSH. There are two choices: INIT.EXE and COMMAND.COM. The MKS guide lists four basic "configurations," with the fourth and most powerful one setting SHELL=\etc\init.exe in CONFIG.SYS, then using /etc/inittab to launch TSRs and so forth before invoking /etc/login. I used to do it this way but two problems arose: (a) some TSRs balk at being spawned by something other than COMMAND.COM (usually these are "enhancers" that don't draw fine distinctions between COMMAND.COM and the other DOS modules), and some need parameters set up for them that /etc/inittab made difficult. I came up with a very simple workaround. I set SHELL=COMMAND.COM in CONFIG.SYS, and create an AUTOEXEC.BAT which loads my TSRs (all of them, for simplicity's sake, rather than just the balky ones), then finishes up by launching \ETC\INIT.EXE which takes over and does the other stuff. My /etc/inittab just has the minimum needed to respawn /etc/login. The net cost to this approach is a few K for the permanent resident copy of COMMAND.COM (although as I say, some TSRs really seem to want it there, so it's a very bearable cost). Actually the way I do it right now, I am probably wasting a handle keeping that AUTOEXEC.BAT open forever, but I could save the handle by using STACKEY "\etc\init" CR as the last line if I cared deeply. The net benefit is that all of the nitty gritty details of setting up things like NFS can now be done just as it says in the product installation guide, rather than having to be translated into MKS-ese by a wizard first. I'm not knocking MKS at all here, that's just a fact of life. Here's hoping Gerry and the gang knock one out for OS/2, so I can stop clenching my teeth at 80k+ for every copy of ksh!! :-) -- Tom Neff UUCP: ...!cmcl2!phri!dasys1!tneff "None of your toys CIS: 76556,2536 MCI: TNEFF will function..." GEnie: TOMNEFF BIX: t.neff (no kidding)