Setting Up Genera 8.3, Part 1

I'm setting up Genera 8.3 on the XL1201 using a clean hard drive. Literally all this hard drive has on it is Genera 8.3 and these patches:

  • Genera 8.3 y2k patches
  • Copy world patch
  • Fepfs patch

Genera 8.3 Herald FEP Files Detailed Herald

This hard drive was sold by David K. Schmidt and has had most things set up already, so we're not actually doing a full installation from CD-ROM.

Let me preface this by saying that I have read a lot of the documents on Bitsavers but have no actual experience with Genera and haven't had almost any guidance on what I'm attempting to try. My goal here is two-fold:

  1. Get a site properly configured so I can use networking and NFS between the XL1201, the MacIvory III and Linux (or my macOS 10 computers)
  2. Get things set up so I can write my first Symbolics Common Lisp program
    • And be able to back this up via NFS to Linux
    • Then use the Linux host to publish the code to GitHub

Before I started this session, I had set up an fspt.fspt file, which as you can see from the directory, took two tries. I imagine Genera probably saw the lmfs.file without one, but as the LMFS is really small (and almost full) I figured I'd better set the "partition table" up first.

First, set up the network addresses in the local.boot file. (Page 539 of Installation Guide and Page 552 of Site Operations) In my case I used this line:

Set Boot Options :Network Address CHAOS|1200,INTERNET|192.168.1.92  

local.boot

After that it directs you to Halt Machine LISP and then Reset FEP at the FEP, to cold boot, so we can define our site from Distribution site.

Halt Machine

Here's how we'll set up our site:

  • Site name: Admiral
  • Hosts:
    • XL1201: XENON, Chaos 1200, Internet 192.168.1.92
    • MacIvory III: ARGON, Chaos 1201, Internet 192.168.1.93
    • Ubuntu NFS: HELIUM, Internet 192.168.1.98
    • Internet gateway: IGW, Internet 192.168.1.1
      • (Sorry, doesn't follow element naming.)

FEP reboot Genera banner

Now, Define Site (site name) Admiral. It then asks for the Namespace Server Name which is this XL1201 server we're calling XENON. After entering that name, it gives a bunch more options. I'm using the defaults except for saying Standalone Site: No. The first time I tried this I got an odd error about not have a structured directory whose last sub-component is "SITE".. I checked (Show Directory LOCAL:>sys>site>) and sure enough it was there. Turns out I left the > off the System File Directory. Second try was a charm.

Define Site Admiral

Command: Define Site (site name) Admiral  
Defining site ADMIRAL with the local host as the Primary Namespace Server  
Namespace Server Name: XENON  
System File Directory: XENON:>sys>site>  
Namespace Descriptor File: XENON:>sys>site>ADMIRAL-namespace.text  
Default Login: Lisp-Machine  
Host for Bug Reports: XENON  
Local Timezone: EDT  
Standalone Site: Yes {No}  
{ABORT} aborts, {END} uses these values
The local host is now XENON.  
[20:13:18 Namespace on DIS-LOCAL-HOST: Reloading namespace ADMIRAL.
          Recent servers contacted are DIS-LOCAL-HOST]
[20:13:19 Namespace ADMIRAL has become unloaded:
          No longer server for this namespace.]
[20:13:23 Translation file for IMAGES not found.
          Recent servers contacted are XENON]
[20:13:23 Translation file for GRAPHICS not found.
          Recent servers contacted are XENON]
[20:13:23 Translation file for JOSHUA not found.
          Recent servers contacted are XENON]
Command:  

The {No} is just No in bold. {ABORT} and {END} look like buttons. I'm not sure what the messages about Translation file mean.

Now, we have a site. Yay! The manual now tells you to use the Namespace Editor to set up the site. (See Page 441 in Site Operations) We start this using Select Activity (activity name) Namespace Editor.

Empty Namespace Editor

Once in there, you can do Edit Object Host XENON and you get a huge amount of things you can edit. (See Attributes for Objects of Class "Host" in Site Operations.) Per my configuration above, I'm going to add an Address of INTERNET 192.168.1.92 (because this machine may have been built in 1992). However, we can't do it because the INTERNET hasn't been defined yet.

Namespace Editor Options Editing XENON Can't add INTERNET

We'll also mark XENON as a Server Machine, but we must still do Enable Services or use sys:enable-services. After that, we click Save Object in the bottom left. It asks us to confirm.

Saved XENON

Now, we'll create ARGON, the MacIvory III. We'll use Create Object Host ARGON :Copy From XENON for this (so we don't have to enter all the services), and edit the screen appropriately.

  • Machine Type: MACIVORY
  • Address: CHAOS 1201
  • Server Machine: No
  • Default Secondary Name Server: Yes

Create ARGON Save ARGON

Next, we need to create a user for myself. I'll use, naturally, dfields, for this. However, let's first see what an existing user looks like. So, I type Edit Object User and hit Control-/ to get the list, and the only one is LISP-MACHINE, so I edit it.

User LISP-MACHINE

Not much there, so let's create dfields now. Create Object User dfields does the trick. I set the required fields (marked by *) and a few optional ones and save the record after confirming.

Create DFields

That is probably all we need to do in the Namespace Editor until we set up TCP/IP and NFS, when we'll make an Ubuntu Linux run an NFS server for our Ivory machines.

Site Configured World

Now that we have a Namespace set up, we need to finish setting up the World. (See Page 542 of the Installation Guide)

First, we set up the SYS:SITE;SYS.TRANSLATIONS file. This is stored in XENON:>sys>site>sys.translations on the LMFS and already contains what looks like reasonable defaults as suggested in the manual:

(fs:set-logical-pathname-host "SYS" :translations
  '(("**;" "XENON:>rel-8-3>sys>**>")))

sys.translations

So, let's make sure that this directory exists and looks reasonable.

>sys>site> 1 >sys>site> 2 >rel-8-3>sys> various directories >rel-8-3>sys>standalone-site> directories

It does look reasonable.

Saving the World

So, now we'll save our world. Let's actually save it twice, first as an incremental and then as a complete world.

Save World Incremental FEP7:>Inc-Xenon-Server.ilod.newest then estimates a size and shows a herald and asks if it's okay. Then asks if the title is okay, which I change, and then does the save.

(Shoot, I should have taken a screen shot of the save, it wiped the screen after a short while.)

Then, it says it saved it, and if I wanted to update the boot file (which I do).

Post save world

Ugh. After this I noticed that I had set the clock incorrectly when doing all these things. It was set 10 years earlier. Oh well!

Wrong time

TCP/IP

Let's get TCP/IP running, although Symbolics calls it IP-TCP (which probably makes more sense anyway). There's a whole Symbolics IP/TCP Software Package document to read about this.

IP/TCP

This disk already has IP/TCP restored, so no need to do that. So, follow the manual from page 1232.

  • (si:login-to-sys-host)
  • Load System IP-TCP

Be careful with that last command, as it defaulted to IP-TCP Documentation before I could abort it.

NFS load

(It turns out that this may be unnecessary - see herald above.)

Now we need to enable the Internet namespace.

  • (tcp:initialize-internet-namespace)

It opens up a "dialog" and requires answers, but the manual doesn't really give much information, so I'll wing it, and then hit END.

Create INTERNET Namespace

Now, it suggests another Save World, so here goes.

Cannot Save World twice

Well, that clearly didn't work: Error: This world has already been disk saved. It doesn't work to disk save it again. Presumably this means anytime you save a world you need to cold boot to save it again? I don't know, but let me try a Complete instead of an Incremental. Nope, that also didn't work.

Really cannot Save World twice

So, I guess I have to Halt Machine and cold boot Genera. When the FEP prompt comes up, best to hit REFRESH to clear the screen of distractions.

Then, Clear Machine and Hello. Looks like I need to update the local.boot file with the new Internet address. Then Boot, which loads the Inc-Xenon-Server we saved above.

This time, however, the startup gives us an error because we created it couldn't resolve the new INTERNET. Hm. It asks two questions for which I just hit RETURN and then booted.

Now, back to (si:login-to-sys-host).

Oddly, it used the 2006 time, but oh well, I fixed it... again. Time to Save World, which works, but for whatever reason it doesn't show IP-TCP loaded in the herald.

Anyway, the world saves, but I need to edit the local.boot file.

Now, continue with the TCP/IP installation (tcp:install-nic-host-table). This, unsurprisingly, fails, trying to connect to 192.67.67.20 on port 101 (hostname) per RFC811. This service has of course been replaced by DNS.

Oh well, ABORT that. I'll think about reverse engineering what it wants to do here later or just ignore it for now.

It also says I need to set an Internet-Domain-Name attribute of the local namespace. So, Select Activity Namespace Editor then Edit Object Namespace Admiral. I'll put lisp.engineer in there, a TLD that was not foreseen over two decades ago, I'm sure.

Next, I'll add the Internet address to the two hosts. It seems that XENON already has its address in there.

Now update ARGON appropriately.

Now let me create HELIUM, my Ubuntu Linux NFS server. (I laughed to myself knowing that linux.local mDNS name wouldn't work on Genera.)

I then thought I'd check out what the INTERNET Network was, but couldn't, despite being told it was a completion:

Oh well, moving on. Since the world was just saved, it's best to restart it, but before that, I wanted to check if the Internet on the XL1201 is actually running from my iMac:

Admiral-iMac:~$ ping 192.168.1.92  
PING 192.168.1.92 (192.168.1.92): 56 data bytes  
64 bytes from 192.168.1.92: icmp_seq=0 ttl=63 time=2.077 ms  
64 bytes from 192.168.1.92: icmp_seq=1 ttl=63 time=2.175 ms  
64 bytes from 192.168.1.92: icmp_seq=2 ttl=63 time=2.087 ms  
^C
--- 192.168.1.92 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss  
round-trip min/avg/max/stddev = 2.077/2.113/2.175/0.044 ms  
Admiral-iMac:~$  

Bingo! Halt Machine, Clear Machine, Boot to cold boot the world and continue.

Using IP/TCP?

Looking ahead in the manual (p. 1236), it looks like you have to run Enable Network INTERNET. So, I logged in and did that.

Looks like we can send a ping to our Internet Gateway (that we previously created as named IGW) with the form (tcp:send-icmp-echo "IGW") (see page 1260). I confirmed that IGW actually exists in the Namespace Editor.

However, you can't just put in an IP address; that gives an error.

You can however give the IP address as INTERNET|192.168.1.1 and giving a non-existent host's IP address causes it to return NIL as you'd expect.

Future:

Things to investigate in the future:
* DNS (page 1237) * Symbolics services on TCP/IP (page 1234)

NFS

Like TCP/IP, there's a Symbolics Network File System (NFS) User's Guide to be read.

This says the XL1201 can act as an NFS client and server. For now, let's just focus on client. However, the manual indicates (page 1285, unnumbered):

To configure your system as an NFS Client, first load RPC and IP-TCP and then load the NFS Client.

RPC

Well, shoot. Now I have to figure out how to install this RPC. Obviously, Load System RPC should work, and indeed it is an option.

There's a whole manual, Networks, which talks about RPC but I don't see anything about the "Load System RPC" in there.

Actually loading the system, however, fails looking for some file called SYS:EMBEDDING;RPC;REMOTE-CALL-RUNTIME.IBIN.36.

Let's see if we can find it. It looks like this stuff probably belongs in XENON:>rel-8-3>sys>rpc> but I don't see it there. Lots of other systems have directories in there, but all the ones between P and S are missing (if any).

Let's see if I can do a find equivalent, using Show Directory XENON:>**>rpc.*.newest.

Found it! Looks like the file remote-call-runtime.ibin does not exist, but a .lisp does. Presumably I just need to compile that file. Looks like Compile File might do the trick:

This time, Load System RPC gave the same error, but I told it to supply a different pathname, and just used the same thing with .NEWEST and it accepted it. However, it wanted another file for which there is no .ibin. I'm going to fire up another Lisp with SELECT control-L and just compile these in the other window. This works.

However, after a few files, I couldn't stand it, so I thought there's a better way. I asked and ams answered to use Compile System, so let's try that.

So, that compiled things. However, Load System RPC is still asking for the wrong file versions. ams came through again and suggested using the version keyword. Load System RPC :Version Latest worked.

RPC Unnecessary?

From Page 1289 of the NFS User's Guide:

Note that you only have to load Symbolics RPC separately on 3600-family machines.

Okay, so that might explain why the whole RPC thing didn't need to be loaded. I'll have to retry this on a clean world, I guess.

Going back to look at the detailed herald above shows that, yep, RPC was loaded and I missed it. <sigh> So, if we save this world, don't use it.

Linux NFS Server

On Ubuntu 12.04 LTS:

  • apt-get install nfs-kernel server
  • mkdir /srv/genera ; chmod a+w /srv/genera
  • Edit /etc/exports and add /srv/genera and /etc (page 1286)
/srv/genera 192.168.1.0/24(rw,all_squash,sync,no_subtree_check)
/etc            192.168.1.0/24(ro,all_squash,sync,no_subtree_check)
  • service nfs-kernel-server reload
  • Test with showmount -e
linux:/srv/genera# showmount -e  
Export list for linux:  
/etc        192.168.1.0/24
/srv/genera 192.168.1.0/24
Admiral-iMac:~$ showmount -e linux.local  
Exports list on linux.local:  
/etc                                192.168.1.0/24
/srv/genera                         192.168.1.0/24
  • Mount and test using NFSv2
Admiral-iMac:~# mount_nfs -o rw,vers=2,resvport linux.local:/srv/genera /private/nfs  
Admiral-iMac:~# ls -l /private/nfs  
Admiral-iMac:~# yes | head -10000 >/private/nfs/testfile1  
Admiral-iMac:~# ls -l /private/nfs  
total 40  
-rw-r--r--  1 65534  65534  20000 Jun 26 23:48 testfile1
Admiral-iMac:~# umount /private/nfs  
Admiral-iMac:~# mount_nfs -o ro,vers=2,resvport linux.local:/etc /private/nfs  
Admiral-iMac:~# ls -l /private/nfs/{passwd,group,mtab}  
-rw-r--r--  1 root  wheel   688 Feb 28  2013 /private/nfs/group
-rw-r--r--  1 root  wheel   625 Jun 26 19:51 /private/nfs/mtab
-rw-r--r--  1 root  wheel  1123 Jun 26 19:51 /private/nfs/passwd
Admiral-iMac:~# head -2 /private/nfs/mtab  
/dev/mapper/vg1-root / ext4 rw,errors=remount-ro 0 0
proc /proc proc rw,noexec,nosuid,nodev 0 0  
linux:/srv/genera# ls -l  
total 20  
-rw-r--r-- 1 nobody nogroup 20000 Jun 26 23:48 testfile1

So, NFS server is working in a minimal fashion.

NFS Client

Okay, so Load System NFS Client. (I note for later that there is no NFS Server system shown in the system list.)

Now, we need to tell our Namespace that we can use NFS on HELIUM with Add Services To Hosts FILE UDP NFS HELIUM command (first page of the NFS User's Guide).

Seems that there is a Show NFS command, including Exports and Mounts.

Now, it seems that various UNIX properties must be set on HELIUM (page 1288), using the Namespace Editor. Viz:

Now, I can't list any files. There are a lot of services, so I did Enable Services All but doesn't help. Still doesn't help.

Well, I guess I'll come back to this another day.

Douglas Fields

Writing LISP and Haskell since 1990