devhawala / dodo

Xerox Network Services (XNS) implemented in Java
Other
13 stars 1 forks source link

Darkstar doesn't Netboot #3

Closed iblowmymind closed 3 years ago

iblowmymind commented 3 years ago

Hello,

I've been experimenting with netbooting the Darkstar. I connected the server through NetHub to Darkstar. I used a utility to convert the floppies for Services 11.1.3's Etherboot files for VP 2.0 into raw images (using imd2raw) and used a tool to (extractxeroxfloppy.c on Bitsavers) extract the files into the bootsvc folder. I enabled the boot service on the properties file. I then created an Installation Drawer and VP Applications drawer and added the alias to the CHS file, copied over the 8010 Standard Etherboot Files to the bootsvc directory, started Darkstar up in ethernet boot mode, and... Stuck in 149.

I can confirm that the boot service is on (Dodo assigns the boot file IDs correctly according to the BootService profile), and the Installation Drawer / VP Applications drawers are properly created and filled up. The NetHub log says that a connection is being made, so that's good, however, there's no log of any boot packets being sent (or requests for boot packets being received), so I'm suspecting that Dodo doesn't actually serve the EtherInitial file to Darkstar since it doesn't even see the request in the first place. I'm suspecting the culprit is either Darkstar's NetHub implementation, the NetHub program itself, or some Dodo config issue. Is there a setting modification I need to make? Here are the settings I currently have:

network number

e.g.: networkNo = 1234

networkNo = 1050

machine id

e.g.: machineId = 12-34-56-78-9A-BC

machineId = dodo-central

verify and generate checksums at IDP level?

e.g.: useChecksums = false

(tcp/ip) hostname for the NetHub

netHubHost = localhost

(tcp/ip) port at "hostname" for the NetHub

netHubPort = 3333

time zone parameter for the time service

e.g. for local time = CEST (+1hr with DST)

localTimeOffsetMinutes = 180

shift date if required, e.g. back 28 years (2018 => 1990)

daysBackInTime = 10227

clearinghouse service and database

organizationName = blw domainName = star chsDatabaseRoot = ./chs-database

print service

printService.name = printer:star:blw printService.outputDirectory = ./prt-printer printService.paperSizes = a4, usLetter printService.disassembleIp = true #

if IPPROC.PS is available:

printService.ip2PsProcFilename = ./prt-printer/res/IPPROC.PS #

postprocessing of generated PostScript files:

e.g. for Linux: printService.psPostprocessor = ./prt-poseidon/res/postprocess-ps.sh

or for Windows: printService.psPostprocessor = ./prt-poseidon/res/postprocess-ps.cmd

attention: both scripts assume GhostScript to be on the PATH (both bin and lib subdirectories!)

printService.psPostprocessor = ./prt-printer/res/postprocess-ps.cmd

how to generate strong keys

(XDE does not rejected neither 'true' nor 'false', so it is unclear which is right)

strongKeysAsSpecified = true

optional for supporting DarkStar

authSkipTimestampChecks = true ether.useDarkstarWorkaround = true

file services

fileService.0.name = data:star:blw fileService.0.volumePath = ./vol-data

mail service

mailService.volumePath = ./vol-mailservice

make Dodo be a pure time server?

startRipService = false

startChsAndAuthServices = false

startBootService = true bootService.baseDir = bootsvc bootService.verbose = true


- *machines.cfg*

main Dodo server

dodo-central = 10-00-BB-10-11-01

#

slow down for the Darkstar machine (running XDE, StarOS, or ViewPoint)

# darkstar-1 = 00-00-AA-01-23-45

description of the service

description = File Storage

network address of the service

machineId = dodo-central

authentication level, one of:

none => credentials will be ignored (resp. credentials not used in the protocol)

simple => simple credentials accepted only (default)

strong => strong credentials accepted only

both => simple and strong credentials supported

authLevel = both aliases = Installation Server


- *I also have an entry for my workstation (Darkstar), I doubt it's required but here it is*

description = Xerox Star 1 machineId = darkstar-1 aliases = blwstar1, star1, xeroxstar1, ws1, darkstar1


- *root-folder.lst for the volume I'm trying to boot*

Personal Drawer for blw blw:star:blw Guest Drawer guest:star:blw Public Drawer blw:star:blw w!:star:blw Installation Drawer blw:star:blw r!:star:blw VP Applications blw:star:blw r!*:star:blw


- *contents of the bootsvc directory (I extracted 130P27911_01.IMD, 130P27912_02.IMD and 300E09220_11.IMD from Standard_Etherboot_Files_1.1.2_2.0_Network_Services_11.1.3_1Q91.zip)*

total 1200 drwxrwxrwx 1 blw blw 4096 Apr 12 10:36 ./ drwxrwxrwx 1 blw blw 4096 Apr 12 08:50 ../ -rwxrwxrwx 1 blw blw 8181 Jan 1 1970 BootService.profile -rwxrwxrwx 1 blw blw 24576 Jan 1 1970 DLion.germ -rwxrwxrwx 1 blw blw 247296 Jan 1 1970 EIDiskDlion.boot -rwxrwxrwx 1 blw blw 4746 Jan 1 1970 EtherInitial.db -rwxrwxrwx 1 blw blw 471552 Jan 1 1970 InstallerNSDLion.boot -rwxrwxrwx 1 blw blw 39796 Jan 1 1970 Mesa.db -rwxrwxrwx 1 blw blw 79782 Jan 1 1970 MoonBoot.db -rwxrwxrwx 1 blw blw 265216 Jan 1 1970 SimpleNetExecDlion.boot -rwxrwxrwx 1 blw blw 24576 Jan 1 1970 SpecialDLion.germ -rwxrwxrwx 1 blw blw 4746 Jan 1 1970 SpecialEtherInitialAlt.db -rwxrwxrwx 1 blw blw 39796 Jan 1 1970 SpecialMesa.db*


- *log of Dodo*

----# clientBindToSocket( sockNo = 16383, listener = dev.hawala.xns.network.NetMachine$PexRequestHandler@f5f2bb7 ): socket bound

----# clientBindToSocket( sockNo = 16383, listener = dev.hawala.xns.network.NetMachine$PexRequestHandler@f5f2bb7 ): listener started

----# opening connection to hub

bootSvc: bootFileId 0x0000AA000000 -> EtherInitial.db bootSvc: bootFileId 0x0000AA000008 -> Moonboot.db bootSvc: bootFileId 0x0000AA000010 -> Mesa.db bootSvc: bootFileId 0x0000AA000018 -> DLion.germ bootSvc: bootFileId 0x0000AA000020 -> SimpleNetExecDLion.boot bootSvc: bootFileId 0x0000AA000001 -> SpecialEtherInitialAlt.db bootSvc: bootFileId 0x0000AA000012 -> SpecialMesa.db bootSvc: bootFileId 0x0000AA00001A -> SpecialDLion.germ bootSvc: bootFileId 0x0000AA000022 -> EIDiskDLion.boot bootSvc: bootFileId 0x0000AA000200 -> EIDiskDLion.boot bootSvc: bootFileId 0x0000AA000202 -> InstallerNSDLion.boot bootSvc: bootFileId 0x0000AA000000 -> EtherInitial.db bootSvc: bootFileId 0x0000AA000009 -> Moonboot.db bootSvc: bootFileId 0x0000AA000001 -> SpecialEtherInitialAlt.db

----# clientBindToSocket( sockNo = 10, listener = dev.hawala.xns.level4.boot.BootResponder@34340fab ): socket bound

----# clientBindToSocket( sockNo = 10, listener = dev.hawala.xns.level4.boot.BootResponder@34340fab ): listener started

----# clientBindToSocket( sockNo = 2, listener = dev.hawala.xns.level4.echo.EchoResponder@2eee9593 ): socket bound

----# clientBindToSocket( sockNo = 2, listener = dev.hawala.xns.level4.echo.EchoResponder@2eee9593 ): listener started

----# clientBindToSocket( sockNo = 8, listener = dev.hawala.xns.network.NetMachine$PexServer@725bef66 ): socket bound

----# PexServer.start( localEndpoint = [1050-10.00.BB.10.11.01:8] , sender = ... )

----# clientBindToSocket( sockNo = 8, listener = dev.hawala.xns.network.NetMachine$PexServer@725bef66 ): listener started

----# clientBindToSocket( sockNo = 1, listener = dev.hawala.xns.level4.rip.RipResponder@ea4a92b ): socket bound

----# clientBindToSocket( sockNo = 1, listener = dev.hawala.xns.level4.rip.RipResponder@ea4a92b ): listener started

----# clientBindToSocket( sockNo = 20, listener = dev.hawala.xns.network.NetMachine$PexServer@4439f31e ): socket bound

----# PexServer.start( localEndpoint = [1050-10.00.BB.10.11.01:20] , sender = ... )

----# clientBindToSocket( sockNo = 20, listener = dev.hawala.xns.network.NetMachine$PexServer@4439f31e ): listener started

----# clientBindToSocket( sockNo = 21, listener = dev.hawala.xns.network.NetMachine$PexServer@5622fdf ): socket bound

----# PexServer.start( localEndpoint = [1050-10.00.BB.10.11.01:21] , sender = ... )

----# clientBindToSocket( sockNo = 21, listener = dev.hawala.xns.network.NetMachine$PexServer@5622fdf ): listener started

Starting mail service 'postman:star:blw' (mailboxes volume directory: ./vol-mailservice) Opening volume 'vol-mailservice' from directory: D:\SoftwareHD\Software\Emulators\Mesa\dodo-8010.\vol-mailservice loading metadata from: 00000178C4F8EE00.full-meta Volume 'vol-mailservice' opened +++ ChsDatabase.findObjectNames( pattern = '.*' , reqProperty = 10003 ) +++ ChsDatabase.findObjectNames() -> found 'blw' +++ ChsDatabase.findObjectNames() -> found 'guest' Mail: user 'blw:star:blw' : currently 0 mail(s) in mailbox Mail: user 'guest:star:blw' : currently 0 mail(s) in mailbox Mail service 'postman:star:blw' started

----# clientBindToSocket( sockNo = 26, listener = dev.hawala.xns.network.NetMachine$PexServer@6a1aab78 ): socket bound

----# PexServer.start( localEndpoint = [1050-10.00.BB.10.11.01:26] , sender = ... )

----# clientBindToSocket( sockNo = 26, listener = dev.hawala.xns.network.NetMachine$PexServer@6a1aab78 ): listener started

####### Printing3, supported paperSizes: a4, usLetter ####### Printing3, using ip-to-ps proc: ./prt-printer/res/IPPROC.PS ####### Printing3, patched ip-to-ps proc for Xerox PS font usage ####### Printing3, using ps post-processor: ./prt-printer/res/postprocess-ps.cmd Starting file service 'data:star:blw' (volume directory: ./vol-data) Opening volume 'vol-data' from directory: D:\SoftwareHD\Software\Emulators\Mesa\dodo-8010.\vol-data loading metadata from: 00000178C4F8F029.full-meta Volume 'vol-data' opened File service 'data:star:blw' started

----# clientBindToSocket( sockNo = 5, listener = dev.hawala.xns.network.SppServerListener@3f197a46 ): socket bound

----# clientBindToSocket( sockNo = 5, listener = dev.hawala.xns.network.SppServerListener@3f197a46 ): listener started



Are there, like, any other configuration lines I need to add to make it work? SPP intervals I need to change? 

Thanks!
\- blw

Also, some bugs that I noticed while copying over the files using a temporary Duchess / GVWIN 2.1 setup:

> 1) I noticed a bug while copying over some stuff, sometimes the items you copy over don't copy over with the NSFileError "obsolete", relisting the file makes it seem to appear, but after a Dodo restart they disappear again. Also, if you have way too many files in a single drawer and you relist it / scroll up, it will make Dwarf crash with 0456 (I think, can't recall that well) (the crash thing happened after I copied over the Thin Classic fonts, but I don't think it's related to that file)
> 
> 2) And, noticed that in the bootsvc configuration document you wrote, you likely accidentally swapped the places for where "Installation Drawer" and "Installation Server" should go since you wrote "Add the alias *Installation Drawer* to the file service (i.e. extend or add the property aliases with this name to the fs~name.properties file of the file service)." and "add a line for the file drawer *Installation Server* to the file root-folder.lst of the file service to ensure that the file drawer will exist after the next restart of the service.")
devhawala commented 3 years ago

Hello,

currently not having much time for an analysis: does the Darkstar machine effectively send an boot request packet when a network boot is made? The dodo log looks good, but there is no packet log from the boot responder, which should at least log the arrival of a boot request packet (a line starting with "boot-server-packet"), even if not able to handle it (the reason for not handling it should however also be logged). I suspect Darkstar of not supporting network boot, as this must be handled by the IOP before any microcode is loaded, so in a non-standard way, as fast devices (disk, ethernet) are usually handled by microcode. I remember having looked for some command resp. data connection from the IOP to the network device, but i did not find any (or at least see any).

For the other "bugs": you're right. There seems still to be some timeout on the session when many files are copied at once, so the session got invalid before relisting the drawer. I thought to have found all places where such a timeout can occur, but there must still be some out there... The Dwarf crash on large large file drawers must be investigated, but it may be hard to do so (find the rogue instruction or memory failure in a long running program is really hard, knowing this from experience) And for the documentation error, you're right again, "Installation Server" must be the alias for the file service and the "Installation Drawer" must be added to "root-folder.lst".

Maybe i find some time to look at it in the next weeks, but can't promise anything...

Greetings, Hans

iblowmymind commented 3 years ago

Hello,

Nope, no boot request is being made, at all, at least from what I can see in Dodo's logs. Darkstar does (seem to, at least) support etherboot, as there is an option in the boot menu for doing an Ethernet boot of the device. However, the logs don't even capture and log any boot packet being sent and received. Thanks!

iblowmymind commented 3 years ago

I think this is likely related to Darkstar, so I’m going to open an issue there instead if you don’t think it’s related to Dodo.

devhawala commented 3 years ago

yes, it's very probably Darkstar, as Dodo is not yet involved in the network boot process

iblowmymind commented 3 years ago

I'll just close this and open an issue over there then. Thank you!